- Проброс порта сделал, а изнутри доступа нет,
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
|