2015年9月11日星期五

OpenWrt Chaos Calmer 15.05正式发布

试用后发现版本号r46767,从此版本开始,opkg将进行sig验证,内核版本3.18.20,新增对464XLAT技术的支持,可实现网络地址映射转换,原生支持IPv6,无需手动安装luci-proto-ipv6插件。

2015年7月3日星期五

VMware ESXi如何更换证书

/etc/vmware/ssl/rui.crt
/etc/vmware/ssl/rui.key
上述文件可以更换,但必须保证公钥和私钥配对。

2015年6月26日星期五

通过hotplug.d/iface脚本实现DNS隐蔽信道的自动连接

hotplug.d/iface是在接口接驳状态发生变化时所执行的脚本,所执行的内容应该在执行有限次之后不再触发接口接驳状态的变化,绝不可以执行无限次之后仍然可触发接口接驳状态的变化,所以使用hotplug.d/iface实现DNS隐蔽信道的自动连接必须使用判断结构,避免DNS隐蔽信道连接建立之后由于触发了接口接驳状态的变化导致脚本重复执行,判断条件为DNS隐蔽信道是否已连接。
判断条件为$(ifconfig dns0 |grep "not"),条件为真表示未连接成功,条件为假表示已连接成功。由于DNS隐蔽信道程序带有自动检测网络通断的特性,长时间无法保持连接时会放弃连接断开dns0虚拟网卡,所以无需通过ping隐蔽信道服务器端的方式侦测连接状态。
参考脚本:
while [ "1" ]; do
dns=$(ifconfig dns0 |grep "not")
if [ "$dns" ]; then
sleep 60
else
iodine iodine.ipv6nxtgnwrt.homenet.org
fi
done
经测试DNS隐蔽信道使用上述参考脚本自动连接后最长1小时以上保持稳定状态,已基本可满足Internet隐蔽接入的稳定性需求。

2015年6月12日星期五

iptables高级应用——防止异常的RST打断VPN连接

由于异常的RST进入了VPN服务器和VPN客户端,VPN连接可能因此中断。该异常的RST经常在受到网络审查的地区出现,通常紧跟在SYN之后极短的时间之内出现,如果无SYN发出则不会出现,说明该RST来自BRAS或者骨干网,并不是服务器所发送的。网络审查系统通常设计得很差,由于担心消耗过多的计算资源,无法实现RST紧跟着ACK之前到来,所以一般人很容易分析出该RST必然是假的。不过由于收到了ACK,我们知道VPN连接是有可能建立起来的,只是由于RST的干扰导致的中断。前面提到的Internet协议(TCP/IP)增强技术在Windows下难以实现,我们一般选择使用OpenWrt路由器实现。在防火墙自定义规则中,我们添加了如下规则:
iptables -t mangle -A PREROUTING -p tcp --tcp-flags RST RST -j DROP
经过测试,我们发现VPN客户端收不到RST数据包了,但是VPN仍然断了。仔细排查之后发现服务器竟然收到了RST,看来网络审查系统是双向发伪RST包的,后来我们又在服务器端也配置了同样的规则。双方都受到保护之后VPN连接很容易就建立了起来,在此过程中防火墙一直在报警说收到了RST包,数量非常多,比正常数据包都要多几倍,可见网络审查系统非常愚钝,发了这么多没用的RST数据包还在发,徒然浪费资源还不如去审查别人去。

2015年6月5日星期五

拥有多个OpenWrt路由器的局域网如何配置DHCP

OpenWrt路由器上的DHCP服务器有2个选项,DynamicDHCP选项控制该路由器上的DHCP服务器是否向未知的客户端分配地址,Force选项控制该路由器上的DHCP服务器优先级。在一个局域网中,一般只允许一台DHCP服务器,但是多个DHCP服务器是可以和谐共存的。如果让多个DHCP服务器和谐共存,开启DynamicDHCP选项的路由器不能多于一台,开启之后未知的客户端可获取到它分配的动态地址,如果有开启DynamicDHCP,其他路由器必须都开启Force并关闭DynamicDHCP,它们只能向已知的客户端分配静态地址,开启DynamicDHCP的服务器必须关闭Force降低优先级。一般局域网同时对静态和动态地址都有需求,多DHCP服务器可满足这种需求,使用静态地址的客户端可以选择不同的路由。

