
Ich habe das folgende Setup, alle UDP-Pakete:
Client (42.123.124.125) -> (42.123.0.125) NAT-Server (192.168.2.2) -> (192.168.2.5) UDP-Dienst
Der Nat_Server muss eingehende UDP-Daten vom Client über eine öffentliche IP-Adresse empfangen und das Paket über ein privates Netzwerk an den UDP_Service umleiten. Anschließend muss er alle Antworten vom UDP_Service zurück an den Client umleiten.
Der Client verhandelt eine Verbindung zu einem bestimmten Port (4244) und empfängt dann Daten auf seinem zufälligen UDP-Port.
Der Ablauf kann mit tcpdump beschrieben werden. Verhandlung:
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
Datenfluss:
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
Die Ports 38541 und 43434 bleiben während der gesamten Verbindung gleich. Ich habe es mit dieser iptables-Konfiguration geschafft:
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
Wie kann ich das gleiche Verhalten erreichen, wenn viele Clients vorhanden sind? Statt 42.123.124.125 würde ich also gerne einen Bereich verwenden, z. B. 42.123.124.0/24