dnsmasq (Русский)

From ArchWiki
Revision as of 16:01, 18 February 2015 by Masterslave (talk | contribs) (during synchronization with the international version)
Jump to: navigation, search

zh-CN:Dnsmasq

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

dnsmasq это DHCP и DNS сервера в одной программе. Она может быть использована для создания подключения к интернету с возможностью автоматической выдачи IP адреса и одновременным кэшированием соответствия доменов их IP адресам (DNS-кэширование). Это кэширование дает отличный прирост скорости работы с интернетом, т.к. не нужно постоянно обращаться за IP адресом к DNS-серверу - он держит эти параметры у себя в кэше. Dnsmasq легковесное приложение, разработанное для персонального использования, или как DHCP сервер для сети, в которой не более 50 компьютеров. Оно также отлично подойдет для развертывания PXE сервера.

Установка

Установите пакет dnsmasq доступный в официальных репозиториях


Настройка кэша DNS

Когда вы запускаете Dnsmasq как DHCP сервер, он также начинает прослушивать локальный интерфейс (localhost) на запросы DNS. Для запуска функции кэширования DNS отредактируйте /etc/dnsmasq.conf, добавив в него:

listen-address=127.0.0.1

Чтобы другие компьютеры локальной сети могли использовать этот сервер, можно позволить слушать локальный IP адрес:

listen-address=192.168.1.1    # Пример IP

В этом случае рекомендуется использовать статический IP адрес для локальной сети.

DNS Addresses File

Merge-arrows-2.pngThis article or section is a candidate for merging with resolv.conf.Merge-arrows-2.png

