通过iptables实现nat、负载均衡笔记

时间:2024-04-09 18:54:22

网络拓扑图

通过iptables实现nat、负载均衡笔记

SNAT地址池的实验:

  • Win7-2和Win7-3 ping Win7-1,对应的iptables命令,如下:

iptables -t nat -A POSTROUTING -s 192.168.136.0/24 -d 192.168.0.34 -j SNAT --to-source 8.8.8.8-8.8.8.200

  • 实验结果:
    通过iptables实现nat、负载均衡笔记
  • 通过抓包可以看出SNAT的地址池起作用了,将“源”替换成了8.8.8.165和8.8.8.200;

DNAT实验:

  • Win7-1 ping 路由口ip:192.168.0.6 最终转换为 ping Win7-2,iptables 命令如下:

iptabls -t nat -A PREROUTING -s 192.168.0.34 -d 192.168.0.6 -j DNAT --to-destination 192.168.136.4

  • 实验结果:
    在Win7-1上的数据包:
    通过iptables实现nat、负载均衡笔记
    在Win7-2上的数据包:
    通过iptables实现nat、负载均衡笔记
  • 可以通过抓包看一看出目的IP:192.168.0.6被替换成IP:192.168.136.4;







DNAT端口映射实验1:

  • 实验步骤:使用网络调试助手,在Win7-1*问Centos的192.168.0.6的8080端口,通过DNAT端口映射使其访问到Win7-2的8081端口;

iptables -t nat -A PREROUTING -s 192.168.0.34 -d 192.168.0.6 -p tcp --dport 8080 -j DNAT --to-destination 192.168.136.4:8081

  • 实验结果:
    在Win7-1上的数据包:
    通过iptables实现nat、负载均衡笔记
    在Win7-2的数据包:
    通过iptables实现nat、负载均衡笔记

DNAT端口映射实验2:

  • 实验步骤:使用网络调试助手,在Win7-1*问Centos的192.168.0.6的8080端口,通过DNAT随机映射到Win7-2或者Win7-3;
    iptables命令如下:

iptables -t nat -A PREROUTING -s 192.168.0.34 -d 192.168.0.6 -p tcp --dport 8080 -j DNAT --to-destination 192.168.136.4-192.168.136.5

*实验结果:
在Win7-1的数据包如下:
通过iptables实现nat、负载均衡笔记
在Win-7的数据包如下:
通过iptables实现nat、负载均衡笔记
此处实验结果说明性不够强,不能就说明目的IP被随机分配

注意!

  • 每一次进行实验前要清楚状态链接防止上一次实验对本次的影响,通过conntrack -D清除;



负载均衡实验

  • 实验网络拓扑图如下:
    通过iptables实现nat、负载均衡笔记

  • 目前已知通过iptables实现负载均衡存在三种配置方式

  • ** 注意:**本实验是通过网络调试助手实现,即:在每台windows设备上放置一个网络调试助手,使用网络调试助手访问Centos的8080端口,最后转换为对内网服务器的访问;



1、只需要配置一条策略实现随机分配到内网两台服务器

iptables -t nat -A PREROUTING -s 192.168.0.0/24 -d 192.168.0.6 -p tcp --dport 8080 -m state --state NEW -j DNAT --to-destination 192.168.136.4-192.168.136.5:8081

  • 实验结果:通过建立的连接显示,四条链接其中的三条是客户机与Win7-2建立的,一条是客户机与Win7-3建立的,由于客户机数量有限不能把握其随机分配情况,但是多次的实验表明大部分链接都在一台服务器上,但是当我在Win7-1上采用小兵发包后(不停的变换源IP发送大量的TCP链接请求),此时数据包基数较大,可以明显的看出负载均衡功能;

2、在Centos上配置多条策略,通过轮询算法的方式实现,即:每几个包的第几个到哪一个服务器;

iptables -t nat -A PREROUTING -s 192.168.0.0/24 -d 192.168.0.6 -p tcp --dport 8080 -m state --state NEW -m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination 192.168.136.4:8081

iptables -t nat -A PREROUTING -s 192.168.0.0/24 -d 192.168.0.6 -p tcp --dport 8080 -m state --state NEW -m statistic --mode nth --every 1 --packet 0 -j DNAT --to-destination 192.168.136.5:8081


3、在Centos上配置多条策略,通过随机概率算法的方式实现;

通过iptables实现nat、负载均衡笔记

相关链接:
简书阐述负载均衡:https://www.jianshu.com/p/5d4e3566935a
外文文档:http://wiki.netkit.org/netkit-labs/netkit-labs_application-level/netkit-lab_loadbalancer-ws/netkit-lab_loadbalancer-ws.pdf
IPtables中SNAT、DNAT和MASQUERADE的含义:https://blog.csdn.net/jk110333/article/details/8229828
朱双印:http://www.zsythink.net/archives/1764
轮询算法需要注意的地方:https://blog.csdn.net/qq267197245/article/details/86447467
DNAT官方文档:https://www.frozentux.net/iptables-tutorial/chunkyhtml/x4033.html