URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 83568
[ Назад ]

Исходное сообщение
"Как пропросить запросы на DNS"

Отправлено Vladimir , 05-Янв-09 17:16 
Есть шлюз на котором крутится и named, но запросов стало много, поэтому нужно чтоб юзеры работали с другим серваком ДНС. Как с помощью iptables настроить переброс запросов на другой сервак, ато пока смениш всем ДНС много времени пройдёт, а надо уже сейчас снять нагрузку.

Содержание

Сообщения в этом обсуждении
"Как пропросить запросы на DNS"
Отправлено PavelR , 05-Янв-09 18:22 
>Есть шлюз на котором крутится и named, но запросов стало много, поэтому
>нужно чтоб юзеры работали с другим серваком ДНС. Как с помощью
>iptables настроить переброс запросов на другой сервак, ато пока смениш всем
>ДНС много времени пройдёт, а надо уже сейчас снять нагрузку.

DNAT


"Как пропросить запросы на DNS"
Отправлено zkrvova , 05-Янв-09 18:39 
>>Есть шлюз на котором крутится и named, но запросов стало много, поэтому
>>нужно чтоб юзеры работали с другим серваком ДНС. Как с помощью
>>iptables настроить переброс запросов на другой сервак, ато пока смениш всем
>>ДНС много времени пройдёт, а надо уже сейчас снять нагрузку.
>
>DNAT

А можно пример? Ато я пробовал, но не получается у меня.


"Как пропросить запросы на DNS"
Отправлено reader , 05-Янв-09 21:28 
>>>Есть шлюз на котором крутится и named, но запросов стало много, поэтому
>>>нужно чтоб юзеры работали с другим серваком ДНС. Как с помощью
>>>iptables настроить переброс запросов на другой сервак, ато пока смениш всем
>>>ДНС много времени пройдёт, а надо уже сейчас снять нагрузку.
>>
>>DNAT
>
>А можно пример? Ато я пробовал, но не получается у меня.

http://www.opennet.me/docs/RUS/iptables/#DNATTARGET

и обязательно прочитать то что ниже таблицы.

если и после этого не получится , то показывайте что сделали с описанием из какой подсети запросы и куда пробрасывать


"Как пропросить запросы на DNS"
Отправлено zkrvova , 05-Янв-09 22:17 
>[оверквотинг удален]
>>>DNAT
>>
>>А можно пример? Ато я пробовал, но не получается у меня.
>
>http://www.opennet.me/docs/RUS/iptables/#DNATTARGET
>
>и обязательно прочитать то что ниже таблицы.
>
>если и после этого не получится , то показывайте что сделали с
>описанием из какой подсети запросы и куда пробрасывать

Вот что я сделал:

iptables -t nat -D PREROUTING   -d 10.1.1.1 -p tcp --dport 53 -j DNAT --to-destination 10.1.1.100

подсеть 10.0.0.0/8, у всех ДНС сервер 10.1.1.1
Новый ДНС сервак на 10.1.1.100.


"Как пропросить запросы на DNS"
Отправлено reader , 05-Янв-09 22:36 
>[оверквотинг удален]
>>и обязательно прочитать то что ниже таблицы.
>>
>>если и после этого не получится , то показывайте что сделали с
>>описанием из какой подсети запросы и куда пробрасывать
>
>Вот что я сделал:
>
>iptables -t nat -D PREROUTING   -d 10.1.1.1 -p tcp --dport
>53 -j DNAT --to-destination 10.1.1.100
>

-D это удалить правило, добавлять -A
запросы на разрешение имен используют UDP, а не TCP

>подсеть 10.0.0.0/8, у всех ДНС сервер 10.1.1.1
>Новый ДНС сервак на 10.1.1.100.

Новый ДНС сервак получается в подсети клиентов, понадобится еще и SNAT

прочитайте то что по ссылке, там ниже таблицы описывается случай похожий на ваш


"Как пропросить запросы на DNS"
Отправлено zkrvova , 06-Янв-09 17:00 
>[оверквотинг удален]
>-D это удалить правило, добавлять -A
>запросы на разрешение имен используют UDP, а не TCP
>
>>подсеть 10.0.0.0/8, у всех ДНС сервер 10.1.1.1
>>Новый ДНС сервак на 10.1.1.100.
>
>Новый ДНС сервак получается в подсети клиентов, понадобится еще и SNAT
>
>прочитайте то что по ссылке, там ниже таблицы описывается случай похожий на
>ваш

Я и ставол -А, то я случайно нето скопировал.

Сервак находится не в подсети клиентов, это я так написал что используется 10,0,0,0/8, а в этой подсети у меня много более мелких.

Щас попробую ещё раз прочитать.


