iptables SNAT宛先の送信元ポートを選択するには?

iptables SNAT宛先の送信元ポートを選択するには?

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

答え1

デフォルトでは、SNAT 宛先は元のパケットの送信元ポートを保持します。ポートがすでに使用中の場合は、ランダムに選択されます。

デフォルトではランダムに選択されませんが、以下は基本的なアルゴリズムです
(太字の部分は元のポートを保持しているという説明を確認します)

ポート範囲が指定されていない場合、512未満のソースポートは512未満の他のポートにマッピングされます。 512 から 1023 (含む) のソースポートは 1024 未満のポートにマッピングされ、他のポートは 1024 以上にマッピングされます。可能であれば、ポートの変更は発生しません。

https://man7.org/linux/man-pages/man8/iptables-extensions.8.html

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

はい、次のようにルール内masqueradeまたはsnatステートメントを使用してポート範囲を指定できます。NAT--to-ports port[-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.

https://man7.org/linux/man-pages/man8/iptables-extensions.8.html

私のテストでは、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

関連情報