我有以下设置,所有 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.0/24),而不是 42.123.124.125