포트 변경이 있는 DNAT가 작동하지 않습니다.

포트 변경이 있는 DNAT가 작동하지 않습니다.

이 명령을 사용하여 VM 컨테이너에 NAT를 설정하고 있습니다.

iptables -t nat -A PREROUTING -d ${MAIN_IP} -p tcp --dport ${2} -j DNAT --to-destination ${SUBNET}${3}

~와 함께

  • MAIN_IP는 주 서버의 글로벌 IP입니다.
  • SUBNET은 내 VM 서브넷의 처음 세 숫자입니다(예: "192.168.1").
  • $2는 내가 전달하려는 포트입니다.
  • $3는 마지막 서브넷 세그먼트입니다(예: 20).

이는 직접 NAT에 적합합니다.

하지만 오늘은 DNAT를 SSH 포트로 선언하고 싶었기 때문에 $2를 5022로 설정하고 $3를 20:22로 설정하여 명확성을 위해 다음 줄을 작성했습니다.

iptables -t nat -A PREROUTING -d ${MAIN_IP} -p tcp --dport 5022 -j DNAT --to-destination 192.168.1.20:22

그러나 이것은 작동하지 않습니다. VM에 SSH를 연결하려고 하면 연결 시간이 초과됩니다. nat를 사용하지 않을 때는 시간 초과가 발생하지 않으므로 정상적으로 작동합니다. NAT를 통해서만 작동하지 않습니다.ssh [email protected]

UFW는 컨테이너 서버에서 활성화되지 않습니다. 거의 아무것도 듣지 않으므로 아무것도 닫을 필요가 없습니다. 또는 그렇게 되기를 바랍니다.

나는 DNAT 규칙이 정확하다고 가정하고 있는데 무엇이 나를 막고 있는지 어떻게 알 수 있습니까?

편집: nat 테이블의 출력:

#iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             my-server         tcp dpt:2113 to:192.168.1.35
DNAT       tcp  --  anywhere             my-server         tcp dpt:2115 to:192.168.1.35

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  anywhere             anywhere

편집 2: VM sshd가 여러 포트를 수신하도록 하는 문제를 일시적으로 해결하고 있습니다. 이렇게 하면 NAT가 제대로 작동합니다.

관련 정보