Skip to content


NAT в linux

Исходные данные: есть роутер с двумя физическими интерфейсами - eth0 (внешний) и eth1 (внутренний). На внутреннем интерфейсе прибит ip-адрес 192.168.0.1/24. Для того, чтобы включить NAT (network address translation) в его упрощенном варианте, который называется маскардинг (встречается таже термин "маскарад") нужно сделать следующее:

  1. echo 1 > /proc/sys/net/ipv4/ip_forward
  2. iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE
  3. iptables -I FORWARD -d 192.168.0.0/24 -j ACCEPT
  4. iptables -I FORWARD -s 192.168.0.0/24 -j ACCEPT

Чтобы действие из п.1 не приходилось выполнять каждый раз после перезагрузки роутера, нужно поправить соответствующую опцию в /etc/sysctl.conf

Если требуется построить NAT в другую сторону, известный также как DNAT, то это можно сделать примерно так:

  1. 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:

  1. modprobe ip_nat_pptp

Posted in *nix, Howto.

Tagged with , , , .


4 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. adam says

    Спасибо автору за пост, именно то что искал :)

  2. Александр says

    Спасибо!!! Наконец заработало!!!
    Теперь буду пробовать глубже копать!
    Автору респект :)

  3. anonym says

    тоже сталкивались с ошибкой 619, оказалось что протокол gre блокировался шлюзом

  4. женя says

    Ну наконец нашел! Просто и ясно,огромное спасибо!

You must be logged in to post a comment.