如何为Squid所用Docker网络通过iptables配置多IP段出站?
为Squid Docker网络配置出站IP段的解决方案
你之前重复添加单IP的SNAT规则无法生效,是因为iptables的规则匹配按顺序执行,流量只会触发第一条符合条件的规则,后续规则不会被执行。针对IP段配置,分两种场景处理:
场景1:出站IP为连续段
如果你的出站IP是连续范围(比如1xx.xxx.xxx.100到1xx.xxx.xxx.200),直接用一条规则即可实现IP轮询分配:
iptables -t nat -A POSTROUTING -s 172.18.0.0/16 ! -o bridge-coi -j SNAT --to-source 1xx.xxx.xxx.100-1xx.xxx.xxx.200
这条规则会自动在指定IP范围内,为每个出站连接分配不同的源IP。
场景2:出站IP为非连续零散IP
如果需要使用多个零散IP,给每条SNAT规则加上--random参数,让iptables随机选择源IP,避免仅触发第一条规则:
iptables -t nat -A POSTROUTING -s 172.18.0.0/16 ! -o bridge-coi -j SNAT --to-source 1xx.xxx.xxx.xx4 --random iptables -t nat -A POSTROUTING -s 172.18.0.0/16 ! -o bridge-coi -j SNAT --to-source 1xx.xxx.xxx.xx5 --random # 按需添加更多IP的规则
加上--random后,iptables会在所有符合条件的规则中随机挑选一条应用,实现多IP出站的负载均衡。
规则持久化
配置完成后,记得保存iptables规则,避免系统重启后丢失:
# Debian/Ubuntu系统 iptables-save > /etc/iptables/rules.v4 # CentOS/RHEL系统 service iptables save
内容的提问来源于stack exchange,提问作者Anastasiya Mykolenko
相关产品推荐
相关产品推荐

