iptables 实现负载均衡

iptables -t nat -A PREROUTING -d 10.192.0.65/32 -p tcp -m tcp –dport 8080 -m statistic –mode nth –every 2 –packet 0 -j DNAT –to-destination 10.1.160.14:8080 iptables -t nat -A POSTROUTING -d 10.1.160.14/32 -p tcp -m tcp –dport 8080 -j SNAT –to-source 10.192.0.65



iptables -t nat -A PREROUTING -d 10.192.0.65/32 -p tcp -m tcp –dport 8080 -m statistic –mode nth –every 1 –packet 0 -j DNAT –to-destination 10.1.160.15:8080 iptables -t nat -A POSTROUTING -d 10.1.160.15/32 -p tcp -m tcp –dport 8080 -j SNAT –to-source 10.192.0.65



即负载均衡地访问10.1.160.14和10.1.160.15



注意:需要在10.192.0.65上打开net.ipv4.ip_forward=1



修改/etc/sysctl.conf文件 ,然后执行sysctl -p命令



原理解释:



第一条使用statistic模块,模块的模式是nth,—every 2是每两个数据包,—packet 0是第一个数据包,



第二条iptables rule匹配时,第一条规则匹配上的数据已经被拿走,剩下的数据包重新计算。



如果有计数器的话:奇数号数据包被第一条规则匹配,偶数号数据包被第二条规则匹配。



对iptables的一些理解



tables:表是对链功能的归纳。



如filter 表是对数据包的过滤,根据方向的不同有INPUT,OUTPUT,FORWARDING三条链



mangle表可以改变我们可以改变不同的包及包 头的内容,比如 TTL,TOS或MARK。数据包必然具有包头,所以它适用于每条链,也就是在没条链那里都可以根据需求实现mangle的功能



nat表是进行NAT转换的,替换source ip地址是snat,替换destination ip是dnat。



可以进行snat转换的是有postrouting链和output链



可以进行dnat转换的是只有prerouting



https://www.cnblogs.com/silenceli/archive/2014/02/26/3569849.html



https://www.pianshen.com/article/6972358522/



http://wiki.netkit.org/netkit-labs/netkit-labs_application-level/netkit-lab_loadbalancer-ws/netkit-lab_loadbalancer-ws.pdf



https://blog.csdn.net/jk110333/article/details/8229828



https://www.frozentux.net/iptables-tutorial/chunkyhtml/x4033.html



https://blog.csdn.net/wdscq1234/article/details/52643637



http://blog.phpdr.net/iptables%E7%AB%AF%E5%8F%A3%E9%9A%8F%E6%9C%BA%E8%BD%AC%E5%8F%91%E5%AE%9E%E7%8E%B0%E7%AE%80%E5%8D%95%E7%9A%84%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1.html



iptables -t nat -A PREROUTING -p tcp –dport 80 -j REDIRECT –to-ports 8001-8002



解释:通过NAT的方式吧从端口80接收到的数据随机转发到8001,8002端口



注意:要使用 iptables-save > /etc/sysconfig/iptables,否则在服务重启后会丢失



使用multiport可以添加多个不连接的端口,最多可以添加15组。如下



-A INPUT -p tcp -m multiport –dport 21:25,135:139 -j DROP



如果不使用multiport参数,只能是添加连续的端口。



如-A INPUT -p tcp –dport 21:25 -j DROP



而不能写成21:25,135:139



http://blog.phpdr.net/iptables%E7%AB%AF%E5%8F%A3%E9%9A%8F%E6%9C%BA%E8%BD%AC%E5%8F%91%E5%AE%9E%E7%8E%B0%E7%AE%80%E5%8D%95%E7%9A%84%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1.html


Category linux