iptables nat

iptables nat iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE nat 表需要的三个链: PREROUTING:可以在这里定义进行目的NAT的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT; POSTROUTING:可以在这里定义进行源NAT的规则,系统在决定了数据包的路由以后在执行该链中的规则。 OUTPUT:定义对本地产生的数据包的目的NAT规则。 需要用到的几个动作选项: (真实环境中用大写) redirect 将数据包重定向到另一台主机的某个端口,通常用实现透明代理和对外开放内网某些服务。 snat 源地址转换,改变数据包的源地址 dnat 目的地址转换,改变数据包的目的地址 masquerade IP伪装,只适用于ADSL等动态拨号上网的IP伪装,如果主机IP是静态分配的,就用snat ip 包大致的流向 DNAT, podman nat表prerouting链 - nat替换目标地址 路由判断 filter表forward链 nat表postrouting链 accept 路由判断, 流入虚拟网卡 cni-podman0 https://www.cnblogs.com/highstar/p/3256813.html

2018-11-22 · 1 min · 52 words · -

the log

the log http://www.cnblogs.com/foreach-break/p/notes_about_distributed_system_and_The_log.html Log是如下系统的核心: 分布式图数据库 分布式搜索引擎 Hadoop 第一代和第二代K-V数据库 Log可能跟计算机的历史一样长,并且是分布式数据系统和实时计算系统的核心。 Log的名字很多: Commit log Transaction log Write-ahead log

2018-11-19 · 1 min · 16 words · -

protocol buffers, protobuf

protocol buffers, protobuf install protoc # archlinux 可以从仓库直接安装 pacman -S protobuf # 其它发行版, 比如 ubuntu 可以下载二进制包 解压即可. https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protoc-3.6.1-linux-x86_64.zip # set protoc to PATH protoc -help windows download protoc https://developers.google.com/protocol-buffers/docs/downloads define message format in a .proto file syntax = "proto3"; message SearchRequest { string query = 1; int32 page_number = 2; int32 results_per_page = 3; } syntax = "proto3"; package package0; option java_package = "com.wiloon.test.protobuf.package0"; message Msg0 { // comments0 string foo = 1; ObjType enum0 = 2; uint64 timestamp = 5; int32 type = 6; //类型 enum ObjType { type0 = 0; type1 = 1; } } generate java/golang code export SRC_DIR=/pathToSrcDir export DST_DIR=$SRC_DIR golang # 安装 protoc-gen-go # install protocol buffers plugin # go: module github.com/golang/protobuf is deprecated: Use the "google.golang.org/protobuf" module instead. # 废弃,deprecated go get -u github.com/golang/protobuf/protoc-gen-go # 建议用这个 go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26 # 或 go install google.golang.org/protobuf/cmd/protoc-gen-go@latest # generate golang code protoc -I=$SRC_DIR --go_out=$DST_DIR $SRC_DIR/proto0.proto protoc --proto_path=$SRC_DIR --go_out=$DST_DIR --go_opt=paths=source_relative $SRC_DIR/foo.proto # -I, --proto_path: .proto 文件目录 # --go_out: 输出目录 java Java 工程建议使用下面的 protobuf-maven-plugin 方式 ...

2018-11-19 · 2 min · 268 words · -

consumer group

consumer group https://www.cnblogs.com/huxi2b/p/6223228.html

2018-11-16 · 1 min · 3 words · -

java 纳秒

java 纳秒 http://hold-on.iteye.com/blog/1943436 前段时间项目中需要 统计接口连接时间,考虑到连接时间一般都是零点几毫秒级别的,为了拿到更精确地数值,没有使用System.currentTimeMillis(),而是贸然地使用System.nanoTime()来统计时间,后来分析服务器上的数据,发现 竟然有10-15%的数据数值竟然超过了 10的13次方。 原因: System.currentTimeMillis() 起始时间是基于 1970.1.1 0:00:00 这个确定的时间的,而System.nanoTime()是基于cpu核心的时钟周期来计时,它的开始时间是不确定的。 (有篇文章说是更加cpu核心的启动时间开始计算的) 但是在多核处理器上,由于每个核心的开始时间不确定,但是在多核处理器上, Java代码 收藏代码 long start = System.nanoTime(); String ip = Utilities.getIpByUrl(url); long cost = System.nanoTime() - start; 这段代码有可能会运行在两个不同的cpu核心上,从而导致得到的结果完全不符逻辑。 Returns the current timestamp of the most precise timer available on the local system, in nanoseconds. Equivalent to Linux’s CLOCK_MONOTONIC. This timestamp should only be used to measure a duration by comparing it against another timestamp from the same process on the same device. Values returned by this method do not have a defined correspondence to wall clock times; the zero value is typically whenever the device last booted. Use currentTimeMillis() if you want to know what time it is.

