iptables SNAT ターゲットの送信元ポートはどのように選択されますか?

iptables SNAT ターゲットの送信元ポートはどのように選択されますか?

デフォルトでは、SNAT ターゲットは元のパケットの送信元ポートを保持します。そのポートがすでに使用されている場合は、ランダムに 1 つを選択します。このポートの選択に影響を与えたり、選択される範囲を測定したりする方法はありますか? 私のテストでは、net.ipv4.ip_local_port_rangeこれに影響を与えていないようです。別の設定があるかどうか疑問に思っています。

答え1

デフォルトでは、SNAT ターゲットは元のパケットの送信元ポートを保持します。そのポートがすでに使用されている場合は、ランダムに 1 つを選択します。

デフォルトではランダムに選択されるわけではなく、代わりに次のアルゴリズムがデフォルトになります
(太字部分は元のポートを保持するというあなたの主張を裏付けています)

ポート範囲が指定されていない場合、512 未満の送信元ポートは 512 未満の他のポートにマッピングされます。512 から 1023 までのポートは 1024 未満のポートにマッピングされ、その他のポートは 1024 以上にマッピングされます。可能な場合は、ポートの変更は行われません。

iptables の拡張機能

このポートの選択に影響を与えたり、選択される範囲を測定したりする方法はありますか?

masqueradeはい、ルール内でまたはsnatステートメントのいずれかを使用してNAT、次のようにポート範囲を指定することにより可能です。--to-ports port[-port]

--to-ports ポート[-port]

          This specifies a range of source ports to use, overriding
          the default SNAT source port selection heuristics (see
          above). This is only valid if the rule also specifies one
          of the following protocols: tcp, udp, dccp or sctp.

iptables の拡張機能

私のテストでは、net.ipv4.ip_local_port_range はこれに影響を与えていないようでした。

は、リッスンするために使用可能でなければならないリスナー ポートに適用net.ipv4.ip_local_port_rangeされますが、 とは関係ありません。つまり、これらのポートは実際にSNATは によって使用されることはありません。NAT

https://www.ibm.com/docs/en/filenet-p8-platform/5.5.x?topic=listener-linux

関連情報