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

관련 정보