2018-11-13 · 1 min · 112 words · -

base64, base64 URL, base16, base32

Base64 base64是一种将二进制的01序列转化成ASCII字符的编码方法。编码后的文本或者二进制消息, 就可以运用SMTP等只支持ASCII字符的协议传送了. Base64 一般被认为会平均增加 33% 的报文长度, 而且经过编码的消息对于人类来说是不可读的。 Base64是一种基于 64 个可打印字符来表示二进制数据的表示方法。由于 2 的 6 次方等于 64, 所以每 6 个比特为一个单元, 对应某个可打印字符。三个字节有 24 个比特, 对应于 4 个 base64 单元, 即 3 个字节需要用 4 个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9, 这样共有62个字符,此外两个可打印符号在不同的系统中而不同。一些如uuencode的其他编码方法, 和之后binhex的版本使用不同的64字符集来代表6个二进制数字, 但是它们不叫Base64. Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括 MIME 的 email, email via MIME, 在XML中存储复杂数据. linux 命令行 base64 编码/解码, base64 encode/decode # encode base64 sample.txt > encodedData.txt cat encodedData.txt # decode echo eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9 |base64 -d 标准 base64, StdEncoding A-Z, a-z, 0-9, /, +, = (pad/填充) Base64 URL A-Z, a-z, 0-9, _, - Base64URL 采用了和 Base64 一样的算法作为主要标准,在以下几个方面做了稍许调整: ...

2018-11-12 · 4 min · 758 words · -

redis string

redis string Redis 字符串数据类型的相关命令用于管理 redis 字符串值 template SET key value [EX seconds] [PX milliseconds] [NX|XX] EX、PX、NX、XX 是 redis 2.6.12 版本添加的可选参数 EX second: 设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。 PX millisecond: 设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。 NX: 只在键不存在时, 才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value XX: 只在键已经存在时,才对键进行设置操作。 KEEPTTL: redis 6.0 版本添加的可选参数, 保留设置前指定键的生存时间 SET KEY_NAME VALUE # 设置过期时间 # 设置过期时间之后再用不带 EX 的命令 比如 set key0 value1, 过期时间会失效 set key0 value0 EX 600 # 将值 value 关联到 key, 并将 key 的生存时间设为 seconds (以秒为单位), 可以直接用 set key0 value0 EX 3 SETEX KEY_NAME seconds VALUE GET KEY_NAME INCR key 将key中储存的数字值增一。 ...

2018-11-06 · 2 min · 228 words · -

chrome os, chromeos basic

chrome os, chromeos basic chrome os 多桌面 https://support.google.com/chromebook/answer/9594869?hl=en Drag windows and apps to your preferred desk. Or use shortcuts: Move a window to a new desk: Right-click the top of a window then, select Move window to another desk. Make a window or app available across all desks: Right-click the top of a window, then select Show in all desks. crosh Crosh stands for “Chrome Shell,” and it lets you run commands that usually don’t have graphical tools. You can do things like installing Crouton for a full Linux OS on your Chromebook or checking the device’s battery health—more “advanced” stuff, to put it crudely. If you’ve ever used the Command Prompt or PowerShell on Windows, Crosh is Chrome OS’ version of that tool. ...

2018-11-03 · 1 min · 193 words · -

easy-rsa

easy-rsa #debian apt-get install easy-rsa mkdir /etc/openvpn cp -r /usr/share/easy-rsa /etc/openvpn/ cd /etc/easy-rsa vim vars ./clean-all ./build-ca ./build-key-server server0 ./build-key client0 #--- pacman -S easy-rsa cd /etc/easy-rsa export EASYRSA=$(pwd) easyrsa init-pki easyrsa build-ca scp /etc/easy-rsa/pki/ca.crt foo@hostname-of-openvpn-server:/tmp/ca.crt #OpenVPN server machine mv /tmp/ca.crt /etc/openvpn/server/ chown root:root /etc/openvpn/server/ca.crt https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-debian-8

