Debian.pro

Блог для пользователей и администраторов Debian


NAT’им отдельные порты или «а что делать, если мой веб-сервер внезапно переехал на другую машину». Проброс портов в локалке на шлюзе наружу.

Данный мануал поможет вам в двух глобальных ситуациях:
1) необходимо пробросить порт на шлюзе на одну из внутренних машин в локалке (т.н. port forwarding на роутерах).
2) если по каким то причинам вам необходимо перенаправить трафик с одной машины на другую по определенным портам. Например — переезд веб-сервера (а DNSы ещё не обновились), перенаправить трафик по 21му порту на другую машину (например, если там NFS-хост для нужного сервера и не хочется зря грузить NFS). Параноики могут убрать ssh с 22го порта и трафик с этого порта отправить куда-нибудь в сторону fbi.gov

Ситуация раз. Внешний IP нашего сервера — 8.8.8.8 (учтите, что этот IP должен висеть на одном из интерфейсов шлюза), а трафик по 443му порту нам нужно перенаправлять на машину 192.168.0.3 в локалке. Да легко:
root@gateway:~# iptables -t nat -A POSTROUTING -p tcp --dst 192.168.0.3 --dport 443 -j SNAT --to-source 8.8.8.8
root@gateway:~# iptables -t nat -A PREROUTING -p tcp --dst 8.8.8.8 --dport 443 -j DNAT --to-destination 192.168.0.3:443

Ситуация 2. Старый сервер — 8.8.8.8 (oldserver), сервер на который нужно перенаправлять трафик — 8.8.4.4
Учтите, что трафик будет литься через 8.8.8.8 в обе стороны (это NAT, а не redirect) — то есть приходит запрос на *.8.8, тот перенаправляет пакет на *.4.4, ждет обратный пакет и отправляет ответ тому, кому нужен этот ответ. Если внешний канал (и тем более он не full-duplex) нагружен — подумайте о хитрых SRV записях. Перенаправляем также 443й порт:
root@gateway:~# iptables -t nat -A POSTROUTING -p tcp --dst 8.8.4.4 --dport 443 -j SNAT --to-source 8.8.8.8
root@gateway:~# iptables -t nat -A PREROUTING -p tcp --dst 8.8.8.8 --dport 443 -j DNAT --to-destination 8.8.4.4:443

Ну и хороший совет напоследок. Чтобы избежать много геморроя «если web-daemon вдруг упадет» — держите про запас VDS со страничкой, созданной в соответствии с этой страницей — http://habrahabr.ru/company/google/blog/113024/
Если что — быстренько пишем правила в iptables и радуемся, что поисковики и юзеры догадываются что случилось и когда починят.


Комментарии (17):

  1. Небольшое дополнение — про проброс портов и правило OUTPUT, полностью описывать не буду — мучения тут: http://linuxforum.ru/viewtopic.php?id=12060

  2. Dima :

    у меня такой вопрос, можем малость не в тему но все же, у нас в конторе стоит машина(файрвол)(10.5.1.30) в которую приходит интернет, за ней стоит машина(10.5.14) раздающая по dhcp 10.5.1.0/24 в этой подсити надо поставить машину(10.5.1.15) которая раздает 10.6.1.0/24 если ее настроить по вашим мануалам(iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE) то все кто находятся в 10.6.1.0/24 выходит в свет как 10.5.1.15, мне нужно перенастроить так чтобы я мог на файрволе запретить доступ в инет машине 10.6.1.50, как настроить файрвол не проблема а вот как прабросить трафик из 6_ой подсити это проблема

  3. Читайте LARTC или сделайте большую подсеть.

  4. Dima :

    читаю но вот пока не дочитал и не вник наткнулся на некий «момент» и такой вопрос если в /etc/rc.local вместо
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    я напишу
    iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
    (eth0 смотрит в подсеть 5, eth1 смотрит в подсеть 6)
    оно разве не заработает как мне надо(проверить не могу на работу попаду только через пару дней)
    сделать большую подсеть не можем так как у нас около 400 машин…

  5. Заработает. Но машины будут ходить в 5ю подсеть с IP адресом интерфейса eth0. Это NAT.
    Если вам нужны их родные адреса — маршрутизируйте сеть, а не NATьте.

  6. Dima :

    Благодарю за помощь, разобрался)
    в общем для решения проблемы в 10.5.1.15 убрал все iptables_ы, а на машине 10.5.1.14 сказал что 10.5.1.15 это роутер принасящий 6_ую подсеть.

  7. nagual :

    Нафиг вы людей смущаете ? 8.8.8.8 это адрес днс гугля и в качестве примера адреса клиента выбран очень неудачно.

  8. Ну если люди читают по диагонали — ссзб, что.

  9. Andrey :

    А что надо написать в правилах IPTABLES, чтобы можно было извне подключаться по L2TP/IPSEC протоколу с Windows-клиентов к VPN серверу (на Windows 2008R2), который находится за шлюзом на Debian 7?
    Никак не получается настроить правила проброса портов. По tcp 1723 (PPTP) всё получилось.

    В локалке подключение работает. Теперь надо, чтобы снаружи тоже пускало :)

  10. Очевидно, пробросить порты, необходимые для работы L2TP/IPSEC.
    https://debian.pro/523
    https://debian.pro/375

    Какие — nmap-ом посмотрите.

  11. Andrey :

    Пишу

    #Проброс L2TP IPSEC
    iptables -t nat -A PREROUTING -p udp -d 105.6.153.228 —dport 50 -j DNAT —to-destination 192.168.10.5:50
    iptables -t nat -A POSTROUTING -p udp —dst 192.168.10.5 —dport 50 -j SNAT —to-source 105.6.153.228

    iptables -t nat -A PREROUTING -p udp -d 105.6.153.228 —dport 500 -j DNAT —to-destination 192.168.10.5:500
    iptables -t nat -A POSTROUTING -p udp —dst 192.168.10.5 —dport 500 -j SNAT —to-source 105.6.153.228

    iptables -t nat -A PREROUTING -p udp -d 105.6.153.228 —dport 4500 -j DNAT —to-destination 192.168.10.5:4500
    iptables -t nat -A POSTROUTING -p udp —dst 192.168.10.5 —dport 4500 -j SNAT —to-source 105.6.153.228

    и не работает :(

  12. Тогда где то тут читайте https://support.microsoft.com/kb/926179/ru

  13. Andrey :

    Читал.. Тут про клиентов описывается. У меня клиентский комп windows 7, на него это не распространяется. Я ж пишу — напрямую, без NAT подключается на 192.168.10.5 нормально. А извне не пускает файрвол. Проброшены порты tcp 3389 и UDP 50,500,4500,1701 для L2TP
    По RDP отлично пробрасывается. Вот вывод всех правил http://www.floomby.ru/s2/ke5HWw

    Ладно, попробую через rinetd

  14. vers_22 :

    Подскажите по 2 ситуации, нужно пробросить vpn pptp с одной машинки на другую. Я так полагаю, что GRE как-то отдельно?

  15. bug :

    Подскажите, как сделать чтобы можно было с локальной сети в которой веб сервер подключаться по внешнему IP?

  16. define «локальная сеть». Что на границе?
    IP статический? Точно белый?

Написать комментарий