obe*_*tie 8 networking linux iptables
MASQUERADE
如果我为从特定接口发出的流量设置 Linux iptables规则,但该接口有多个 IP 地址,那么如何选择源 IP?
作为示例,假设我添加一条规则,例如:
\n\n$ iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE\n
Run Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6 并且该界面如下所示:
\n\n$ ip addr show dev eno1\n1: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000\n link/ether 94:18:82:35:a2:c1 brd ff:ff:ff:ff:ff:ff\n inet 10.136.122.97/24 scope global eno1\n valid_lft forever preferred_lft forever\n inet 10.136.122.98/24 scope global eno1\n valid_lft forever preferred_lft forever\n
Run Code Online (Sandbox Code Playgroud)\n
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
Run Code Online (Sandbox Code Playgroud)
其余所有内容将通过 MASQUERADE 目标从 10.136.122.97 发出。
无论如何,我的解释相当重复: IPTables 和 SNAT 仅适用于两个端口