arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
264 lines (164 loc) • 15.6 kB
Markdown
**Состояние перевода:** На этой странице представлен перевод статьи [dnsmasq](/index.php/Dnsmasq "Dnsmasq"). Дата последней синхронизации: 19 июля 2015. Вы можете [помочь](/index.php/ArchWiki_Translation_Team_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "ArchWiki Translation Team (Русский)") синхронизировать перевод, если в английской версии произошли [изменения](https://wiki.archlinux.org/index.php?title=Dnsmasq&diff=0&oldid=383170).
**dnsmasq** это DHCP и DNS сервера в одной программе. Она может быть использована для создания подключения к интернету с возможностью автоматической выдачи IP адреса и одновременным кэшированием соответствия доменов их IP адресам (DNS-кэширование). Это кэширование дает отличный прирост скорости работы с интернетом, т.к. не нужно постоянно обращаться за IP адресом к DNS-серверу - он держит эти параметры у себя в кэше. Dnsmasq легковесное приложение, разработанное для персонального использования, или как DHCP сервер для сети, в которой не более 50 компьютеров. Оно также отлично подойдет для развертывания [PXE](/index.php/PXE "PXE") сервера.
## Contents
* [1 Установка](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0)
* [2 Настройка кэша DNS](#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0_.D0.BA.D1.8D.D1.88.D0.B0_DNS)
* [2.1 Файл адресов DNS](#.D0.A4.D0.B0.D0.B9.D0.BB_.D0.B0.D0.B4.D1.80.D0.B5.D1.81.D0.BE.D0.B2_DNS)
* [2.1.1 resolv.conf](#resolv.conf)
* [2.1.1.1 Больше трех серверов DNS](#.D0.91.D0.BE.D0.BB.D1.8C.D1.88.D0.B5_.D1.82.D1.80.D0.B5.D1.85_.D1.81.D0.B5.D1.80.D0.B2.D0.B5.D1.80.D0.BE.D0.B2_DNS)
* [2.2 dhcpcd](#dhcpcd)
* [2.3 dhclient](#dhclient)
* [2.4 NetworkManager](#NetworkManager)
* [2.4.1 IPv6](#IPv6)
* [2.4.2 Другие методы](#.D0.94.D1.80.D1.83.D0.B3.D0.B8.D0.B5_.D0.BC.D0.B5.D1.82.D0.BE.D0.B4.D1.8B)
* [3 Установка сервера DHCP](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0_.D1.81.D0.B5.D1.80.D0.B2.D0.B5.D1.80.D0.B0_DHCP)
* [4 Запуск в качестве службы](#.D0.97.D0.B0.D0.BF.D1.83.D1.81.D0.BA_.D0.B2_.D0.BA.D0.B0.D1.87.D0.B5.D1.81.D1.82.D0.B2.D0.B5_.D1.81.D0.BB.D1.83.D0.B6.D0.B1.D1.8B)
* [5 Тестирование](#.D0.A2.D0.B5.D1.81.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5)
* [5.1 Кэширования DNS](#.D0.9A.D1.8D.D1.88.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F_DNS)
* [5.2 DHCP сервер](#DHCP_.D1.81.D0.B5.D1.80.D0.B2.D0.B5.D1.80)
* [6 Советы и рекомендации](#.D0.A1.D0.BE.D0.B2.D0.B5.D1.82.D1.8B_.D0.B8_.D1.80.D0.B5.D0.BA.D0.BE.D0.BC.D0.B5.D0.BD.D0.B4.D0.B0.D1.86.D0.B8.D0.B8)
* [6.1 Предотвращение перенаправления OpenDNS запросов Google](#.D0.9F.D1.80.D0.B5.D0.B4.D0.BE.D1.82.D0.B2.D1.80.D0.B0.D1.89.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D0.B5.D1.80.D0.B5.D0.BD.D0.B0.D0.BF.D1.80.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D1.8F_OpenDNS_.D0.B7.D0.B0.D0.BF.D1.80.D0.BE.D1.81.D0.BE.D0.B2_Google)
* [6.2 Просмотр хостов-арендаторов](#.D0.9F.D1.80.D0.BE.D1.81.D0.BC.D0.BE.D1.82.D1.80_.D1.85.D0.BE.D1.81.D1.82.D0.BE.D0.B2-.D0.B0.D1.80.D0.B5.D0.BD.D0.B4.D0.B0.D1.82.D0.BE.D1.80.D0.BE.D0.B2)
* [6.3 Добавление пользовательского домена](#.D0.94.D0.BE.D0.B1.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.BE.D0.B3.D0.BE_.D0.B4.D0.BE.D0.BC.D0.B5.D0.BD.D0.B0)
## Установка
[Установите](/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B5 "Установите") [dnsmasq](https://www.archlinux.org/packages/?name=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
После конфигурирования dnsmasq DHCP клиенту нужно будет дописать локальный адрес в вершину списка известных DNS адресов `/etc/resolv.conf`. Это обеспечит отправку всех запросов на dnsmasq прежде попыток разрешить их на внешнем DNS. После конфигурирования DHCP клиента сетевые демоны должны быть перезапущены чтобы изменения вступили в силу.
#### resolv.conf
Одним из вариантов может быть использование конфигурации `resolv.conf`. Для этого просто укажите localhost первой строчкой в `/etc/resolv.conf`:
`/etc/resolv.conf`
```
nameserver 127.0.0.1
# другие сервера DNS
...
```
Теперь все запросы DNS будут перенаправляться на обработку к dnsmasq. Внешние сервера будут использоваться только тогда, когда dnsmasq не удастся выполнить запрос. [dhcpcd](https://www.archlinux.org/packages/?name=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](/index.php/Dhcpcd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "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](https://www.archlinux.org/packages/?name=dhclient) добавьте или раскомментируйте в `/etc/dhcp/dhclient.conf`:
```
prepend domain-name-servers 127.0.0.1;
```
### NetworkManager
[NetworkManager](/index.php/NetworkManager_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "NetworkManager (Русский)") можно сконфигурировать так, чтобы он запускал *dnsmasq*. Добавьте опцию `dns=dnsmasq` в секцию `[main]` файла `NetworkManager.conf`, затем [выключите](/index.php/%D0%92%D1%8B%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D0%B5 "Выключите") `dnsmasq.service`:
`/etc/NetworkManager/NetworkManager.conf`
```
[main]
plugins=keyfile
dns=dnsmasq
```
Собственные настройки *dnsmasq* желательно хранить в `/etc/NetworkManager/dnsmasq.d/`. Например, чтобы изменить размер кэша DNS (который хранится в RAM):
`/etc/NetworkManager/dnsmasq.d/cache` `cache-size=1000`
Когда *dnsmasq* запускается `NetworkManager`, настройки в этом каталоге приоритетней стандартного файла конфигурации.
**Совет:** 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.
#### IPv6
Enabling `dnsmasq` in NetworkManager may break IPv6-only DNS lookups (i.e. `dig -6 [hostname]`) which would otherwise work. In order to resolve this, creating the following file will configure *dnsmasq* to also listen to the IPv6 loopback:
`/etc/NetworkManager/dnsmasq.d/ipv6_listen.conf` `listen-address=::1`
In addition, `dnsmasq` also does not prioritize upstream IPv6 DNS. Unfortunately NetworkManager does not do this ([Ubuntu Bug](https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/936712)). A workaround would be to disable IPv4 DNS in the NetworkManager config, assuming one exists
#### Другие методы
Другим вариантом является использование NetworkManager, настроенного вручную. Доступ к настройкам зависит от используемого фронтэнда; как правило, вызываемые по нажатию правой кнопки мыши апплета, редактирование (или создание) профиля, затем выбрав 'DHCP Автоматический' (указать адрес). Адреса DNS серверов должны быть введены так:
```
`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 включите и [запустите](/index.php/%D0%97%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D0%B5 "Запустите") службу
`# systemctl enable dnsmasq.service`
`# systemctl start dnsmasq.service`
Чтобы убедиться, что dnsmasq корректно запустился, проверьте системный журнал:
`$ journalctl -u dnsmasq`
Сеть также следует перезапустить, чтобы клиенты DHCP могли получить новый `/etc/resolv.conf`.
## Тестирование
### Кэширования DNS
Чтобы протестировать скорость ответа на запрос ресурса, к которому ещё не обращались через Dnsmasq (*dig*- утилита из пакета [bind-tools](https://www.archlinux.org/packages/?name=bind-tools)):
```
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
```
### DHCP сервер
Проверить можно на клиенте, находящимся в том же сегменте сети, в котором развернут сервер Dnsmasq.
## Советы и рекомендации
### Предотвращение перенаправления OpenDNS запросов Google
Чтобы предотвратить перенаправление OpenDNS запросов Google через Ваш сервер, добавте в `/etc/dnsmasq.conf`:
```
server=/www.google.com/<ISP DNS IP> //IP адрес сервера DNS провайдера
```
### Просмотр хостов-арендаторов
`$ cat /var/lib/misc/dnsmasq.leases`
### Добавление пользовательского домена
Можно добавить пользовательский домен к узлам в вашей (локальной) сети:
```
local=/home.lan/
domain=home.lan
```
что позволит пинговать хост/устройство (например указанное в вашем файле hosts ) как `hostname.home.lan`.
Раскомментируйте `expand-hosts` для авто-дополнения имен хостов, в которых не указан домен:
```
expand-hosts
```
Если эту функцию не использовать,то придется добавлять доменное имя к записям в /etc/hosts.