2018-11-03 · 1 min · 46 words · -

OpenVPN 使用账号+密码方式登陆

OpenVPN 使用账号+密码方式登陆 http://openwrt.iteye.com/blog/2306421 https://xu3352.github.io/linux/2017/06/08/openvpn-use-username-and-password-authentication OpenVPN 使用账号+密码方式登陆 使用账号+密码方式方便给多人分配不同的账号和密码,多人使用更加方便 原文链接: 配置OpenVPN使用User/Pass方式验证登录,不过有个大坑,后面讲 鉴于上一篇文章已经成功的搭建好 OpenVPN 了,不过客户端直接使用证书就可以连接了,但是多个人使用的话,建议还是改为账号+密码方式的,这里介绍比较简单的一种方式 服务端配置 修改服务端配置文件,文件最后追加几行 $ vim /etc/openvpn/delta.conf use username and password login auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env client-cert-not-required username-as-common-name script-security 3 execve 如果加上client-cert-not-required则代表只使用用户名密码方式验证登录,如果不加,则代表需要证书和用户名密码双重验证登录! /etc/openvpn/checkpsw.sh 文件内容: !/bin/sh ########################################################### checkpsw.sh (C) 2004 Mathias Sundman mathias@openvpn.se This script will authenticate OpenVPN users against a plain text file. The passfile should simply contain one row per user with the username first followed by one or more space(s) or tab(s) and then the password PASSFILE="/etc/openvpn/psw-file" ...

2018-11-03 · 1 min · 206 words · -

openvpn 开放端口

openvpn 开放端口 Network> Firewall> Traffic Rules> Open ports on router 以80端口为例: Name: Allow HTTP (这个名字可以随便填) Protocal: TCP External port: 80 然后点击 Save & Apply ,就可以访问了 http://www.anywlan.com/thread-432580-1-1.html

2018-11-02 · 1 min · 26 words · -

Trusting additional CAs in Centos

Trusting additional CAs in Centos place the certificate to be trusted (in PEM format) in /etc/pki/ca-trust/source/anchors/ cp xxx.pem /etc/pki/ca-trust/source/anchors/ update-ca-trust enable sudo update-ca-trust

2018-10-30 · 1 min · 23 words · -

openwrt install

openwrt install build R7800, Build custom Netgear R7800 firmware for a larger flash size/root space http://blog.wiloon.com/?p=12113&embed=true#?secret=Z4x4I19l6b burn netgear 刷机, factory.img, sysupgrade.bin http://blog.wiloon.com/?p=12826&embed=true#?secret=G3qiDnmUJx 改网段 openwrt lan 改网段 http://blog.wiloon.com/?p=12761&embed=true#?secret=XiBcmLWKRM openvpn https://openwrt.org/docs/guide-user/services/vpn/openvpn/basic enable https for wget opkg install librt openssl-util opkg install wget ca-certificates

2018-10-29 · 1 min · 41 words · -

netgear 刷机, factory.img, sysupgrade.bin, openwrt

’netgear 刷机, factory.img, sysupgrade.bin, openwrt' xxx-factory.img 把网线连接路由器的 LAN 口 和 PC 的网口 路由器断电, 用牙签或其他工具, 捅路由器的 reset 口 开启设备电源开关, 观察电源灯 (此时保持按住 reset/ Restore Factory Settings 按钮不要松手), 直到电源灯由橙色闪烁状态变到绿色闪烁状态(wndr4300) (说明设备已经进入到了TFTP修复模式) R7800: 电源灯从橙色闪烁变成白色闪烁。 在 win 下面使用命令, tftp -i 192.168.1.1 put image0.img 在 mac 下面, 同样也是使用 tftp 命令。 自己的 ip 改成192.168.1.10, 网关即路由 ip 192.168.1.1 把下好的 img 固件放到用户文件夹下 打开终端, 输入 (binary的作用是改为二进制模式)>tftp> connect 192.168.1.1>binary>put 文件名.img完了之后路由器会闪灯后自动重启。 linux tftp (to) 192.168.1.1 tftp> binary tftp> verbose tftp> put openwrt0.img tftp> quit 文件传送完毕后,等待 80 秒左右, 设备会自动重启 (请耐心等待, 切勿将路由器手动断电)。至此, TFTP 修复完成。 设备重启后, 可手动断电, 再重启。否则可能没有5G。这不是BUG,其他openwrt也是一样的 如果恢复过程中断或失败, 重复上述步骤再做尝试。 https://www.netgear.com/support/product/WNDR4300.aspx ...

