MyTetra Share
Делитесь знаниями!
dnsmasq
Время создания: 25.04.2013 22:45
Раздел: root - Linux - DNS
Запись: Yurons/mytetra/master/base/1366919102i1d6qihgia/text.html на raw.github.com

Setup dnsmasq on Fedora as DNS DHCP and tftp for PXE

 

This description shamelessly take from the dnsmasq home page.

 

The dnsmasq DHCP server supports static address assignments and multiple networks. It automatically sends a sensible default set of DHCP options, and can be configured to send any desired set of DHCP options, including vendor-encapsulated options. It includes a secure, read-only, TFTP server to allow net/PXE boot of DHCP hosts and also supports BOOTP.

 

 

Dnsmasq supports IPv6 for DNS and TFTP, but not DHCP. Dnsmasq accepts DNS queries and either answers them from a small, local, cache or forwards them to a real, recursive, DNS server. It loads the contents of /etc/hosts so that local hostnames which do not appear in the global DNS can be resolved and also answers DNS queries for DHCP configured hosts.

 

Installing dnsmasq is just a case of using yum.

Installation

sudo yum install dnsmasq

 

we need to make sure that the dnsmasq service will start at boot time, here we check it and then set it.

sudo chkconfig dnsmasq --list

sudo chkconfig dnsmasq on

 

Looking at the file /etc/dnsmasq.conf first. The lines are listed are those that I changed from their defaults. Just uncomment and amend them as necessary. (Remove the '#' from the beginning of the line).

 

/etc/dnsmasq.conf

Edit /etc/dnsmasq.conf

domain-needed

bogus-priv

no-resolv

no-poll

server=208.67.222.222

server=208.67.220.220

local=/example.com/

address=/doubleclick.net/127.0.0.1

no-hosts

addn-hosts=/etc/dnsmasq.d/static/hosts.conf

expand-hosts

domain=example.com

dhcp-range=192.168.0.20,192.168.0.50,72h

dhcp-option=option:router,192.168.0.1

dhcp-option=option:ntp-server,192.168.0.5

dhcp-option=19,0 # ip-forwarding off

dhcp-option=44,192.168.0.5 # set netbios-over-TCP/IP aka WINS

dhcp-option=45,192.168.0.5 # netbios datagram distribution server

dhcp-option=46,8

 

What these lines will do for you.

domain-needed This tells dnsmasq to never pass short names to the upstream DNS servers. If the name is not in the local /etc/hosts file then "not found" will be returned.

bogus-priv All reverse IP (192.168.x.x) lookups that are not found in /etc/hosts will be returned as "no such domain" and not forwarded to the upstream servers.

no-resolv Do not read resolv.conf to find the servers where to lookup dns.

no-poll Do not poll resolv.conf for changes

server=208.67.222.222

 

server=208.67.220.220 Set one or more DNS servers to use when addresses are not local. These are open DNS servers.

local=/example.com/ Our local domain, queries in these domains are answered from /etc/hosts or the static-hosts files.

address=/doubleclick.net/127.0.0.1 Use this force an address for the specified domains. e.g to block adverts force doubleclck.net to localhost

no-hosts This options stops dnsmasq using the local /etc/hosts file as a source for lookups

.

addn-hosts=/etc/dnsmasq.d/static/hosts.conf Force dnsmasq to use this file for lookups. It is in the same format as /etc/hosts.

expand_hosts So we can see our local hosts via our home domain without having to repeatedly specify the domain in our /etc/hosts file.

domain This is your local domain name. It will tell the DHCP server which host to give out IP addresses for.

dhcp-range This is the range of IPs that DHCP will serve: 192.168.0.20 to 192.168.0.50, with a lease time of 72 hours. The lease time is how long that IP will be linked to a host. (All most )

dhcp-option=option:router,192.168.0.1 When a host is requesting an IP address via DHCP also tell it the gateway to use.

dhcp-option=option:ntp-server,192.168.0.5 When a host is requesting an IP address via DHCP also tell it the NTP to use.

Starting and stopping the service

sudo service dnsmasq start

sudo service dnsmasq stop

sudo service dnsmasq restart

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.59
Яндекс индекс цитирования