2015年5月29日星期五

iptables高级应用——动态TTL

114DNS称其由于使用了“BGP线路”,ICMP echo-reply中的TTL值会不断发生变化。在普通的线路上,如果实现了动态TTL,如果观察者不清楚具体的细节,很容易就会认为使用了“BGP线路”。观察者一般只能观察到来自配置了动态TTL的路由器发出的ICMP echo-reply,所以只需在OUTPUT链上配置随机匹配的TTL变化目标。在OpenWrt上面,我们尝试了如下的配置:
iptables -t mangle -A POSTROUTING -p icmp --icmp-type echo-reply -m iprange ! --dst-range 192.168.0.0-192.168.255.255 -j TTL --ttl-inc 64
iptables -t mangle -A POSTROUTING -p icmp --icmp-type echo-reply -m iprange ! --dst-range 192.168.0.0-192.168.255.255 -m statistic --mode random --probability 0.5 -j TTL --ttl-inc 1
iptables -t mangle -A POSTROUTING -p icmp --icmp-type echo-reply -m iprange ! --dst-range 192.168.0.0-192.168.255.255 -m statistic --mode random --probability 0.5 -j TTL --ttl-dec 1
iptables -t mangle -A POSTROUTING -p icmp --icmp-type echo-reply -m iprange ! --dst-range 192.168.0.0-192.168.255.255 -m statistic --mode random --probability 0.5 -j TTL --ttl-inc 3
iptables -t mangle -A POSTROUTING -p icmp --icmp-type echo-reply -m iprange ! --dst-range 192.168.0.0-192.168.255.255 -m statistic --mode random --probability 0.5 -j TTL --ttl-dec 3
iptables -t mangle -A POSTROUTING -p icmp --icmp-type echo-reply -m iprange ! --dst-range 192.168.0.0-192.168.255.255 -m statistic --mode random --probability 0.5 -j TTL --ttl-inc 9
iptables -t mangle -A POSTROUTING -p icmp --icmp-type echo-reply -m iprange ! --dst-range 192.168.0.0-192.168.255.255 -m statistic --mode random --probability 0.5 -j TTL --ttl-dec 9
iptables -t mangle -A POSTROUTING -p icmp --icmp-type echo-reply -m iprange ! --dst-range 192.168.0.0-192.168.255.255 -m statistic --mode random --probability 0.5 -j TTL --ttl-inc 27
iptables -t mangle -A POSTROUTING -p icmp --icmp-type echo-reply -m iprange ! --dst-range 192.168.0.0-192.168.255.255 -m statistic --mode random --probability 0.5 -j TTL --ttl-dec 27
为什么如此配置,这需要仔细探讨。OpenWrt的使用环境通常包括外部计算机、内部计算机和路由器3种计算机,如果配置规则不精确,将破坏不需要受到影响的3方中的某2方之间的数据包。我们需要实现的是路由器应答外部计算机时发出的echo-reply中的TTL随机化,所以路由器应答内部计算机就不需要更改TTL,也就是排除内部计算机为目的地址的匹配。外部计算机ping不到内部计算机,内部计算机也不能应答外部计算机。最后外部计算机应答内部计算机这种情况由于dst-range中被排除所以也不受影响。其实还有一种情况就是通过管理界面登录路由器并在上面运行网络诊断的ping时路由器收到的应答也不需要修改TTL,如果不仔细斟酌可能会发现规则匹配,因为dst-range排除的范围不包括路由器的WAN接口地址,不过由于使用了POSTROUTING链,规则匹配也就排除了。
有一个非常经典的问题,在天平左右两个托盘均可放置砝码的情况下,如何设计砝码的重量,使砝码数量最少的情况下能够称出所有整数重量的物体,答案是1,3,9,27,81……所以这里的规则也使用这个数列里面的数字了,但是考虑到TTL=64初始值可能不够用,所以一开始还需要将TTL升高64确保够用。
应用上述规则之后我们进行了ping测试,并将大量测试结果中的TTL数据提取出来,升序排列之后直接转换为散点图。经过观察我们发现该散点图中的点大致在一条直线上,说明TTL随机化之后的数值均匀分布,达到了我们需要的动态TTL效果。当然,也可以调整规则使TTL以其他形式分布。