2018-10-28 · 1 min · 87 words · -

kvm

kvm http://blog.51cto.com/changfei/1672147 KVM-Qemu-Libvirt 三者之间的关系 Qemu Qemu是一个模拟器,它向Guest OS模拟CPU和其他硬件, Guest OS认为自己和硬件直接打交道,其实是同Qemu模拟出来的硬件打交道,Qemu将这些指令转译给真正的硬件。 由于所有的指令都要从Qemu里面过一手,因而性能较差。wKiom1WdDYyjiVZiAAECBtAEQ5E590.jpg KVM KVM是linux内核的模块,它需要 CPU 的支持, 采用硬件辅助虚拟化技术Intel-VT,AMD-V,内存的相关如Intel的EPT和AMD的RVI技术,Guest OS的CPU指令不用再经过Qemu转译,直接运行,大大提高了速度,KVM通过 /dev/kvm暴露接口,用户态程序可以通过 ioctl函数来访问这个接口。见如下伪代码: open("/dev/kvm") ioctl(KVM_CREATE_VM) ioctl(KVM_CREATE_VCPU) for (;;) { ioctl(KVM_RUN) switch (exit_reason) { case KVM_EXIT_IO: case KVM_EXIT_HLT: } } KVM 内核模块本身只能提供CPU和内存的虚拟化, 所以它必须结合QEMU才能构成一个完成的虚拟化技术, 这就是下面要说的 qemu-kvm。 qemu-kvm Qemu将KVM整合进来,通过ioctl调用 /dev/kvm接口,将有关CPU指令的部分交由内核模块来做。kvm 负责cpu虚拟化+内存虚拟化, 实现了cpu和内存的虚拟化, 但kvm不能模拟其他设备。qemu模拟IO设备 (网卡,磁盘等) , kvm加上qemu之后就能实现真正意义上服务器虚拟化。因为用到了上面两个东西,所以称之为qemu-kvm。 Qemu 模拟其他的硬件,如Network, Disk,同样会影响这些设备的性能,于是又产生了pass through半虚拟化设备virtio_blk, virtio_net,提高设备性能。 libvirt libvirt 是目前使用最为广泛的对KVM虚拟机进行管理的工具和API。Libvirtd是一个daemon进程,可以被本地的 virsh 调用,也可以被远程的virsh调用,Libvirtd调用qemu-kvm操作虚拟机。 libvirt、virsh、virt-manager https://blog.csdn.net/wanglei_storage/article/details/51107648 libvirt、virsh、virt-manager 介绍 kvm 虚拟化中 libvirt 是目前使用最为广泛的对 kvm 虚拟机进行管理的工具和应用程序接口,而且一些常用的虚拟机管理工具 (virsh、virt-install、virt-manager等) 和云计算框架平台都在底层使用libvirt的应用程序接口。 virsh virsh 是用于管理虚拟化环境中的客户机和 Hypervisor 的命令行工具, 与 virt-manager 等工具类似, 它也是通过 libvirt API 来实现虚拟化的管理。virsh 是完全在命令行文本模式下运行的用户态工具, 它是系统管理员通过脚本程序实现虚拟化自动部署和管理的理想工具之一。 ...

2018-10-27 · 1 min · 152 words · -

google 搜索

google 搜索 转义, 加引号 linux "-xxx" 特定域 site: 在特定域中进行搜索 -site: 排除特定域 文件类型 filetype: PDF

2018-10-26 · 1 min · 14 words · -

按日期删除文件

