UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

264 lines (164 loc) 15.6 kB
**Состояние перевода:** На этой странице представлен перевод статьи [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.