实现思路:
在nat 表之中增加一条规则,如果符合地址范围,那么跳转进入自定义链。自定义链 则利用 statics 模块进行 负载均衡数据转发,转发到具体的某个链。具体的某个链 存储执行地址转换的规则。
步骤:
1:使用docker 创建两个容器 容器的作用是,访问指定端口,返回容器的主机地址。使用容器来模拟主机。
docker run -d -p 8000:8000 --name first -t jwilder/whoami
docker run -d -p 8001:8000 --name second -t jwilder/whoami
2:获得两个容器内 网络命名空间的ip地址
firstIP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' first)
secondIp=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' second)
3:创建一条新的链,并添加转发规则
iptables -t nat -N TRANS_FRONT
iptables -t nat -I PREROUTING --protocol tcp --dport 8899 -j TRANS_FRONT
4:创建两条自定义的新链
iptables -t nat -N TRANS_FIRST
iptables -t nat -N TRANS_SECOND
5:在TRANS_FRONT链之中,增加规则,使用 statics 模块指定平均跳转的概率
iptables -t nat -A TRANS_FRONT -m statistic --mode random --probability 0.50000000000 -j TRANS_FIRST
iptables -t nat -A TRANS_FRONT -m statistic --mode random --probability 1 -j TRANS_SECOND
6:为 TRANS_FIRST TRANS_SECOND 链 增加DNAT 的转换规则
iptables -t nat -A TRANS_FIRST --protocol tcp -dport 8899 -j DNAT --to-destination $firstIP:8000
iptables -t nat -A TRANS_SECOND --protocol tcp -dport 8899 -j DNAT --to-destination $secondIp:8001
7: 多次访问 访问 本机IP地址:8899 , 查看返回结果值 来验证负载均衡
curl 本机ip地址:8899
curl 本机ip地址:8899