如果我为从特定接口发出的流量设置了 Linux iptablesMASQUERADE
规则,但该接口有多个 IP 地址,那么如何选择源 IP?
举例来说,假设我添加一条规则,如下:
$ 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
答案1
答案2
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