按日期删除文件 # 列出30天前的日志 find /data/logs -mtime +30 -type f -name "*.*" # 删除30天前的日志 find /data/logs -mtime +30 -type f -name "*.*" -exec rm -f {} \; # 删除3天前的所有以".log"结尾的文件 find /文件路径 -name "*.log" -mtime +2 -exec rm {} \; 说明 文件路径是目标文件所在路径 -name 设定目标文件名,建议采用,否则可能误删其他文件; -ctime 文件最后一次修改时间,后面只能用整数,单位为天,同时, 还有 atime, mtime(修改时间), amin, cmin, mmin 等时间参数可选, 具体请查看帮助 -mtime: File’s data was last modified n_24 hours ago. -mtime +10: 查找10天前的文件,这里用数字代表天数,+30表示查找30天前的文件 时间说明如下图 (随手画的,大概是这个意思) ,所以删除三天前的文件要用+2 -exec 表示需要执行的命令,{} 代表 find 找到的内容, “;” 是固定写法表示结束 -exec 所以例子的"-exec rm {} ;" 就表示对find找到的符合条件的文件执行删除操作 ...

2018-10-26 · 1 min · 82 words · -

ASCII、Unicode,UTF-8编码的区别

ASCII、Unicode,UTF-8编码的区别 Unicode unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。 UCS 通用字符集 (Universal Character Set,UCS) 是由ISO制定的ISO 10646 (或称ISO/IEC 10646) 标准所定义的标准字符集。UCS-2用两个字节编码,UCS-4用4个字节编码。 UNICODE与UCS实际上是两个不同组织的产物,为了编码一体化而进行协商,可以把unicode看做UCS-2的父集,UCS-4的子集,以为UNICODE只支持U+0FFFF-U+10FFFF的编码,而UCS-4支持31个平面。 https://www.jianshu.com/p/1a39be00f5b8 Unicode ASCII UTF-8 GBK关系 首先必须知道一个概念 - 字符集 计算机中的所有字符, 说到底都是用二进制的 0/1 排列组合来表示的, 因此就需要有一个规范来规定每个字符对应 0/1 排列组合, 这样的规范就是字符集. Unicode, ASCII, GB2312, GBK 都是字符集. UTF-8不是! ASCII 最早的计算机在设计时采用 8 个 bit 作为一个字节 - byte, 所以, 一个字节能表示的范围就是 00000000 到 11111111, 也就是 0 到 255, 一共 256 种状态, 每一个状态对应一个符号, 可以表示 256 个符号. 美国有关的标准化组织就出台了 ASCII 编码, 对英语字符, 数字以及部分符号与二进制位之间的关系, 做了统一规定, 一共规定了 128 个字符的编码. 只占用了一个字节的后面 7 位, 最前面一位统一规定为 0, 一直沿用至今. ...

2018-10-24 · 3 min · 439 words · -

go mod

go mod create project mkdir project-0 go mod init project-0 go mod edit [editing flags] [go.mod] commands # upgrade go version to 1.21.4 go mod edit -go 1.21.4 export GO111MODULE=on go mod init project0 # 初始化 go mod tidy # 拉取缺少的模块, 移除不用的模块。 go mod download # 手动下载依赖包, 根据 go.mod 下载 go mod graph # 打印模块依赖图 go mod vendor # 将依赖复制到 vendor 下 go mod verify # 校验依赖 go mod why # 打印为什么需要依赖 go list all # 打印所有的 package go list -m all # 打印所有的 module, The -m flag causes list to list modules instead of packages go list -m -json all # 依赖详情, json 格式 go mod edit -go=1.15 # 添加新模块 go get <package>[@<version>] go.mod 如何编辑 在 Go 1.16 中,另一个行为变更是 go build 和 go test 不会自动编辑 go.mod 了,基于以上信息,Go 1.16 中将进行如下处理: ...

2018-10-20 · 2 min · 343 words · -

linux tar aes 打包加密

linux tar aes 打包加密 tar -cvf - foo | openssl enc -e -aes256 -k password -out foo.tar openssl enc -d -aes256 -in foo.tar -k password | tar xv openssl enc -d -aes256 -in foo.tar -k password | tar xv -C . #原文件 foo #密码 password #目标文件 foo.tar

2018-10-12 · 1 min · 47 words · -