사실 같은 문제임이것. 그러나 나는 거기에서도 답을 얻지 못했습니다.
내 시나리오는 두 개의 네트워크 카드가 있고 라우터 역할을 하며 가장, 방화벽 등을 위한 iptables 규칙을 실행하는 Linux 상자입니다. LAN IP만 사용하여 특정 포트를 내부 서버로 전달하고 싶습니다.
라우터 서버는 외부 인터페이스로 ppp0을 사용하고 내부 IP로 192.168.212.50을 사용합니다. 포트 2000을 외부(호스트 이름:2000에 연결됨)에서 내부 192.168.212.51:8088로 전달하고 싶습니다.
sysctl net/ipv4/ip_forward는 가장 무도회가 설정되어 있으므로 1로 설정됩니다.
이제 외부 IP(호스트 이름:2000)에서 포트 포워딩을 시도하면 항상 시간 초과가 발생합니다. 로그에서 패킷이 삭제되는 것을 볼 수 있습니다.
iptables 규칙은 다음과 같습니다.https://pastebin.com/au9QDhQf
- 포트를 LAN으로만 전달하도록 설정한 경우(예: 정의되지 않음
-i $EXT_IF
및 연결됨)http://192.168.212.50:2000/작동할 수 있습니다. - 나도 확인했다이 게시물. 그러나 이미 MASQUERADE를 설정했기 때문에
iptables -t nat -A POSTROUTING -j MASQUERADE
여기서는 두 번째 규칙이 작동하지 않습니다.
어떤 도움이라도 대단히 감사하겠습니다.
답변1
당신은 아마도 항상 네트워크 내부에서 external-ip:2000에 연결할 수 있기를 원할 것이므로 방화벽 규칙에서 `-i $EXT_IF$를 사용하고 싶지 않을 것입니다.
내 생각 엔 포트 번호를 변경하고 있기 때문에미리ROUTING 체인이 포트 2000에 대한 트래픽을 허용하는 것은 중요하지 않습니다. 트래픽이 해당 규칙에 도달할 때쯤에는 수정되어 대상 포트가 8088이 될 수 있습니다.
답변2
마침내 나는 무슨 일이 일어나고 있는지 알았습니다.
포트 전달 및 전달 규칙을 잘못된 위치에 넣었습니다.
iptables -A FORWARD -j block
예앞으로포트 전달 규칙으로 인해 POSTROUTING이 트리거되지만 패킷은 삭제됩니다.