Notes: Same topic. Also note that most of this can be done also natively in /etc/resolvconf.conf using the name_servers and name_servers_append options. (Discuss in Talk:Dnsmasq (Русский)#)

После конфигурирования dnsmasq DHCP клиент will need to prepend the localhost address to the known DNS addresses in /etc/resolv.conf. This causes all queries to be sent to dnsmasq before trying to resolve them with an external DNS. After the DHCP client is configured the network will need to be restarted for changes to take effect.

resolv.conf

Одним из вариантов может быть использование конфигурации resolv.conf. Для этого просто укажите localhost первой строчкой в /etc/resolv.conf:

/etc/resolv.conf
nameserver 127.0.0.1
# другие сервера DNS
...

Теперь все запросы DNS будут перенаправляться на обработку к dnsmasq. Внешние сервера будут использоваться только тогда, когда dnsmasq не удастся выполнить запрос. dhcpcd может переписать стандартный /etc/resolv.conf. Если используется DHCP, то хорошей практикой будет защита /etc/resolv.conf. Для этого добавьте nohook resolv.conf в конфигурационный файл dhcpcd:

/etc/dhcpcd.conf
...
nohook resolv.conf

Кроме того, можно защитить resolv.conf, запретив любую его модификацию:

# chattr +i /etc/resolv.conf
Более трех серверов DNS
В Linux имеется ограничение способности самостоятельной обрабатки DNS запросов, которое состоит в том, что может быть не более трех серверов DNS используемых в resolv.conf. В качестве обходного пути можно указать только localhost в resolv.conf, а затем создать отдельный resolv-file для используемых внешних серверов DNS. Сначала создайте новый resolv файл для dnsmasq:
/etc/resolv.dnsmasq.conf
# например, DNS сервера от Google
nameserver 8.8.8.8
nameserver 8.8.4.4

Затем отредактируйте /etc/dnsmasq.conf для использования нового resolv файла:

/etc/dnsmasq.conf
...
resolv-file=/etc/resolv.dnsmasq.conf
...

dhcpcd

dhcpcd может сам добавлять или удалять DNS сервера в /etc/resolv.conf создавая или изменяя /etc/resolv.conf.head и /etc/resolv.conf.tail файлы соответственно:

echo "nameserver 127.0.0.1" > /etc/resolv.conf.head

dhclient

Для dhclient добавьте или раскомментируйте в /etc/dhcp/dhclient.conf:

prepend domain-name-servers 127.0.0.1;

NetworkManager

NetworkManager has the ability to start dnsmasq from its configuration file. Add the option dns=dnsmasq to NetworkManager.conf in the [main] section then disable the dnsmasq.service from being loaded by systemd:

/etc/NetworkManager/NetworkManager.conf
[main]
plugins=keyfile
dns=dnsmasq

Custom configurations can be created for dnsmasq by creating configuration files in /etc/NetworkManager/dnsmasq.d/. For example, to change the size of the DNS cache (which is stored in RAM):

/etc/NetworkManager/dnsmasq.d/cache
cache-size=1000

When dnsmasq is started by NetworkManager, the config file in this directory is used instead of the default config file.

Tip: This method can allow you to enable custom DNS settings on particular domains. For instance: server=/example1.com/exemple2.com/xx.xxx.xxx.x change the first DNS address to xx.xxx.xxx.xx while browsing only the following websites example1.com, example2.com. This method is preferred to a global DNS configuration when using particular DNS nameservers which lack of speed, stability, privacy and security.

Other methods

Another option is in NetworkManagers' settings (usually by right-clicking the applet) and entering settings manually. Setting up will depending on the type of front-end used; the process usually involves right-clicking on the applet, editing (or creating) a profile, and then choosing DHCP type as 'Automatic (specify addresses).' The DNS addresses will need to be entered and are usually in this form: 127.0.0.1, DNS-server-one, ....

Установка сервера DHCP

По умолчанию функционал DHCP сервера деактивирован. Если вы хотите использовать его, вы должны включить его в (/etc/dnsmasq.conf). Наиболее важные параметры:

# Only listen to router LAN NIC, also opens up tcp/udp port 53 to localhost
# and udp port 67 to world:
interface=<LAN-NIC>

# dnsmasq will open tcp/udp port 53 and udp port 67 to world to help with
# dynamic interfaces (assigning dynamic ips). Dnsmasq will discard world
# requests to them, but the paranoid might like to close them and let the 
# kernel handle them:
bind-interfaces

# Задать динамический диапазон IP-адресов доступных для локальной сети ПК

dhcp-range=192.168.111.50,192.168.111.100,12h

# Если требуется выделить статический IP-адрес на основании NIC MAC-адреса компьютера локальной сети:
dhcp-host=aa:bb:cc:dd:ee:ff,192.168.111.50

If you choose not to bind interfaces the domain port will need to be allowed in /etc/hosts.allow:

domain ALL : ALLOW

Запуск в качестве службы

Для старта dnsmasq запустите службу dnsmasq.service

Чтобы убедиться, что dnsmasq корректно запустился, проверьте системный журнал:

$ journalctl -u dnsmasq

Сеть также следует перезапустить, чтобы клиент DHCP могли получить новый /etc/resolv.conf.

Тестирование

Тестирование DHCP сервера

Клиентом из сети, с установленной и запущенной сетью. Установите подключение к машине с запущенным Dnsmasq.

Тестирование кэширования DNS

Чтобы протестировать скорость ответа на запрос ресурса, к которому ещё не обращались через Dnsmasq (dig- утилита из пакета dnsutils):

dig archlinux.org | grep "Query time"

При повторном запуске команды будет использоваться кэшированный DNS IP , что значительно ускорит обработку запроса, если Dnsmasq настроен правильно:

$ dig archlinux.org | grep "Query time"
;; Query time: 18 msec
$ dig archlinux.org | grep "Query time"
;; Query time: 2 msec

Советы и рекомендации

Предотвращение перенаправления OpenDNS запросов Google

Чтобы предотвратить перенаправление OpenDNS запросов Google через Ваш сервер, добавте в /etc/dnsmasq.conf:

server=/www.google.com/<ISP DNS IP> //IP адрес сервера DNS провайдера

Просмотр хостов-арендаторов

$ cat /var/lib/misc/dnsmasq.leases

Adding a custom domain

It is possible to add a custom domain to hosts in your (local) network:

local=/home.lan/
domain=home.lan

In this example it is possible to ping a host/device (e.g. defined in your hosts file) as hostname.home.lan.

Uncomment expand-hosts to add the custom domain to hosts entries:

expand-hosts

Without this setting, you'll have to add the domain to entries of /etc/hosts.