"Как пропросить запросы на DNS"
Отправлено zkrvova , 06-Янв-09 17:06 
>[оверквотинг удален]
>-D это удалить правило, добавлять -A
>запросы на разрешение имен используют UDP, а не TCP
>
>>подсеть 10.0.0.0/8, у всех ДНС сервер 10.1.1.1
>>Новый ДНС сервак на 10.1.1.100.
>
>Новый ДНС сервак получается в подсети клиентов, понадобится еще и SNAT
>
>прочитайте то что по ссылке, там ниже таблицы описывается случай похожий на
>ваш

Я вот думаю, ведь все эти действия выполняются в таблице NAT, а у меня всё в локальной сети и эту таблицу естественно не проходят. Может тогда это не получится?


"Как пропросить запросы на DNS"
Отправлено zkrvova , 06-Янв-09 19:14 
>[оверквотинг удален]
>-D это удалить правило, добавлять -A
>запросы на разрешение имен используют UDP, а не TCP
>
>>подсеть 10.0.0.0/8, у всех ДНС сервер 10.1.1.1
>>Новый ДНС сервак на 10.1.1.100.
>
>Новый ДНС сервак получается в подсети клиентов, понадобится еще и SNAT
>
>прочитайте то что по ссылке, там ниже таблицы описывается случай похожий на
>ваш

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


"Как пропросить запросы на DNS"
Отправлено angra , 08-Янв-09 03:30 
>Что делать?

Прочитать таки это руководство с начала, причем внимательно ибо с порядком прохождения цепочек и таблиц ты не разобрался. Не вижу смысла копипастить сюда всю схему или пересказывать своими словами.



"Как пропросить запросы на DNS"
Отправлено reader , 08-Янв-09 22:42 
>[оверквотинг удален]
>>
>>прочитайте то что по ссылке, там ниже таблицы описывается случай похожий на
>>ваш
>
>Там есть пример:
>iptables -t nat -A OUTPUT --dst $INET_IP -p tcp --dport 80 -j
>DNAT --to-destination $HTTP_IP
>Действительно похожий, но тут сам шлюз выступает клиеном и используется цепочка OUTPUT,
>а у меня шлюз выступает сервером и нужно использовать цепочку INPUT,
>а DNAT не работает с данной цепочкой. Что делать?

как уже сказали , прочитайте всю документацию.

все таки так как и начинали, с помощью DNAT перенаправляете запрос на новый сервер.

как пойдет ответ с нового сервера зависит от таблиц маршрутизации, которые на новом сервере, поэтому что бы ответ гарантированно проходил через старый сервер, а иначе клиент ответ не примет, на старом сервере сделайте и SNAT.

при указании , в вопросах, адресов и масок пишите их логически ближе к используемым иначе ответ может не подойти к вашей реальности


"Как пропросить запросы на DNS"
Отправлено zkrvova , 08-Янв-09 23:33 
>[оверквотинг удален]
>все таки так как и начинали, с помощью DNAT перенаправляете запрос на
>новый сервер.
>
>как пойдет ответ с нового сервера зависит от таблиц маршрутизации, которые на
>новом сервере, поэтому что бы ответ гарантированно проходил через старый сервер,
>а иначе клиент ответ не примет, на старом сервере сделайте и
>SNAT.
>
>при указании , в вопросах, адресов и масок пишите их логически ближе
>к используемым иначе ответ может не подойти к вашей реальности

Наконецто я начал понимать.
Вот решил начать с более простого примера, перенаправить ping на другой сервак (точки специально поменяны на запятые):
1 сервак 10,123,123,4
2 сервак 10,123,123,5
мой комп 10,123,3,101

Перенаправляю с первого сервака на второй:
iptables -t nat -A PREROUTING  -s 10,123,3,101 -p icmp  -j DNAT --to-destination 10,123,123,5
ну тоесть подменяю IP назначения
На втором серваке подменяю IP отвечающего сервака:
iptables -t nat -A POSTROUTING -d 10,123,3,101 -p icmp  -j SNAT --to-source  10,123,123,4

Вот какая выходит трасса:
Трассировка маршрута к 10,123,123,4 с максимальным числом прыжков 30

  1    <1 мс    <1 мс    <1 мс  10,123,3,1
  2    <1 мс    <1 мс    <1 мс  10,123,123,4
дальше превышены интервалы

Т.е. получается что пакет пошёл дальше, на второй сервак и гдето там потерялся, подскажите в чём я ошибся.


"Как пропросить запросы на DNS"
Отправлено reader , 09-Янв-09 04:54 
>[оверквотинг удален]
>2 сервак 10,123,123,5
>мой комп 10,123,3,101
>
>Перенаправляю с первого сервака на второй:
>iptables -t nat -A PREROUTING  -s 10,123,3,101 -p icmp  -j
>DNAT --to-destination 10,123,123,5
>ну тоесть подменяю IP назначения
>На втором серваке подменяю IP отвечающего сервака:
>iptables -t nat -A POSTROUTING -d 10,123,3,101 -p icmp  -j SNAT
>--to-source  10,123,123,4

