
すべて 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 のような範囲を使用したいと思います。