![변경된 대상 포트로 SNAT를 수행하는 방법은 무엇입니까?](https://rvso.com/image/1595522/%EB%B3%80%EA%B2%BD%EB%90%9C%20%EB%8C%80%EC%83%81%20%ED%8F%AC%ED%8A%B8%EB%A1%9C%20SNAT%EB%A5%BC%20%EC%88%98%ED%96%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
소스 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에서는 이것이 상대적으로 사소한 일이라고 생각합니다. 그러나 그 주름으로 인해 루프가 발생합니다.
어떻게 이를 달성할 수 있나요?