iptables -t nat -A POSTROUTING -d 10,123,123,5 -p icmp  -j SNAT --to-source  10,123,123,4
>[оверквотинг удален]
>Трассировка маршрута к 10,123,123,4 с максимальным числом прыжков 30
>
>  1    <1 мс    <1
>мс    <1 мс  10,123,3,1
>  2    <1 мс    <1
>мс    <1 мс  10,123,123,4
>дальше превышены интервалы
>
>Т.е. получается что пакет пошёл дальше, на второй сервак и гдето там
>потерялся, подскажите в чём я ошибся.


"Как пропросить запросы на DNS"
Отправлено zkrvova , 09-Янв-09 10:29 
>[оверквотинг удален]
>>Трассировка маршрута к 10,123,123,4 с максимальным числом прыжков 30
>>
>>  1    <1 мс    <1
>>мс    <1 мс  10,123,3,1
>>  2    <1 мс    <1
>>мс    <1 мс  10,123,123,4
>>дальше превышены интервалы
>>
>>Т.е. получается что пакет пошёл дальше, на второй сервак и гдето там
>>потерялся, подскажите в чём я ошибся.

Сделал так, ничего не поменялось.


"Как пропросить запросы на DNS"
Отправлено angra , 09-Янв-09 16:16 
>Наконецто я начал понимать.

А у меня создается впечатление, что вы окончательно запутались.

Не будем плодить лишних сущностей и вернемся к исходной задаче. Ваше правило
>iptables -t nat -D PREROUTING   -d 10.1.1.1 -p tcp --dport 53 -j DNAT --to-destination 10.1.1.100
>подсеть 10.0.0.0/8, у всех ДНС сервер 10.1.1.1
>Новый ДНС сервак на 10.1.1.100.

По /8 получается что сеть одна и нужен SNAT, если сети разные, но роут нежелателен или dns сервер отвечает только нашей машине, то опять таки нужен SNAT.

Добавляем проброс порта:
iptables -t nat -A PREROUTING  -d 10.1.1.1 -p udp --dport 53 -j DNAT --to-destination 10.1.1.100

После этого правила пакет из входящего(цепочка INPUT) становится транзитным(цепочка FORWARD). Убеждаемся что в FORWARD у нас ACCEPT, при необходимости добавляем
iptables -I FORWARD 1 -d 10.1.1.100 -p udp --dport 53 -j ACCEPT

Если нужен SNAT то добавляем
iptables -t nat -A POSTROUTING  -d 10.1.1.100 -p udp --dport 53 -j DNAT --to-source 10.1.1.1

Итого порядок преобразований пакетов для dns запросов в формате (источник : назначение), для определенности пусть запрос идет от 10.0.0.5
(10.0.0.5 : 10.1.1.1)    - запрос пришел на интерфейс
(10.0.0.5 : 10.1.1.100)  - DNAT, запомнили 10.1.1.100->10.1.1.1
(10.1.1.1 : 10.1.1.100)  - SNAT, запомнили 10.1.1.1->10.0.0.5
запрос ушел на 10.1.1.100
(10.1.1.100 : 10.1.1.1)  - ответ на запрос пришел с 10.1.1.100
(10.1.1.1 : 10.1.1.1)    - обратный DNAT, вспоминаем 10.1.1.100->10.1.1.1
(10.1.1.1 : 10.0.0.5)    - обратный SNAT, вспоминаем 10.1.1.1->10.0.0.5
ответ ушел на 10.0.0.5

И все-таки почитайте руководство.


"Как пропросить запросы на DNS"
Отправлено reader , 09-Янв-09 16:49 
SNAT и DNAT - делайте на одном (старом) сервере

"Как пропросить запросы на DNS"
Отправлено Vladimir , 13-Янв-09 15:07 
>SNAT и DNAT - делайте на одном (старом) сервере

Сделал так, получилось, пинг пошёл. Спасибо.


"Как пропросить запросы на DNS"
Отправлено Vladimir , 13-Янв-09 15:09 
>[оверквотинг удален]
>(10.0.0.5 : 10.1.1.1)    - запрос пришел на интерфейс
>(10.0.0.5 : 10.1.1.100)  - DNAT, запомнили 10.1.1.100->10.1.1.1
>(10.1.1.1 : 10.1.1.100)  - SNAT, запомнили 10.1.1.1->10.0.0.5
>запрос ушел на 10.1.1.100
>(10.1.1.100 : 10.1.1.1)  - ответ на запрос пришел с 10.1.1.100
>(10.1.1.1 : 10.1.1.1)    - обратный DNAT, вспоминаем 10.1.1.100->10.1.1.1
>(10.1.1.1 : 10.0.0.5)    - обратный SNAT, вспоминаем 10.1.1.1->10.0.0.5
>ответ ушел на 10.0.0.5
>
>И все-таки почитайте руководство.

