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以其他形式分布。
没有评论:
发表评论