
나는 다음과 같은 설정을 가지고 있습니다. 모든 UDP 패킷은 다음과 같습니다.
클라이언트 (42.123.124.125) -> (42.123.0.125) nat_server (192.168.2.2) -> (192.168.2.5) udp_service
nat_server는 공용 IP를 통해 클라이언트로부터 들어오는 UDP를 수신하고 개인 네트워크를 통해 패킷을 udp_service로 리디렉션해야 합니다. 그런 다음 udp_service의 모든 응답을 다시 클라이언트로 리디렉션해야 합니다.
클라이언트는 특정 포트(4244)에 대한 연결을 협상한 다음 임의의 UDP 포트에서 데이터를 수신합니다.
흐름은 tcpdump로 설명할 수 있습니다. 협상:
15:03:48.630928 IP 42.123.124.125.38541 > nat_server.4244: UDP, length 4
15:03:48.630953 IP nat_server.38541 > 192.168.2.5.4244: UDP, length 4
15:03:48.680698 IP 192.168.2.5.43434 > nat_server.38541: UDP, length 4
15:03:48.680707 IP nat_server > 42.123.124.125.38541: UDP, length 4
데이터 흐름:
15:03:48.680741 IP 192.168.2.5.43434 > nat_server.38541: UDP, length 16
15:03:48.680743 IP nat_server.43434 > 42.123.124.125.38541: UDP, length 16
포트 38541 및 43434는 전체 연결 동안 동일하게 유지됩니다. 나는 이 iptables 구성을 사용하여 이를 수행했습니다.
iptables -t nat -A PREROUTING -s 42.123.124.125 -p udp -j DNAT --to-destination 192.168.2.5:4244
iptables -t nat -A PREROUTING -s 192.168.2.5 -p udp -j DNAT --to-destination 42.123.124.125
iptables -t nat -A POSTROUTING -j MASQUERADE
클라이언트가 많을 때 어떻게 동일한 동작을 수행할 수 있습니까? 따라서 42.123.124.125 대신 42.123.124.0/24와 같은 범위를 사용하고 싶습니다.