The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"DNS зона "
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"DNS зона "
Сообщение от sashka Искать по авторуВ закладки on 24-Янв-04, 11:19  (MSK)
ситуация такая...
есть локальная сеть, есть шлюз (выход в инет) для локальной машины я дал реальный IP адрес, с помощью Static NAT
на этой машине крутится апач с виртуальными хостами...
теперь когда я захочу зайти на какой либо виртуальный хост, то есессно откроется страница шлюза, если через инет смотреть то конечно всё ок.
вот собственно вопрос... как мне сделать что б если из локалки запрос то днс резолвил бы как 10.1.1.* т.е фейковый адрес, а если запрос из инета, то резолвился бы реальный айпи?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "DNS зона "
Сообщение от nubi Искать по авторуВ закладки on 24-Янв-04, 11:25  (MSK)
>ситуация такая...
>есть локальная сеть, есть шлюз (выход в инет) для локальной машины я
>дал реальный IP адрес, с помощью Static NAT
>на этой машине крутится апач с виртуальными хостами...
>теперь когда я захочу зайти на какой либо виртуальный хост, то есессно
>откроется страница шлюза, если через инет смотреть то конечно всё ок.
>
>вот собственно вопрос... как мне сделать что б если из локалки запрос
>то днс резолвил бы как 10.1.1.* т.е фейковый адрес, а если
>запрос из инета, то резолвился бы реальный айпи?

цитата из туториала iptables:

Действие 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-серверу, уже не должно возникать.

Каждый должен понять, что эти правила предназначены только для корректной работы Destination Network Address Translated и Source Network Address Translated. В дополнение к этим правилам вам может потребоваться написать дополнительные правила для цепочки FORWARD таблицы filter. Не забудьте при этом, что пакеты уже прошли цепочку PREROUTING и поэтому их адреса назначения уже изменены действием DNAT.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "DNS зона "
Сообщение от sashka Искать по авторуВ закладки on 24-Янв-04, 13:04  (MSK)
всё конечно хорошо
но у меня FreeBSD
может есть линк на аналогичный пример?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "DNS зона "
Сообщение от Blc Искать по авторуВ закладки on 24-Янв-04, 15:25  (MSK)
Это не с той оперы, все что ты написал нужно для того чтобы правильно выбросить локальную машину за нат (на которой крутится апач). А к DNS оно никоим образом не относится. Если нужно сделать разный резолвинг с инета и с локальной сети хостов то надо копать в сторону views (кажись реализовано начиная с bind-9).
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "DNS зона "
Сообщение от nubi Искать по авторуВ закладки on 24-Янв-04, 16:02  (MSK)
>Это не с той оперы, все что ты написал нужно для того
>чтобы правильно выбросить локальную машину за нат (на которой крутится апач).
>А к DNS оно никоим образом не относится. Если нужно сделать
>разный резолвинг с инета и с локальной сети хостов то надо
>копать в сторону views (кажись реализовано начиная с bind-9).


да, виноват, точно так.
Прочел как классический вопрос про днат во внутреннюю сеть.
Рефлекс.

Проще в lmhosts или /etc/hosts прописать на локальных тачках.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "DNS зона "
Сообщение от Vlady Искать по авторуВ закладки on 24-Янв-04, 22:00  (MSK)
>views (кажись реализовано начиная с bind-9).

Точнее - просто view в БИНД-9+

Но для одного хоста можно использовать и оператор SORTLIST любой версии БИНДа начиная с 4.9, хотя... нафиг надо изголяться! :)

Проще сделать ссылку в HOSTSах всех машин локалки, наверное.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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