변경된 대상 포트로 SNAT를 수행하는 방법은 무엇입니까?

변경된 대상 포트로 SNAT를 수행하는 방법은 무엇입니까?

소스 NAT(SNAT) 역할을 하는 Linux 호스트가 있습니다. IP 192.168.2.1을 사용하는 내부 인터페이스의 내부 네트워크에서 기본 경로에 대한 모든 패킷을 수신합니다. SNAT 호스트에는 여러 아웃바운드 IP 주소(예: 3.3.3.3, 3.3.3.4, 3.3.3.5, ...)가 있습니다.

패킷이 내부 개인 IP에 도착하는 포트가 IP를 결정하도록 iptables(또는 Linux의 다른 도구 - iptables일 필요는 없지만 이것이 올바른 도구라고 생각함)를 구성하고 싶습니다. 요청이 전송되고 아웃바운드 포트가 일정합니다(예: 포트 80).

예를 들어, 아래 매핑은 원형일 수 있습니다(이 모든 것은 192.168.2.1에서 수신되지만 매핑에 처음 나열된 IP의 대상 IP를 사용합니다... ->는 SNAT 장치를 나타냄).

  • (src) 192.168.xy:z (대상) 10.10.10.10:8001 -> (src) 3.3.3.3:r (대상) 10.10.10.10:80
  • (src) 192.168.xy:z (대상) 11.11.11.11:8002 -> (src) 3.3.3.4:r (대상) 11.11.11.11:80
  • (src) 192.168.xy:z (대상) 12.12.12.12:8003 -> (src) 3.3.3.5:r (대상) 12.12.12.12:80
  • (src) 192.168.xy:z (대상) 13.13.13.13:8004 -> (src) 4.4.4.3:r (대상) 13.13.13.13:80

(192.168.xy는 개인 네트워크의 모든 호스트가 될 수 있습니다. 포트 z와 r은 거의 확실히 임시 포트이며 각 세션마다 분명히 다르지만 SNAT는 올바른 요청자에게 응답을 다시 받으려면 분명히 해당 상태를 관리해야 합니다.)

구체적인 예는 다음과 같습니다.

패킷은 개인 네트워크의 인터페이스(예: 192.168.2.5)에서 시작될 수 있습니다. 따라서 소스 IP는 "192.168.2.5"가 됩니다. 대상 IP는 "10.10.10.10"이고 대상 포트는 "8001"일 수 있습니다. 라우팅 테이블은 로컬 IP 라우터에 "0.0.0.0/0"으로 향하는 모든 패킷을 192.168.2.1로 보내도록 지시하며 더 이상 구체적인 경로 테이블 항목이 없습니다. 따라서 패킷은 대상 IP가 10.10.10.10이고 대상 포트가 8001인 192.168.2.1(SNAT)에 도착합니다. 그런 일이 발생하면 NAT가 대상이 10.10인 3.3.3.3:r에서 패킷을 보내길 원합니다. .10.10:80(3.3.3.3은 분명히 매핑에서 정의되어야 하며 원래 대상 포트 8001을 기반으로 해야 합니다).

대상 포트를 변경해야 한다는 요구 사항이 없다면 iptables에서는 이것이 상대적으로 사소한 일이라고 생각합니다. 그러나 그 주름으로 인해 루프가 발생합니다.

어떻게 이를 달성할 수 있나요?

관련 정보