
我有以下設置,所有 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