The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Проброс порта сделал, а изнутри доступа нет, !*! eJ, 14-Янв-07, 16:42  [смотреть все]
Как сделать доступ к внешнему порту из локалки?

LOCAL_ADDR=192.168.0.10
INET_ADDR=xx.xx.xx.xx

Вот так работает снаружи:
$IPT -t nat -A PREROUTING -i $INET_IFACE -d $INET_ADDR -p tcp --dport 4662 -j DNAT --to-destination $LOCAL_ADDR

Как сделать тоже самое из локалки? Чтоб из локалки был доступен $INET_ADDR:4662?

  • Проброс порта сделал, а изнутри доступа нет, !*! ncp, 17:55 , 14-Янв-07 (1)
    >Как сделать доступ к внешнему порту из локалки?
    >
    >LOCAL_ADDR=192.168.0.10
    >INET_ADDR=xx.xx.xx.xx
    >
    >Вот так работает снаружи:
    >$IPT -t nat -A PREROUTING -i $INET_IFACE -d $INET_ADDR -p tcp --dport
    >4662 -j DNAT --to-destination $LOCAL_ADDR
    >
    >Как сделать тоже самое из локалки? Чтоб из локалки был доступен $INET_ADDR:4662?
    >
    Вот тебе цитата, действуй в соответствии с ней.
    "Iptables Tutorial 1.1.19
    Автор: Oskar Andreasson
         blueflux@koffein.net
           Copyright (C) 2001-2003 Oskar Andreasson
        
    Перевод: Андрей Киселев
         kis_an@mail.ru
    Действие DNAT достаточно сложно в использовании и требует дополнительного пояснения. Рассмотрим простой пример. У нас есть WEB сервер и мы хотим разрешить доступ к нему из Интернет. Мы имеем только один реальный IP адрес, а WEB-сервер расположен в локальной сети. Реальный IP адрес $INET_IP назначен брандмауэру, HTTP сервер имеет локальный адрес $HTTP_IP и, наконец брандмауэр имеет локальный алрес $LAN_IP. Для начала добавим простое правило в цепочку PREROUTING таблицы nat:
    iptables -t nat -A PREROUTING --dst $INET_IP -p tcp --dport 80 -j DNAT \
    --to-destination $HTTP_IP
      

    В соответствии с этим правилом, все пакеты, поступающие на 80-й порт адреса $INET_IP перенаправляются на наш внутренний WEB-сервер. Если теперь обратиться к WEB-серверу из Интернет, то все будет работать прекрасно. Но что же произойдет, если попробовать соединиться с ним из локальной сети? Соединение просто не установится. Давайте посмотрим как маршрутизируются пакеты, идущие из Интернет на наш WEB-сервер. Для простоты изложения примем адрес клиента в Интернет равным $EXT_BOX.
    Пакет покидает клиентский узел с адресом $EXT_BOX и направляется на $INET_IP
    Пакет приходит на наш брандмауэр.
    Брандмауэр, в соответствии с вышеприведенным правилом, подменяет адрес назначения и передает его дальше, в другие цепочки.
    Пакет передается на $HTTP_IP.
    Пакет поступает на HTTP сервер и сервер передает ответ через брандмауэр, если в таблице маршрутизации он обозначен как шлюз для $EXT_BOX. Как правило, он назначается шлюзом по-умолчанию для HTTP сервера.
    Брандмауэр производит обратную подстановку адреса в пакете, теперь все выглядит так, как будто бы пакет был сформирован на брандмауэре.
    Пакет передается клиенту $EXT_BOX.
    А теперь посмотрим, что произойдет, если запрос посылается с узла, расположенного в той же локальной сети. Для простоты изложения примем адрес клиента в локальной сети равным $LAN_BOX.
    Пакет покидает $LAN_BOX.
    Поступает на брандмауэр.
    Производится подстановка адреса назначения, однако адрес отправителя не подменяется, т.е. исходный адрес остается в пакете без изменения.
    Пакет покидает брандмауэр и отправляется на HTTP сервер.
    HTTP сервер, готовясь к отправке ответа, обнаруживает, что клиент находится в локальной сети (поскольку пакет запроса содержал оригинальный IP адрес, который теперь превратился в адрес назначения) и поэтому отправляет пакет непосредственно на $LAN_BOX.
    Пакет поступает на $LAN_BOX. Клиент "путается", поскольку ответ пришел не с того узла, на который отправлялся запрос. Поэтому клиент "сбрасывает" пакет ответа и продолжает ждать "настоящий" ответ.
    Проблема решается довольно просто с помощью SNAT. Ниже приводится правило, которое выполняет эту функцию. Это правило вынуждает HTTP сервер передавать ответы на наш брандмауэр, которые затем будут переданы клиенту.
    iptables -t nat -A POSTROUTING -p tcp --dst $HTTP_IP --dport 80 -j SNAT \
    --to-source $LAN_IP
      

    Запомните, цепочка POSTROUTING обрабатывается самой последней и к этому моменту пакет уже прошел процедуру преобразования DNAT, поэтому критерий строится на базе адреса назначения $HTTP_IP.
    Если вы думаете, что на этом можно остановиться, то вы ошибаетесь! Представим себе ситуацию, когда в качестве клиента выступает сам брандмауэр. Тогда, к сожалению, пакеты будут передаваться на локальный порт с номером 80 самого брандмауэра, а не на $HTTP_IP. Чтобы разрешить и эту проблему, добавим правило:
    iptables -t nat -A OUTPUT --dst $INET_IP -p tcp --dport 80 -j DNAT \
    --to-destination $HTTP_IP
      

    Теперь никаких проблем, с доступом к нашему WEB-серверу, уже не должно возникать."

    • Проброс порта сделал, а изнутри доступа нет, !*! eJ, 10:32 , 15-Янв-07 (2)
      >>Как сделать доступ к внешнему порту из локалки?
      >>
      >>LOCAL_ADDR=192.168.0.10
      >>INET_ADDR=xx.xx.xx.xx
      >>
      >>Вот так работает снаружи:
      >>$IPT -t nat -A PREROUTING -i $INET_IFACE -d $INET_ADDR -p tcp --dport
      >>4662 -j DNAT --to-destination $LOCAL_ADDR
      >>
      >>Как сделать тоже самое из локалки? Чтоб из локалки был доступен $INET_ADDR:4662?
      >>
      >Вот тебе цитата, действуй в соответствии с ней.
      [skipeed]

      Спасибо большое! Давным-давно эту статью читал, но не запомнил. :)


      • Проброс порта сделал, а изнутри доступа нет, !*! ncp, 13:15 , 15-Янв-07 (3)
        >>>Как сделать доступ к внешнему порту из локалки?
        >>>
        >>>LOCAL_ADDR=192.168.0.10
        >>>INET_ADDR=xx.xx.xx.xx
        >>>
        >>>Вот так работает снаружи:
        >>>$IPT -t nat -A PREROUTING -i $INET_IFACE -d $INET_ADDR -p tcp --dport
        >>>4662 -j DNAT --to-destination $LOCAL_ADDR
        >>>
        >>>Как сделать тоже самое из локалки? Чтоб из локалки был доступен $INET_ADDR:4662?
        >>>
        >>Вот тебе цитата, действуй в соответствии с ней.
        >[skipeed]
        >
        >Спасибо большое! Давным-давно эту статью читал, но не запомнил. :)

        Ну че? Получилось?

        • Проброс порта сделал, а изнутри доступа нет, !*! eJ, 16:20 , 17-Янв-07 (4)
          >>>>Как сделать доступ к внешнему порту из локалки?
          >>>>
          >>>>LOCAL_ADDR=192.168.0.10
          >>>>INET_ADDR=xx.xx.xx.xx
          >>>>
          >>>>Вот так работает снаружи:
          >>>>$IPT -t nat -A PREROUTING -i $INET_IFACE -d $INET_ADDR -p tcp --dport
          >>>>4662 -j DNAT --to-destination $LOCAL_ADDR
          >>>>
          >>>>Как сделать тоже самое из локалки? Чтоб из локалки был доступен $INET_ADDR:4662?
          >>>>
          >>>Вот тебе цитата, действуй в соответствии с ней.
          >>[skipeed]
          >>
          >>Спасибо большое! Давным-давно эту статью читал, но не запомнил. :)
          >
          >Ну че? Получилось?

          Да. Правда чутка по-другому (найдено методом тыка :)
          $EJ_IP - IP в локальной сетке
          $EJ_PORT - порт в $EJ_IP и брандмаузере
          $INET_IP - внешний IP брандмаузера
          $LAN - локальная сеть /24
          $LAN_IP - локальный IP брандмаузера
          $IPT - iptables
          -j ACCEPT - по умолчанию стоит

          $IPT -t nat -A PREROUTING -d $INET_IP -p tcp --dport $EJ_PORT -j DNAT --to-destination $EJ_IP
          $IPT -t nat -A POSTROUTING -s $LAN -d $EJ_IP -p tcp --dport $EJ_PORT -j SNAT --to-source $LAN_IP




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру