# dnsmasq (Русский)

Состояние перевода: На этой странице представлен перевод статьи dnsmasq. Дата последней синхронизации: 19 июля 2015‎‎. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Эта страница нуждается в сопроводителе

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков 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

This article or section is a candidate for merging with resolv.conf.

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 клиенту нужно будет дописать локальный адрес в вершину списка известных 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 может переписать стандартный `/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 можно сконфигурировать так, чтобы он запускал dnsmasq. Добавьте опцию `dns=dnsmasq` в секцию `[main]` файла `NetworkManager.conf`, затем выключите `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). 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 включите и запустите службу

`# systemctl enable dnsmasq.service`

`# systemctl start dnsmasq.service`

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

    $ journalctl -u dnsmasq

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

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

### Кэширования DNS

Чтобы протестировать скорость ответа на запрос ресурса, к которому ещё не обращались через Dnsmasq (dig- утилита из пакета 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.

Categories:

- Русский
- Networking (Русский)

Hidden category:

- Pages or sections flagged with Template:Merge