Я использую компьютер Ubuntu в качестве маршрутизатора.
Он имеет локальную сеть, подключенную к eth0
, а также подключен к Интернету через другой интерфейс и внутри OpenVPN.
Я настроил переадресацию портов NAT, поэтому я могу подключиться к нескольким устройствам в подключенная подсеть.
sudo iptables -A FORWARD -o eth0 -i tun0 -j ACCEPT
sudo iptables -A FORWARD -o eth0 -i tun0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
sudo iptables -t nat -A PREROUTING -p udp -i tun0 --dport 14550 -j DNAT --to-destination 192.168.1.50:60000
sudo iptables -t nat -A PREROUTING -p tcp -i tun0 --dport 5000 -j DNAT --to-destination 192.168.1.2:5000
Из подсети я могу выйти в Интернет нормально, а с любого другого компьютера я могу подключиться к TCP-серверу, который перенаправляется на порт 5000.
Интерфейс eth0 маршрутизатора Ubuntu имеет IP 192.168.1.1 и UDP-сервер IP 192.168.1.50.
Я не могу понять, как заставить работать UDP-пересылку.
tcpdump
показывает мне, что UDP-сервер внутри подсети активен, и он может взаимодействовать с компьютером ubuntu, который действует как маршрутизатор.
Когда я пытаюсь связаться с ним извне, я получаю ничего.
Спасибо
Из предоставленной вами информации не совсем ясно, разрешает ли ваша политика FORWARD пересылку или нет. Если нет - у вас нет правил для перенаправления трафика DNATted от tun0 на eth0.
Кажется, есть дополнительный "." в конце вашего правила DNAT для UDP в части IP-адреса. Я считаю, что вы могли получить ошибку при попытке добавить правило и, возможно, не заметили этого. Возможно, вам стоит предоставить дамп iptables таблицы nat .
Извините, мы разобрались. У подключенного UDP-сервера возникла проблема при разговоре с разными подсетями. Он просто не будет отправлять никакого ответа, если подсеть не соответствует напрямую подключенной. В противном случае конфигурация работала.