如果我build立了一个Linux iptables MASQUERADE规则,使stream量离开特定的接口,但该接口有多个IP地址,源IP如何被select?
作为一个例子,我们假设我添加了一个规则:
$ iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
…和界面看起来像:
$ ip addr show dev eno1 1: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 94:18:82:35:a2:c1 brd ff:ff:ff:ff:ff:ff inet 10.136.122.97/24 scope global eno1 valid_lft forever preferred_lft forever inet 10.136.122.98/24 scope global eno1 valid_lft forever preferred_lft forever
IP根本不会被选中。 数据包将从八位字节的第一个IP出来。 如果你想控制这个,你可以使用iptables SNAT来处理它。
例如,如果你想用一个IP发送邮件并浏览网页,而另一个则使用另一个IP,做:
iptables -t nat -A POSTROUTING -o eno1 -m tcp --dport 80 -j SNAT --to 10.136.122.98 iptables -t nat -A POSTROUTING -o eno1 -m tcp --dport 443 -j SNAT --to 10.136.122.98 iptables -t nat -A POSTROUTING -o eno1 -m tcp --dport 587 -j SNAT --to 10.136.122.98 iptables -t nat -A POSTROUTING -o eno1 -m tcp --dport 465 -j SNAT --to 10.136.122.98 iptables -t nat -A POSTROUTING -o eno1 -m tcp --dport 25 -j SNAT --to 10.136.122.98
其余的将通过MASQUERADE目标从10.136.122.97出来。
无论如何,我的解释是相当重复的: IPTables和SNAT只有两个端口