web-dev-qa-db-ja.com

複数ある場合、MASQUERADEはどのようにIPアドレスを選択しますか?

特定のインターフェイスから送信されるトラフィックに対して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
3
obeattie

マスカレードは、ルーティングで送信元アドレスが選択されるのと同じ方法でアドレスを選択します。

したがって、ip route get <dst>コマンドを使用して、マスカレード後に送信元アドレスとして使用されるアドレスを決定します。

詳細に興味がある場合は、 ソースコード を調べてください。

1
Anton Danilov

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つのポートのみ

1
Marco