iptables 규칙에 문제가 있습니다.
요구 사항은 포트 9443의 서버 A에서 서버 B의 443으로 들어오는 요청을 처리하는 것입니다.
내 시나리오에서는
- 서버 A 10.10.8.33 - - iptables가 여기에서 구성됩니다.
- 서버 B 10.21.2.31 - - 웹 서버.
나는 이 규칙을 구성했습니다
iptables -t nat -A PREROUTING -p tcp --dport 9443 -j DNAT --to-destination10.21.2.31:443
iptables -t nat -A POSTROUTING -p tcp -d 10.21.2.31 --dport 9443 -j SNAT --to-source 10.10.8.33:9443
어느 것이 작동하지 않습니까?
탐색하려고 하는데https://10.10.8.33:9443내 로컬 Windows 10 시스템 C.. IP 10.21.2.93에서.
내 요청을 자세히 설명하자면... 9443의 서버 A로 들어오는 요청은 NAT를 통해 서버 B의 443으로 이동해야 하며 C는 페이지를 얻을 수 있습니다.
도움을 요청.
답변1
DNAT만 수행해야 하는 경우 POSTROUTING에 배치된 규칙은 필요하지 않으며(제거할 수 있음), 전체 NAT의 경우 SNAT 규칙이 필요합니다. DNAT 규칙의 경우 --dport 매개변수에 외부 서버 A에서 호출되는 포트(9443)를 넣어야 하기 때문에 이는 잘못된 것입니다. 따라서 올바른 규칙은 다음과 같습니다.
iptables -t nat -A PREROUTING -d 10.10.8.33/32 -p tcp -m tcp --dport 9443 -j DNAT --to-destination 10.21.2.31:443
편집하다:
@Sandy 귀하의 질문이 명확하지 않습니다. 따라서 귀하가 달성하려는 작업을 올바르게 이해하기를 바랍니다.
원하는 것과 문제가 무엇인지 검토해 보세요.
- 포트 TCP 9443(9443에서 443까지의 DNAT 규칙)에서 PC C를 호출하여 서버 A를 통해 서버 B에 도달합니다.
- 서버 B와 PC C는 동일한 서브넷에 있습니다.
- 서버 B와 PC C는 동일한 서브넷에 있으므로 서버 B가 PC C에 직접 응답하므로 DNAT 자체는 작동하지 않습니다. 이것이 바로 SNAT 규칙이 필요한 이유입니다.
따라서 앞서 제안한 DNAT는 정확해야 하지만 서버 A의 IP를 사용하여 PC C의 요청을 스푸핑(SNAT 사용)해야 합니다. PC C의 스푸핑 요청에 대한 SNAT 규칙은 다음과 같아야 합니다.
iptables -t nat -A POSTROUTING -s 10.21.2.93/32 -d 10.21.2.31/32 -p tcp -m tcp --dport 443 -j SNAT --to-source 10.10.8.33
네트워크 토폴로지가 그림에 나와 있습니까? 이것이 토폴로지(또는 매우 유사한)인 경우 Apache, nginx 또는 HAProxy를 역방향 프록시로 구현하는 대신 iptables를 사용하는 특별한 이유가 있습니까?