Идею понял, но возник вопрос, тут описан метот когда мне известен IP клиента, а если клиенов много, надо делать правила универсальные, для подсети, ато как запомнить откого пришёл запрос если мы меняем отправителя?


"Как пропросить запросы на DNS"
Отправлено angra , 13-Янв-09 16:17 
Я поставил конкретный ip для _иллюстрации_, DNAT и SNAT сами запоминают ip и порты, сами их восстанавливают.

"Как пропросить запросы на DNS"
Отправлено Pahanivo , 05-Янв-09 22:38 
>Есть шлюз на котором крутится и named, но запросов стало много, поэтому
>нужно чтоб юзеры работали с другим серваком ДНС. Как с помощью
>iptables настроить переброс запросов на другой сервак, ато пока смениш всем
>ДНС много времени пройдёт, а надо уже сейчас снять нагрузку.

зачем это делать на уровне ip?
по моему горазда быстрее и проще сделать это средствами named - forwarding
как бонус получаем отказоустойчивость и кеширование


"Как пропросить запросы на DNS"
Отправлено zkrvova , 06-Янв-09 16:58 
>>Есть шлюз на котором крутится и named, но запросов стало много, поэтому
>>нужно чтоб юзеры работали с другим серваком ДНС. Как с помощью
>>iptables настроить переброс запросов на другой сервак, ато пока смениш всем
>>ДНС много времени пройдёт, а надо уже сейчас снять нагрузку.
>
>зачем это делать на уровне ip?
>по моему горазда быстрее и проще сделать это средствами named - forwarding
>
>как бонус получаем отказоустойчивость и кеширование

А как это сделать, подскажи.
И снизится тогда нагрузка на основной сервак или нет?


"Как пропросить запросы на DNS"
Отправлено s_dog , 06-Янв-09 17:15 
>[оверквотинг удален]
>>>iptables настроить переброс запросов на другой сервак, ато пока смениш всем
>>>ДНС много времени пройдёт, а надо уже сейчас снять нагрузку.
>>
>>зачем это делать на уровне ip?
>>по моему горазда быстрее и проще сделать это средствами named - forwarding
>>
>>как бонус получаем отказоустойчивость и кеширование
>
>А как это сделать, подскажи.
>И снизится тогда нагрузка на основной сервак или нет?

http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edit...


"Как пропросить запросы на DNS"
Отправлено zkrvova , 06-Янв-09 17:20 
>[оверквотинг удален]
>>>
>>>зачем это делать на уровне ip?
>>>по моему горазда быстрее и проще сделать это средствами named - forwarding
>>>
>>>как бонус получаем отказоустойчивость и кеширование
>>
>>А как это сделать, подскажи.
>>И снизится тогда нагрузка на основной сервак или нет?
>
>http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edit...

Так это просто настроить чтоб он все данные брал с другого сервака, так у меня так и работает, но нагрузка то в этом случае всёравно ложится на тот сервак кто на запросы отвечает.


"Как пропросить запросы на DNS"
Отправлено Pahanivo , 06-Янв-09 19:30 
>[оверквотинг удален]
>>>>как бонус получаем отказоустойчивость и кеширование
>>>
>>>А как это сделать, подскажи.
>>>И снизится тогда нагрузка на основной сервак или нет?
>>
>>http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edit...
>
>Так это просто настроить чтоб он все данные брал с другого сервака,
>так у меня так и работает, но нагрузка то в этом
>случае всёравно ложится на тот сервак кто на запросы отвечает.

Учи матчасть. Сервак грузят рекурсивные запросы, при использовании форвардинга рекурсивные запросы будет резолвить форвардер.


"Как пропросить запросы на DNS"
Отправлено Pahanivo , 06-Янв-09 19:28 
>[оверквотинг удален]
>>>нужно чтоб юзеры работали с другим серваком ДНС. Как с помощью
>>>iptables настроить переброс запросов на другой сервак, ато пока смениш всем
>>>ДНС много времени пройдёт, а надо уже сейчас снять нагрузку.
>>
>>зачем это делать на уровне ip?
>>по моему горазда быстрее и проще сделать это средствами named - forwarding
>>
>>как бонус получаем отказоустойчивость и кеширование
>
>А как это сделать, подскажи.

Читай маны по бинду на isc.org, ищи опцию forwarders.
>И снизится тогда нагрузка на основной сервак или нет?

Снизится, ибо твой сервак будет только кешировать (при условии стабильной работы форвардеров), а основная масса рекурсивных запросов ляжет на форвардеров.
Если запросов реально много, то желательно увеличить размер кеша  бинда и при необходимости добить памяти в комп.