特定のインターフェイスから送信されるトラフィックに対してLinux iptables MASQUERADE
ルールを設定したが、そのインターフェイスに複数の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
マスカレードは、ルーティングで送信元アドレスが選択されるのと同じ方法でアドレスを選択します。
したがって、ip route get <dst>
コマンドを使用して、マスカレード後に送信元アドレスとして使用されるアドレスを決定します。
詳細に興味がある場合は、 ソースコード を調べてください。
IPはまったく選択されません。パケットはオクテットの最初のIPから送信されます。これを制御したい場合は、 iptables SNAT で処理できます。
たとえば、メールを送信し、1つのIPと他のIPを使用してWebサーフィンを行う場合は、次のようにします。
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
残りはすべて10.136.122.97からMASQUERADEターゲットを介して出力されます。
とにかく私の説明はかなり重複しています: IPTablesとSNATは2つのポートのみ