
У меня следующая настройка, все пакеты udp:
клиент (42.123.124.125) -> (42.123.0.125) nat_server (192.168.2.2) -> (192.168.2.5) udp_service
nat_server должен получить входящий udp от клиента через публичный ip и перенаправить пакет в 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