Исходные данные: есть роутер с двумя физическими интерфейсами - eth0 (внешний) и eth1 (внутренний). На внутреннем интерфейсе прибит ip-адрес 192.168.0.1/24. Для того, чтобы включить NAT (network address translation) в его упрощенном варианте, который называется маскардинг (встречается таже термин "маскарад") нужно сделать следующее:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE
iptables -I FORWARD -d 192.168.0.0/24 -j ACCEPT
iptables -I FORWARD -s 192.168.0.0/24 -j ACCEPT
Чтобы действие из п.1 не приходилось выполнять каждый раз после перезагрузки роутера, нужно поправить соответствующую опцию в /etc/sysctl.conf
Если требуется построить NAT в другую сторону, известный также как DNAT, то это можно сделать примерно так:
iptables -t nat -A PREROUTING -p tcp -d 195.5.5.1 –dport 8182 -j DNAT –-to-destination 10.10.10.18:80
Здесь 195.5.5.1 – внешний ip-адрес сервера, попытки установить соединение на 195.5.5.1 tcp-порт 8182 будут перенапрявляться на машину во внутренней сети с ip-адресом 10.10.10.18 на порт 80. При этом 10.10.10.18 должен быть directly-connected для сервера (то есть доступным для нашего сервера с DNAT-ом без использования промежуточных маршрутизаторов). А вот если это условие не выполняется, проброс портов можно сделать с помощью xinetd.
Если какая-то машинка за NAT-ом испытывает трудности с подключением к внешнему VPN-серверу и винда показывает ошибку №619, то стоит попробовать включить модуль ядра ip_nat_pptp на linux-роутере, который исполняет NAT: