The OpenNET Project
 
Поиск (теги):    НОВОСТИ (+) КОНТЕНТ WIKI MAN'ы ФОРУМ

Проброс порта внутрь сети через NAT в Linux (nat iptables linux)


<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: nat, iptables, linux,  (найти похожие документы)
From: Dmitry A. Koptev <dimez@nm.ru.> Date: Mon, 17 Oct 2005 18:21:07 +0000 (UTC) Subject: Проброс порта внутрь сети через NAT в Linux Оригинал: http://dimez.nm.ru/docs/nat/ ДАНО: Локальная сеть, роутер с 2-мя сетевыми карточками(под управлением Linux), в одну карточку включен шнур, по которому идёт интернет :-) Из роутера идёт второй шнур, который раздаёт этот интернет всей локалке. НАДО: "Пробросить" порт(либо вообще "выкинуть" машину наружу) внутрь локалки, то-есть обеспечить доступ извне(из дикого интернета) к какой-то локальной машине. РЕШЕНИЕ: Сразу скажу, что на ядрах 2.2.x это нормально не получается, только используя утилиты iproute2 Алексея Кузнецова(сам не пробовал, но, говорят, получается). Так что я рассматриваю вариант kernel-2.4.x + iptables. Ставим ЯДРО (посвежее http://www.kernel.org/pub/linux/kernel/), в ядре включаем всё, что касаемо iptables, ставим IPTABLES http://www.netfilter.org/ (если ещё не поставлены, кстати, рекомендую ставить тоже самые свежие) Обозначения $EXT_R_IP - внешний IP роутера $LOCAL_IP - внутренний "фэйковый" адрес машины, которую надо "выкидывать" наружу $PORT1 - Порт, на который будут заходить извне и попадать на локальную машину $PORT2 - Порт, который "выбрасывается" наружу(например, 80 - http, либо 21 - ftp) На роутере говорим следующие команды(от рута) # iptables -t nat -A PREROUTING -p tcp -d $EXT_R_IP --dport $PORT1 -j DNAT --to-destination $LOCAL_IP:$PORT2 # iptables -A FORWARD -i eth0 -d $LOCAL_IP -p tcp --dport $PORT2 -j ACCEPT Вуаля! Машина видна снаружи! !!!БОЛЬШОЕ ПРЕДУПРЕЖДЕНИЕ!!! Прежде чем "выкидывать" порт наружу - имеет смысл поставить на эту машину FIREWALL, либо поставить новую версию программы(web-сервер или прочее), которую случайно не поломают. Вариант #2 - требуется вообще "выкинуть" машину наружу, но административными мерами(то есть, не трогая самой машины) Тут ЕЩЁ БОЛЬШЕЕ ПРЕДУПРЕЖДЕНИЕ!!! Это гораздо опаснее, чем обычный "проброс" порта - так что ставить нормальный FIREWALL просто необходимость, а не прихоть!!! Обозначения 1) $IFACE - внешний сетевой интерфейс на роутере(например, eth0) 2) $NEW_IP - новый IP, на который будем "сажать" "выведенную" машину из локалки (не может же она жить без IP :)(Если провайдер дал Вам больше одного внешнего I P-адреса) 3) $BC,$NM,$GW - соответственно, broadcast,netmask,gateway, который выдаёт провайдер(в общих чертах) 4) $LOCAL_IP - тоже самое, что и вверху Сначала надо сделать alias(у нас же нет третьей сетевой карточки) сетевого интерфейса(все команды - от рута, естественно) # ifconfig $IFACE:0 $NEW_IP netmask $NM broadcast $BC # route add $NEW_IP gw $GW netmask 0.0.0.0 metric 1 dev $IFACE:0 # iptables -t nat -A PREROUTING -p tcp -d $NEW_IP -j DNAT --to-destination $LOCAL_IP # iptables -A FORWARD -i eth0 -d $LOCAL_IP -j ACCEPT Ещё можно написать скрипт, который легко опускает/поднимает DNAT ---cat-/etc/rc.d/rc.dnat--- #!/bin/bash $IFACE=eth0 $LOCAL_IP="192.168.1.251" $NEW_IP="q.w.e.r" $NM="a.s.d.f" $BC="z.x.c.v" $GW="p.o.i.u" case "$1" in 'stop') iptables -D FORWARD -i eth0 -d $LOCAL_IP -j ACCEPT iptables -t nat -D PREROUTING -p tcp -d $NEW_IP -j DNAT --to-destination $LOCAL_IP route del $NEW_IP gw $GW netmask 0.0.0.0 metric 1 dev $IFACE:0 ifconfig $IFACE:0 down ;; 'start') ifconfig $IFACE:0 $NEW_IP netmask $NM broadcast $BC route add $NEW_IP gw $GW netmask 0.0.0.0 metric 1 dev $IFACE:0 iptables -t nat -A PREROUTING -p tcp -d $NEW_IP -j DNAT --to-destination $LOCAL_IP iptables -A FORWARD -i eth0 -d $LOCAL_IP -j ACCEPT ;; 'restart') $0 stop && $0 start ;; *) echo "usage $0 start|stop|restart" ;; esac ---end-of-cat--- Всё! Теперь нашу локальную машину могут ломать хакеры всего интернета!! :) P.S. Все дополнения, исправления, пожелания, деньги и ценные вещи приветствуются :)

<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, Irina V Smorodina, 12:23, 26/02/2006 [ответить] [смотреть все]
  • +/
    День добрый! у меня сложилась ситуация, когда мне нужно сделать доступ к локальной машине извне на порт 3389.
    У меня стоит на роутере fedora core 2.
    согласно вышеописанному, делаю
    # iptables -t nat -A PREROUTING -p tcp -d $EXT_R_IP --dport 3389 -j DNAT --to-destination $LOCAL_IP:3389
            # iptables -A FORWARD -i eth0 -d $LOCAL_IP -p tcp --dport 3389 -j ACCEPT

    но к локальной машине по этому порту так и не пускает.

     
     
  • 2.3, sub, 04:00, 07/05/2006 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    1 Точно ли включен доступ на локальной машине RD 2 Не перебивает ли какоенибуд... весь текст скрыт [показать] [показать ветку]
     
  • 2.4, sub, 04:02, 07/05/2006 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    И ещё какой у тебя ЯДРО на твоей FC2 в мануале сказано, цетирую Сра... весь текст скрыт [показать] [показать ветку]
     
  • 1.2, sub, 03:55, 07/05/2006 [ответить] [смотреть все]  
  • +/
    Linux & Windows
    ==
    Проброс порта, в большенстве нужен для администрирования сервера в локальной сети.
    Помимо UNIX серверов, частенько необходим доступ, напрмер к Домену, который само собой работает под управлением windows 2k, 2003. Но если администратор работает всю жизнь под unix, и пользуеться удалённым клиентом rdesktop (unix).... может возникнуть проблема, как один раз возникла у меня. Пробросил я порт 3389 на локальную машинку, под управлением windows 2003 server, но имя пользователя на ней на русском языке, пароль на английском. Стандартная комбинация Shift + Alt или Shift + Ctrl под rdesktop (unix) - НЕ РАБОТАЕТ, как же залогиниться????
    Ответ прост - Экранная Клавиатура. Запускаеться она комбинацией клавиш
                     !!! windows + U !!!
    собственно такой небольшой ньюанс, который не раз поможет Вам быстро и оперативно залогиниться удалённо.
     
     
  • 2.5, Dmitriy, 09:06, 20/05/2006 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    x11 conf отменили XkbOption и пр ... весь текст скрыт [показать] [показать ветку]
     
  • 1.6, Илья, 14:16, 20/07/2007 [ответить] [смотреть все]  
  • +/
    >Стандартная комбинация Shift + Alt или Shift + Ctrl под rdesktop (unix) - НЕ РАБОТАЕТ

    Это после каго перепугу? Все работает

     
  • 1.7, init, 17:11, 26/04/2008 [ответить] [смотреть все]  
  • +/
    Сам только что пропарился с пробросом портов... Вот вычитал в инете
    ptables -t nat -A PREROUTING -s $FROM -d $GATE_IP -i eth1 -p tcp -m tcp --sport 1024:65535 --dport 3389 -j DNAT --to-destination $W2K_SERVER

    iptables -t nat -A POSTROUTING -d $W2K_SERVER -o eth0 -p tcp -m tcp --dport 3389 -j SNAT --to-source $GATE_INNER_IP

    iptables -A INPUT -s $FROM -d $GATE_IP -i eth1 -p tcp -m tcp --dport 3389 -j ACCEPT
    iptables -A FORWARD -s $FROM -i eth1 -p tcp -m tcp --dport 3389 -j ACCEPT
    iptables -A FORWARD -s $W2K_SERVER -d $FROM -i eth0 -p tcp -m tcp --sport 3389 -j ACCEPT

    где
    $FROM - кому разрешено ломиться к внутреннему серверу
    $GATE_IP - внешний ip-адрес шлюза
    $GATE_INNER_IP - внутренний ip-адрес шлюза
    $W2K_SERVER - ну это понятно :)


    -------------
    спасибки Xman'у

     
  • 1.8, system, 13:57, 25/06/2008 [ответить] [смотреть все]  
  • –1 +/
    а в free можно шота подобное сделать???
     
     
  • 2.10, Dmitry, 08:59, 18/11/2008 [^] [ответить] [смотреть все] [показать ветку]  
  • –1 +/
    Да конечно, а IPFW юзать rdr Например rdr on ExtIf proto tcp from any to Ex... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.11, Dmitry, 09:00, 18/11/2008 [^] [ответить] [смотреть все]  
  • –1 +/
    Ой, извиняюсь PF надо ... весь текст скрыт [показать]
     
  • 1.9, Ямберт, 13:12, 21/08/2008 [ответить] [смотреть все]  
  • –1 +/
    У меня другая задача, нужно пробросить порт но маршрутизация сделана на Win XP. Нужно чтоб апачь на одной из машин был через другую виден вовне.
     
  • 1.12, ss1, 07:36, 04/12/2008 [ответить] [смотреть все]  
  • –1 +/
    Спасибо большое статья работает))))
     
  • 1.13, vasia, 01:04, 28/05/2009 [ответить] [смотреть все]  
  • –1 +/
    А как сделать что бы это работало когда внешний ип по дхцп и внутри сети всем по дхцп раздается и что б у всех во внутреней сети был виден этот порт?
     
     
  • 2.15, ImSolo, 16:41, 01/06/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Юзать DNS внутри сети и писать вместо IP DNS-имя У меня так ... весь текст скрыт [показать] [показать ветку]
     
  • 1.14, Агент павел..., 01:24, 01/06/2009 [ответить] [смотреть все]  
  • –1 +/
    Какой этот?
     
  • 1.16, denis, 00:38, 06/06/2009 [ответить] [смотреть все]  
  • +/
    спасибо! помогло!

    10 баллов по 10 бальной шкале автору! недавно сел за iptables, но поскольку проброс понадобился раньше чем прочитал про них, пришлось юзать скрипт. спасибо!!!

     
  • 1.17, Decoy, 16:35, 16/07/2009 [ответить] [смотреть все]  
  • +/
    Почему же только '-p tcp'? Как на счет UDP, ICMP?.. Я бы убрал '-p tcp'.
     
  • 1.18, Руслан, 15:40, 17/09/2009 [ответить] [смотреть все]  
  • +/
    У меня только при:
    # iptables -t nat -A PREROUTING -p tcp -i $EXT_IFACE --dport $PORT1 -j DNAT --to-destination $LOCAL_IP:$PORT2
    # iptables -A FORWARD -i eth0 -d $LOCAL_IP -p tcp --dport $PORT2 -j ACCEPT
    заработало.
     
  • 1.19, Птр, 13:45, 18/11/2009 [ответить] [смотреть все]  
  • +/
    Толково и без воды. На wl-500gP+ usb wimax YOTA c прошивкой от Олега нужно было пробросить порт с wimax. Много искал. Ничего путного не выходило. Данная статья помогла. АВТОРУ СПАСИБО ОГРОМНОЕ!!!!!!
     
  • 1.20, Дон, 14:20, 08/02/2010 [ответить] [смотреть все]  
  • +/
    возможно ли сделать проброс портов через один интерфейс?
    Имеем
    1) fedora core 11 на "сервере"(поставлена в роутере  а  DMZ).
    2) 3 машинки каждой нужен проброс на разные порты(от 2 до 5-ти).
    3) роутер(из-за лимита количества правил 10-15 и резделении по протоколам)
     
     
  • 2.21, Дон, 14:24, 08/02/2010 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Система висит(
    1) на DMZ
    3)(из-за лимита количества правил 10-15 и резделении по протоколам, такое количество правил не реализовать)
     
  • 1.22, Beavis, 21:41, 12/06/2010 [ответить] [смотреть все]  
  • +/
    Получаю $EXT_R_IP по средствам DHCP сервера провайдера. Каким образом следует изменить правило?
     
  • 1.23, Lorgus, 13:14, 07/07/2010 [ответить] [смотреть все]  
  • +/
    во во... меня тож DHCP интересует, от прова DHCP и ppp0
     
  • 1.24, Георгий, 15:52, 09/08/2010 [ответить] [смотреть все]  
  • +/
    iptables -F FORWARD
    iptables -t nat -A PREROUTING -p tcp -d 192.168.56.11 --dport 2221 -j DNAT --to-destination 192.0.2.102:22
    #iptables -A FORWARD -i eth0 -p tcp  --sport 2221 -d 192.0.2.102 --dport 22 -j ACCEPT

    iptables -L

    Для чего нужна вторая строчка, если у меня работает и без нее?
    Суть: на локальном компе с 192.168.56.11 с помощью OpenVZ сделан контейнер без внешнего доступа. Вышеприведенным кодом делаю ssh доступ к нему по порту 2221 (стандартный 22 используется для доступа к самому компу).

     
  • 1.25, Sharp, 09:55, 31/08/2010 [ответить] [смотреть все]  
  • +/
    Скажите пожалуйста:
    1) Те кто будет по проброшеному порту заходить на машину в локалке будут знать, что они зашли на локальную машину, а не на роутер?
    2) Провайдер от которого у меня интернет может выяснить, что за роутером ещё машины есть, если локальным машинам устроить проброс портов?
     
     
  • 2.26, Gotik, 18:57, 16/10/2010 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    1) - Нет небудут.
    2) - При сильном желании может.Но только какая ему разница?))
     
  • 1.27, madmas, 20:48, 18/10/2010 [ответить] [смотреть все]  
  • +/
    А какие еще нужно добавить правила (чтобы добраться до GATE_INNER_IP), если перед машиной GATE стоит железный файервол, который уже выбрасывает GATE наружу? Т.е. получается что у GATE оба IP адреса внутренние.
     
  • 1.28, доктор хата, 02:28, 17/02/2012 [ответить] [смотреть все]  
  • +/
    фууууу, сколько ламоты!
    Я б таких не подпускал к компам без сдачи на права. Да!
    И в инет бы не выпускал писать. Только читать.
    Так-то.
     
  • 1.29, Boba, 21:19, 21/08/2012 [ответить] [смотреть все]  
  • +/
    Сделал все по описанию, два раза проверил, - не работает.
    Linux - CentOS 6.3
    Видимо, статья устарела.
     
  • 1.30, ArtM, 23:00, 27/08/2012 [ответить] [смотреть все]  
  • +/
    Господа, что же получается, что DMZ в каком-нибудь DLink-е, мулька для Юзверей?
    кто-нубудь делал ли DMZ на неком Firehol (это такой farewall, достаточно интеллигентный)
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:






      Закладки на сайте
      Проследить за страницей
    Created 1996-2014 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    RUNNet TopList