Имеется программный роутер на Arch Linux. Требуется пробросить один порт с компьютера из локальной сети во внешний мир.
ppp0 - Внешний интерфейс
wlan1 - Интерфейс локальной сети.
192.168.225.2 - Адрес локального сервера.
1.2.3.4 - Внешний IP адрес роутера (для примера привожу несуществующий).
1234 - Порт, который надо пробросить (и TCP, и UDP)
Настраиваю проброс такими командами:
iptables -A INPUT -p udp --dport 1234 -j ACCEPT
iptables -A INPUT -p tcp --dport 1234 -j ACCEPT
iptables -A FORWARD -i ppp0 -d 192.168.225.2 -p udp --dport 1234 -j ACCEPT
iptables -t nat -A PREROUTING -d 1.2.3.4 -p udp --dport 1234 -j DNAT --to-destination 192.168.225.2:1234
iptables -A FORWARD -i ppp0 -d 192.168.225.2 -p tcp --dport 1234 -j ACCEPT
iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 1234 -j DNAT --to-destination 192.168.225.2:1234
Однако сервер из-вне не доступен. При этом запущенный на самом «роутере» веб-сервер и SSH вполне себе откликается.