MyTetra Share
Делитесь знаниями!
http://ventusaqua.ru/ светодиодные лампы светильники для аквариума.
dnsmasq how-to
25.04.2013
22:44
Раздел: root - Linux - DNS

How-to`s — Настройка dnsmasq для одновременной работы с DNS провайдера и локальной сети

 

Дано:Несколько серверов имен провайдера, полученных с помощью dhcp.

Локальный сервер имен для внутренних доменов.

Машина с Ubuntu/Debian (Проверялось на Ubuntu 10.04).

Для решения будем использовать dnsmasq и resolvconf.

dnsmasq - это легкий кэширующий DNS, DHCP сервер,

а resolvconf - пакет для управления информацией о серверах имён.

Для начала установим пакеты:

1 ~$ sudo apt-get install dnsmasq resolvconf

 

 

 

В Ubuntu 10.04 пакет resolvconf не требует конфигурации и работает из коробки.

А dnsmasq свой адрес (127.0.0.1) установит сам после перезагрузки.

 

Далее настроим dnsmasq.

 

Сохраним конфигурационный файл по умолчанию и создадим новый с нужными настройками.

~$ sudo -i

~# mv /etc/dnsmasq.conf /etc/dnsmasq.conf.origin

~# cat > /etc/dnsmasq.conf << EOF

# слушать только loopback

interface=lo

bind-interfaces

# локальный домен для автоматической подстановки в случае неполного доменного имени

domain=example.net

# сервера локальной сети для домена example.net

server=/example.net/192.168.0.1

server=/0.168.192.in-addr.arpa/192.168.0.1

# логируем запросы в файл /var/log/dnsmasq.log

log-queries

log-facility=/var/log/dnsmasq.log

EOF

 

 

 

 

Настройки закончены. Теперь лучше перезагрузиться, чтобы перезапустились сервисы и

провайдер, по новой, нам выдал сервера имен.

 

Все, теперь запросы для локальных доменов будут уходить на адрес 192.168.0.1

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

 

Другой вариант, eсли вместо локальной сети есть vpn и свои DNS,

тогда файл конфигурации будет такой:

~# cat > /etc/dnsmasq.conf << EOF

# слушать только loopback

interface=lo

bind-interfaces

# запрашивать все доступные сервера

all-servers

# запрашивать строго в порядке следования

strict-order

# логируем запросы в файл /var/log/dnsmasq.log

log-queries

log-facility=/var/log/dnsmasq.log

EOF

 

 

 

Порядок следования серверов для интерфесов задаетcя resolvconf в /etc/resolvconf/interface-order

 

 

 

Пояснения к файлу настроек dnsmasq (по умолчанию), в части касающейся DNS:

# Файл настроек dnsmasq.

#

# Не пересылать обычные имена (без завершающей точки или доменного имени)

#domain-needed

# Не пересылать адреса из не маршрутизируемых сетей (192.168.0.0/16, 10.0.0.0/8 и т.п.)

#bogus-priv

# Фильтровать все бесполезные запросы windows (это блокирует все SRV запросы Kerberos, SIP, XMMP)

#filterwin2k

 

# Изменить местонахождение файла /etc/resolv.conf

#resolv-file=

# Опрашивать для каждого запроса каждый доступный сервер строго в порядке следования в файле /etc/resolv.conf

#strict-order

# Игнорировать сервера в файле /etc/resolv.conf

#no-resolv

# Не отслеживать изменения в списке серверов (в том числе в файле /etc/resolv.conf)

#no-poll

 

# Добавить сервер имен для домена

#server=/localnet/192.168.0.1

# Добавить сервер имен для запроса домена по адресу

#server=/3.168.192.in-addr.arpa/10.1.2.3

 

# Добавить локальный домен. Информация об адресе берется из /etc/hosts или DHCP

#local=/localnet/

 

# Добавить определенный адрес для домена (так же как и /etc/hosts)

#address=/doubleclick.net/127.0.0.1

# Допустимы и ipv6 адреса

#address=/www.thekelleys.org.uk/fe80::20d:60ff:fe36:f83

 

# Контроль запросов по интерфейсам. Запрос к серверу 10.1.2.3 будет исходить с интерфейса eth1

# --server=10.1.2.3@eth1

# или установить исходящий адрес и порт для запроса сервера 10.1.2.3

# --server=10.1.2.3@192.168.1.1#55

 

# Изменения пользователя и группы под которыми работает dnsmasq

#user=

#group=

 

# Определение интерфейсов для прослушивания запросов (lo, eth0, ppp0)

# Для определения нескольких интерфесов повторить interface=

#interface=

# Исключение интерфейсов для прослушивания

#except-interface=

# Определить точный адрес для прослушивания

#listen-address=

# Не принимать DHCP запросы с интерфейса

#no-dhcp-interface=

 

# Биндить сокет только на указанных интерфейсах

#bind-interfaces

 

# Не использовать /etc/hosts

#no-hosts

# Дополнительный файл с хостами

#addn-hosts=/etc/banner_add_hosts

 

# Добавлять определенный ниже домен также к хостам в /etc/hosts

#expand-hosts

 

# Локальный домен для автоматической подстановки в случае неполного доменного имени

#domain=thekelleys.org.uk

 

# Установка разных доменов для определенных подсетей

#domain=wireless.thekelleys.org.uk,192.168.2.0/24

# Установка разных доменов для определенных адресов

#domain=reserved.thekelleys.org.uk,192.68.3.100,192.168.3.200

 

# Размер кэша

#cache-size=150

 

# Не кэшировать негативные ответы от серверов

#no-negcache

 

# Установить время жизни кэша запросов к файлу /etc/hosts и DHCP

#local-ttl=

 

# Для возвращения корректного ответа NXDOMAIN от запросов к незарегистрированным .com and .net хостам

#bogus-nxdomain=64.94.110.11

 

# Исправление результата ответа от серверов (определение псевдонима адреса)

#alias=1.2.3.4,5.6.7.8

# Определение карты ответов 1.2.3.x до 5.6.7.x по маске 255.255.255.0

#alias=1.2.3.0,5.6.7.0,255.255.255.0

# Еще вариант 192.168.0.10->192.168.0.40 до 10.0.0.10->10.0.0.40

#alias=192.168.0.10-192.168.0.40,10.0.0.0,255.255.255.0

 

# Возвращает запись MX для домена "maildomain.com" с хостом servermachine.com и весом 50

#mx-host=maildomain.com,servermachine.com,50

 

# Установка хоста по умолчанию для записей MX при использовании опции localmx

#mx-target=servermachine.com

 

# Возвращает запись MX с хостом mx-target для всех локальных машин

#localmx

 

# Возвращает в записи MX себя для всех локальных машин

#selfmx

 

# Поля SRV записи: <name>,<target>,<port>,<priority>,<weight>

# Примеры:

#srv-host=_ldap._tcp.example.com,ldapserver.example.com,389

#srv-host=_ldap._tcp,ldapserver.example.com,389

#srv-host=_ldap._tcp.example.com,ldapserver.example.com,389,1

#srv-host=_ldap._tcp.example.com,ldapserver.example.com,389,2

#srv-host=_ldap._tcp.example.com

#ptr-record=_http._tcp.dns-sd-services,"New Employee Page._http._tcp.dns-sd-services"

#txt-record=example.com,"v=spf1 a -all"

#txt-record=_http._tcp.example.com,name=value,paper=A4

 

# Определения псевдонимов для локальных хостов (из /etc/hosts или DHCP)

# Пример: bert псевдоним bertrand

#cname=bertand,bert

 

# Логирование для отладки

#log-queries

 

# Логирование дополнительной информации о DHCP транзакциях

#log-dhcp

 

# Включение дополнительных конфигурационных файлов

#conf-file=/etc/dnsmasq.more.conf

#conf-dir=/etc/dnsmasq.d

 

 

 

 

Тэги: dns dnsmasq resolvconf ubuntu

+

15

-

Похожие Поделиться

Username 17.05.2010 19:30 # +

1

-

Неистово плюсую, добавляю в мемориз и реквестирую редактирование поста для вообще идиотов.

jerromo 17.05.2010 19:35 # ↑ + 0

-

А по конкретнее? что-то непонятно?

Username 18.05.2010 10:02 # ↑ + 0

-

Не. Просто чем разжеванней материал, тем он ценее в итоге. ЭЭээ порог вхождения в статью меньше

lockie 17.05.2010 19:57 # ↑ + 0

-

> редактирование поста для вообще идиотов

Тоже чёт не понял.

wat_che 17.05.2010 20:05 # + 0

-

хорошая шняга, только у dnsmasq есть 1 минус, при перезагрузке кеш обнуляется. Из-за этого пользовался pndns, но его глюки достали (временами переставал резольвить локальные адреса, то просто тупо вис)поэтому вернулся назад на dnsmasq

jerromo 17.05.2010 21:28 # ↑ +

1

-

Призрачный минус. Время жизни доменной записи как правило 2-3 часа (в основном), поэтому они в кэше все равно умирают.

wat_che 17.05.2010 22:37 # ↑ + 0

-

Время жизни доменной записи

где?

jerromo 17.05.2010 22:43 # ↑ +

2

-

в кэшах NS серверов. Прописана в SOA доменов. wiki

wat_che 17.05.2010 23:16 # ↑ + 0

-

а причем тут кеши ns серверов ? Насколько я понимаю принцип работы локального кеширующего днс в том, что он сначала ищет запись у себя, а если не находит отправляется искать её выше по иерархии. Или я ошибаюсь?

jerromo 17.05.2010 23:31 # ↑ +

2

-

нет все правильно. Только надо понимать, что кэш dnsmasq ничем не отличается от кэша вышестоящих серверов. В его кэше записи также умирают по истечении TTL

wat_che 17.05.2010 23:54 # ↑ + 0

-

# Установить время жизни кэша запросов к файлу /etc/hosts и DHCP

#local-ttl=

 

вот тут -то эти плюшки и настраиваются :)

jerromo 18.05.2010 00:08 # ↑ +

1

-

неа. тут настраиваются плюшки только для адресов прописанных в файле /etc/hosts и полученных от встроенного DHCP. И какой смысл кэшировать записи находящиеся и так локально?

TiGR 17.05.2010 23:33 # + 0

-

Вопрос. У меня такая ситуация - есть много локальных проектов, они все в зоне .dev, то есть, любой адрес, оканчивающийся на .dev отправляется апачу, который сам по нему определяет путь до сайта (то есть для создания нового сайта не нужны вообще никакие правки httpd.conf, используется mass hosting).

 

Так вот, я для этого использовал bind9, а можно ли такую же задачу решить этими инструментами (то есть резолвить все *.dev как 127.0.0.1)?

jerromo 17.05.2010 23:40 # ↑ +

2

-

Можно. В конфиге прописать:

address=/dev/127.0.0.1

TiGR 18.05.2010 22:29 # ↑ + 0

-

Спасибо, всё настроил. Можно bind не ставить. :)

dinix 18.05.2010 08:58 # +

1

-

jerromo спасибо! второй пример с указанием конкретных dns серверов это то что надо. Все заработало как и хотел.

axule 18.05.2010 11:31 # + 0

-

что то у меня с утра плохо думается сегодня, разжуйте поплиз... =)

в случае использования bind на локальной машине все ясно:

в /etc/resolv.conf прописываем nameserver 127.0.0.1 поднимаем bind на loopbak'e и в конфигурации bind указываем forvarders сервера у которых bind спрашивает то чего не знает.

А тут я что то запутался dnsmasq смотрит этот самый /etc/resolv.conf в котором те самые сервера у которых он спрашивает, а где же тогда говорить системе что ей надо искать DNS на loopback интерфейсе?

wat_che 18.05.2010 12:45 # ↑ + 0

-

DNS-сервер на интерфейсе, например eth0, указывается как 127.0.0.1. Как-то так наверное.

jerromo 18.05.2010 13:53 # ↑ + 0

-

тут описанную картину меняет пакет resolvconf. Это именно он разруливает ситуацию с разными dns с разных интерфейсов. Во первых /etc/resolv.conf перестает быть файлом и становится симлинком на автоматом генерируемый файл. Его теперь руками править нельзя. Во вторых dnsmasq, как впрочем и bind, умеет сообщать resolvconf свой адрес и интерфейс (типа 127.0.0.1, после чего resolv.conf содержит только его). resolvconf все полученные адреса серверов по интерфейсам хранит в /etc/resolvconf/run/interface/, и вызывает скрипты /etc/resolvconf/update.d если информация обновилась. Все заинтересованные, в том числе dnsmasq и bind, имеют там свои обработчики и забирают себе адреса. И да bind тоже динамически добавляет сервера в forwarders {} у себя в конфиге (/var/run/bind/named.options).

Так что /etc/resolv.conf трогать не надо, кому надо тот адреса DNS узнает сам. А если надо прописать свои сервера руками, тогда либо в конфиги dnsmasq, bind, etc, либо в /etc/resolvconf/resolv.conf.d/{base|head|tail}.

PS. Получилось несколько сумбурно, но надеюсь понятно :)

TiGR 18.05.2010 14:45 # ↑ + 0

-

А оно нормально дружит с Network Manager? Он ведь прямо в resolv.conf пишет.

jerromo 18.05.2010 15:52 # ↑ + 0

-

я Network Manager не использую, поэтому точно сказать не могу. но скорее всего тут либо Network Manager либо resolvconf. Они по сути занимаются одним и тем же в плане DNS, т.е. разруливают разные сервера с разных интерфейсов. так что конфликт неизбежен.

jerromo 18.05.2010 16:09 # ↑ + 0

-

сейчас проверил на Ubuntu 10.04, работает нормально. /etc/resolv.conf на месте, а свои записи он поместил в /etc/resolvconf/run/interface/NetworkManager.

Так же в этом разделе:
← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования