Пряморукий dns: делаем правильно

DHCP 服务器设置

dnsmasq默认关闭DHCP功能,如果该主机需要为局域网中的其他设备提供IP和路由,应该对dnsmasq 配置文件()必要的配置如下:

# Only listen to routers' LAN NIC.  Doing so 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

# Dynamic range of IPs to make available to LAN pc
dhcp-range=192.168.111.50,192.168.111.100,12h

# If you’d like to have dnsmasq assign static IPs, bind the LAN computer's
# NIC MAC address:
dhcp-host=aa:bb:cc:dd:ee:ff,192.168.111.50

Возможности

Dnsmasq поддерживает DNS, TFTP, PXE, router advertisements и сервисы DHCP. Он является гибкой утилитой управления сетью для небольших и средних по размеру сетей.

Сервисы DNS

Для того, чтобы предоставить (только) сервисы DNS, сначала определите upstream nameserver. Если это тот же сервер, который указан в файле /etc/resolv.conf, то не требуется предпринимать никаких дополнительных шагов. В противном случае, укажите dnsmasq нужный файл resolv.conf с помощью параметра командной строки (). Синтаксис тот же, что и в файле /etc/resolv.conf, однако dnsmasq читает только определения nameserver.

Например:

Затем укажите этот файл dnsmasq с помощью файла конфигурации:

Файл Настройка пользовательского файла resolv

resolv-file=/etc/dnsmasq.conf.resolv
www-bytemark-v4v6.gentoo.org.
89.16.167.134

DNSSEC

Dnsmasq может проверять достоверность данных DNSSEC во время передачи данных. Это можно реализовать, добавив следующие строки в файл конфигурации:

Файл Включение DNSSEC

# Настройка DNSSEC
dnssec
trust-anchor=.,19036,8,2,49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5
dnssec-check-unsigned

Сервисы DHCP

Для того, чтобы включить сервисы DHCP dnsmasq, используйте параметр настройки .

Например, для того, чтобы включить настройку адреса IPv6 посредством router advertisement (RA) с бесконечной арендой, и настройку адреса IPv4 также с бесконечной арендой:

Файл Включение аренды IPv6 и IPv4

dhcp-range=2001:db8:81:e2::,ra-only,infinite
dhcp-range=192.168.100.100,192.168.100.149,infinite

Существует возможность использования статических определений для известных хостов. Это можно реализовать либо посредством основного файла конфигурации (параметр ), либо посредством отдельного файла. Если используется отдельный файл, укажите его dnsmasq с помощью параметра командной строки . Преимущество последнего варианта в том, что для повторного считывания записей достаточно послать сигнал SIGHUP (или перезагрузить сервис), тогда как при использовании определений в файле конфигурации необходимо полностью перезапустить сервис.

Для получения более подробной информации о синтаксисе параметра , обратитесь к странице руководства или к файлу конфигурации, поскольку синтаксис этого параметра весьма пространен.

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

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

# 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 :

domain ALL : ALLOW

Использование

Этот раздел содержит описание различных вариантов использования (обслуживания и практических задач) сервиса dnsmasq.

Сброс аренды

Клиенты, у которых был обновлен сетевой интерфейс, что привело к изменению MAC-адреса, могут не сразу получить нужный IP-адрес. Это происходит оттого, что сервис dnsmasq предоставил этот IP-адрес старому MAC-адресу и ожидает истечения аренды этого адреса, прежде чем присвоить новый.

Сервис dnsmasq хранит свои аренды в файле /var/lib/misc/dnsmasq.leases. Если требуется быстрее удалить аренду, остановите сервис dnsmasq, удалите аренду из файла dnsmasq.leases и снова запустите сервис.

Перезагрузка неосновных настроек конфигурации

В дополнение к файлу dnsmasq.conf, сервис dnsmasq может использовать внешние определения для следующих сервисов:

  • настройки конфигурации хостов DHCP (посредством параметра командной строки )
  • параметры DHCP (посредством параметра командной строки )

После изменения этих файлов сигнал SIGHUP заставит dnsmasq перезагрузить эти настройки.

ЗаметкаФайлы resolv.conf по умолчанию опрашиваются dnsmasq; изменения в этих файлах вступают в силу автоматически, если не указан параметр командной строки () или параметр настройки .

Настройка dnsmasq как DNS

DNS — это второй базовый сервис, без которого в локальных сетях не обойтись, если, конечно, вы не планируете обращаться к компьютерам в локальной сети и Интернете по IP-адресам, в чем я сильно сомневаюсь. Dnsmasq работает как кэширующий DNS-сервер. У него есть одна полезная особенность. Он умеет использовать файл /etc/hosts как источник информации для DNS, что может быть очень полезно. Например, если есть какой-то локальный сервис, с которым работают пользователи в локальной сети, они могут к нему обращаться по имени, а не по адресу, адрес будет запрашиваться у DNS-сервера, который будет возвращать IP-адрес, к которому необходимо обращаться.

Настройка dnsmasq как DNS по сути не отличается от настройки как DHCP, поскольку все настройки хранятся в том же файле — /etc/dnsmasq.conf

Самое первое, что необходимо, — это название домена

Для определенной подсети можно указать отдельное имя домена:

И точно так же можно указать имя домена для интервала адресов:

Основная функция DNS-сервера — это преобразование доменных имен в IP-адреса и наоборот, но DNS-серверов даже в локальной сети может быть несколько. Поэтому может потребоваться указать для определенных доменов адреса DNS-серверов, на которые должны отравляться запросы:

Аналогично указывается сервер для обратной зоны:

В конфигурационном файле также можно указать соответствие имени IP-адресу.

Запись типа A  в прямой зоне DNS (сопоставляющей IP-адрес запрошенному имени):

На любое имя хоста *.extdomain.net возвращается адрес 127.0.0.1.

Запись типа CNAME:

Эта запись создает алиас для локального имени sambaserver, чтобы к нему можно было обращаться по более короткому имени smb.

По умолчанию dnsmasq использует файл /etc/hosts для сопоставления имен хостов IP-адресам, но это тоже можно изменить. Если вы не хотите использовать /etc/hosts, вы можете указать это при помощи опции

Если же вы хотите использовать совместно с /etc/hosts еще один файл аналогичной структуры, для этого есть опция

Кроме задания собственных записей DNS можно изменять информацию, получаемую от внешних DNS-серверов путем подмены полученного IP-адреса. Для замены одного адреса:

Если при запросе доменного имени от внешнего DNS-сервера мы получим IP-адрес 1.2.3.4, то мы подменим его на адрес 5.6.7.8. Можно осуществлять подмену целыми подсетями:

Такая запись подменит любой адрес из подсети 1.2.3.0/24 на адрес из подсети 5.6.7.0/24. Если же вам необходимо подменять определенный интервал адресов, то такая возможность тоже есть:

Эта запись подменит адреса из интервала 10.0.0.10-10.0.0.40 на адреса 192.168.0.10-192.168.0.40

Для того, чтобы обращения к DNS шли именно на dnsmasq на том же сервере, где он сам работает, необходимо указать первой записью в /etc/resolv.conf следующую строку:

Сам dnsmasq будет игнорировать эту запись, поскольку предполагает, что эта запись обозначает его собственный сервис, он начинает использование записей с указанием серверов имен со следующей записи, в которой указывается уже внешний DNS-сервер.

Во многих системах /etc/resolv.conf генерируется автоматически при получении адреса от провайдера по DHCP, поэтому если просто записать эту строчку руками, при переподключении основного сетевого интерфейса файл будет перезаписан и эта строка исчезнет. Этого можно избежать, если раскомментировать в файле /etc/dhcp/dhclient.conf (или /etc/dhcp3/dhclient.conf, в зависимости от системы) строчку

Тогда даже при получении списка DNS-серверов по DHCP первой строчкой в /etc/resolv.conf будет строчка “nameserver 127.0.0.1”.

И еще одна опция, которая может вам пригодиться, если вы хотите использовать свой список DNS-серверов:

Файл, который указывается в этой опции, должен иметь такую же структуру, как и /etc/resolv.conf. При наличии этой опции будет использован указанный файл вместо /etc/resolv.conf. И таких записей может быть больше одной.

А если необходимо просто указать несколько DNS-серверов, на которые будут форвардиться запросы, это можно сделать при помощи записи нескольких строчек с опцией server:

Вот, в общем, и всё. И не забывайте после изменения настроек рестартовать dnsmasq командой

[edit] Configuration

Using Web-Admin

This is the easiest way to setup DNSMasq as DHCP Server

  • Go to your Web-Interface and log in
  • Go to Setup->Basic Setup
    • Make sure that
      • DHCP Type = DHCP Server
      • DHCP Server = Enable
      • Use DNSMasq for DHCP = Checked (only present if running a build < 39350)
      • Use DNSMasq for DNS = Checked (allows resolving local DHCP client names through DNS, but not strictly required for DHCP only)

Make sure that the maximum number of DHCP leases that you set is appropriate for your netmask; otherwise, DNSMasq will not start.

  • Go to Administration->Services
    • Make sure that
      • LAN Domain = <chosen LAN domain>
      • DNSMasq = Enabled
      • Local DNS = Enabled
      • Additional DNSMasq Options = Add your domain as a local search domain, add expand-hosts option. See screenshot.
  • You can add static allocations the same way as when you’re using DHCPd. These settings should end up in /tmp/dnsmasq.conf.

Update: For DNSMasq Options, I found the explanation below confusing; it’s much simpler than it sounds. Assuming your LAN domain is called ‘lan’, put the following lines in the «additional DNSMasq options» field:

domain=lan
local=/lan/
expand-hosts

—Mjrpes 07:53, 31 August 2010 (CEST)

In the below screenshot, there are a couple of mistakes. In order for to work, you need a line in there as well. But «local» is not a good idea for a local domain, because multicast / ZeroConf uses «.local» for its own purposes. You can get strange results like nslookup working while pings fail. Pick something other than «.local» for your domain.

—Towelie 15:57, 23 November 2010 (CEST)

Use NVRAM for client lease DB enabled DNSmasq does not start, did not check log for error, disable it operates correctly.
Incorrect addition of DHCP maximum number of users and number of reservations within the scope; i.e: 25 max + 5 reservations within scope yields 30 user max and if it is at the high end of the subnet it will push the upper boundary of addresses outside of limit and DHCP will not run.
WRT54GSv5 Firmware: DD-WRT v24-sp1 (07/27/08) micro

Dicas e truques

Evitar que o OpenDNS redirecione as consultas do Google

Para evitar que o OpenDNS redirecione todas as consultas do Google para seu próprio servidor de pesquisa, adicione ao :

server=/www.google.com/<IP do DNS do provedor>

Substituir endereços

Em alguns casos, como ao operar um portal cativo, pode ser útil resolver nomes de domínios específicos para um conjunto de endereços codificados. Isso é feito com a configuração :

address=/example.com/1.2.3.4

Além disso, é possível retornar um endereço específico para todos os nomes de domínio que não são respondidos de ou DHCP usando um curinga especial:

address=/#/1.2.3.4

Mais de uma instância

Se quisermos que dois ou mais servidores dnsmasq funcionem por interface(s).

Dinâmico

Neste caso, podemos excluir por interface e vincular quaisquer outras:

except-interface=lo
bind-dynamic

Nota: Esse é o padrão no libvirt.

Colocar domínios em lista negra

Para fazer um blacklist em domínios, ou seja, as respostas a consultas para eles com NXDOMAIN, use a opção sem especificar o endereço IP:

address=/blacklisted.example/
address=/another.blacklisted.example/

Para facilitar o uso, coloque a lista negra em um arquivo separado, como, por exemplo, , e carregue-o a partir de com ou .

Configuration

There are various resources that can be modified to change dnsmasq behavior. These include

  • the command line options as provided through /etc/conf.d/dnsmasq
  • the main configuration file (/etc/dnsmasq.conf)

OpenRC

Add dnsmasq to the default runlevel if it needs to be started automatically:

To start the service now:

In /etc/conf.d/dnsmasq, the command line options passed on to the dnsmasq daemon at start-up can be configured.

FILE Example dnsmasq service configuration

DNSMASQ_OPTS="--user=dnsmasq --group=dnsmasq -H /srv/virt/gentoo/hosts --max-cache-ttl=10"

Main configuration file

The main configuration of dnsmasq is done through its configuration file, /etc/dnsmasq.conf. The file uses a syntax and the one provided by the package is well documented and recommended to read through. Inside the file, or through the command line options, additional resources can be referred to (such as a DHCP hosts file).

Below is a sample configuration file:

FILE

# Listen only to this interface
interface=eth1
  
# Assign names based on mac address
dhcp-host=00:1e:68:c2:ff:ee,endor,192.168.0.54,24h
  
# Any other DHCP request gets an ip from this range
dhcp-range=eth1,192.168.0.100,192.168.0.120,12h
  
# Enable the TFTP server and set the root directory for files available via TFTP.
enable-tftp
tftp-root=/var/lib/tftpboot
dhcp-boot=/pxelinux.0

After editing the configuration file, the service has to be restarted — reloading is supported, but for other resources.

Hosts file

The dnsmasq application uses the /etc/hosts file as one of its sources for providing DNS services, unless the () command line argument is passed along.

If the /etc/hosts file is updated, the dnsmasq service needs to receive a SIGHUP signal in order to reload the settings. This is also supported through the init scripts’ reload command:

This behavior can also be disabled through the parameter in the configuration file.

Additional hosts file

It is possible to refer to an (additional) hosts file to use as source for DNS queries. To do so, add the () command line option. It is also possible to pass a directory; in that case, all files inside that directory will be treated as additional hosts files.

Similar to the standard hosts file, a SIGHUP signal reloads the file.

This behavior can also be set through the parameter in the configuration file.

Upstream nameservers

By default, dnsmasq uses the name servers specified in /etc/resolv.conf as its upstream nameservers.

A different file can be used through the () command line option.

This behavior can also be set through the parameter in the configuration file.

Other hits

Package dnsmasq-base

  • xenial (16.04LTS) (net):
    Small caching DNS proxy and DHCP/TFTP server

    2.75-1ubuntu0.16.04.5 : amd64 i386

    2.75-1 : arm64 armhf powerpc ppc64el s390x

  • xenial-updates (net):
    Small caching DNS proxy and DHCP/TFTP server

    2.75-1ubuntu0.16.04.5: amd64 arm64 armhf i386 powerpc ppc64el s390x

  • bionic (18.04LTS) (net):
    Small caching DNS proxy and DHCP/TFTP server

    2.79-1: amd64 arm64 armhf i386 ppc64el s390x

    also provided by:
    dnsmasq-base, dnsmasq-base-lua

  • eoan (19.10) (net):
    Small caching DNS proxy and DHCP/TFTP server

    2.80-1ubuntu2: amd64 arm64 armhf i386 ppc64el s390x

    also provided by:
    dnsmasq-base, dnsmasq-base-lua

  • focal (20.04LTS) (net):
    Small caching DNS proxy and DHCP/TFTP server

    2.80-1.1ubuntu1: amd64 arm64 armhf ppc64el s390x

    also provided by:
    dnsmasq-base, dnsmasq-base-lua

  • groovy (net):
    Small caching DNS proxy and DHCP/TFTP server

    2.81-4build1: amd64 arm64 armhf ppc64el s390x

    also provided by:
    dnsmasq-base, dnsmasq-base-lua

Package dnsmasq-base-lua

  • bionic (18.04LTS) (net):
    Small caching DNS proxy and DHCP/TFTP server

    2.79-1: amd64 arm64 armhf i386 ppc64el s390x

  • eoan (19.10) (net):
    Small caching DNS proxy and DHCP/TFTP server

    2.80-1ubuntu2: amd64 arm64 armhf i386 ppc64el s390x

  • focal (20.04LTS) (net):
    Small caching DNS proxy and DHCP/TFTP server

    2.80-1.1ubuntu1: amd64 arm64 armhf ppc64el s390x

  • groovy (net):
    Small caching DNS proxy and DHCP/TFTP server

    2.81-4build1: amd64 arm64 armhf ppc64el s390x

Package dnsmasq-utils

  • xenial (16.04LTS) (net):
    Utilities for manipulating DHCP leases

    2.75-1ubuntu0.16.04.5 : amd64 i386

    2.75-1 : arm64 armhf powerpc ppc64el s390x

  • xenial-updates (net):
    Utilities for manipulating DHCP leases

    2.75-1ubuntu0.16.04.5: amd64 arm64 armhf i386 powerpc ppc64el s390x

  • bionic (18.04LTS) (net):
    Utilities for manipulating DHCP leases

    2.79-1: amd64 arm64 armhf i386 ppc64el s390x

  • eoan (19.10) (net):
    Utilities for manipulating DHCP leases

    2.80-1ubuntu2: amd64 arm64 armhf i386 ppc64el s390x

  • focal (20.04LTS) (net):
    Utilities for manipulating DHCP leases

    2.80-1.1ubuntu1: amd64 arm64 armhf ppc64el s390x

  • groovy (net):
    Utilities for manipulating DHCP leases

    2.81-4build1: amd64 arm64 armhf ppc64el s390x

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

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

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.

После конфигурирования dnsmasq DHCP клиенту нужно будет дописать локальный адрес в вершину списка известных DNS адресов . Это обеспечит отправку всех запросов на dnsmasq прежде попыток разрешить их на внешнем DNS. После конфигурирования DHCP клиента сетевые демоны должны быть перезапущены чтобы изменения вступили в силу.

resolv.conf

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

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

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

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

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

# chattr +i /etc/resolv.conf
Больше трех серверов DNS

В Linux имеется ограничение способности самостоятельной обрабатки DNS запросов, при котором можно использовать не более трех серверов DNS в . В качестве обходного пути можно указать только localhost в , а затем создать отдельный для используемых внешних серверов DNS. Сначала создайте новый resolv файл для dnsmasq:

/etc/resolv.dnsmasq.conf
# например, DNS сервера от Google
nameserver 8.8.8.8
nameserver 8.8.4.4

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

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

dhcpcd

dhcpcd может сам добавлять или удалять DNS сервера в создавая или изменяя и файлы соответственно:

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

Для добавьте или раскомментируйте в :

prepend domain-name-servers 127.0.0.1;

NetworkManager

NetworkManager можно сконфигурировать так, чтобы он запускал dnsmasq. Добавьте опцию в секцию файла , затем выключите :

/etc/NetworkManager/NetworkManager.conf
plugins=keyfile
dns=dnsmasq

Собственные настройки dnsmasq желательно хранить в . Например, чтобы изменить размер кэша DNS (который хранится в RAM):

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

Когда dnsmasq запускается , настройки в этом каталоге приоритетней стандартного файла конфигурации.

Совет: This method can allow you to enable custom DNS settings on particular domains. For instance: change the first DNS address to while browsing only the following websites . This method is preferred to a global DNS configuration when using particular DNS nameservers which lack of speed, stability, privacy and security.

IPv6

Enabling in NetworkManager may break IPv6-only DNS lookups (i.e. ) 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

Другие методы

Другим вариантом является использование NetworkManager, настроенного вручную. Доступ к настройкам зависит от используемого фронтэнда; как правило, вызываемые по нажатию правой кнопки мыши апплета, редактирование (или создание) профиля, затем выбрав ‘DHCP Автоматический’ (указать адрес). Адреса DNS серверов должны быть введены так:

.

Установка

USE flags for
net-dns/dnsmasq

Small forwarding DNS server

Add support for acting as an authorative DNS server.
Add support for Linux conntrack connection marking.
Enable dbus support for anything that needs it (gpsd, gnomemeeting, etc)
Enable support for acting as a DHCP server.
Install extra command line tools for manually managing DHCP leases.
Enable support DNSSEC validation and caching.
Include code to dump packets to a libpcap-format file for debugging
Whether report *.bind CHAOS info to clients, otherwise forward such requests upstream instead
Enable support for Internationalized Domain Names
Enable inotify filesystem monitoring support
Add support for IP version 6
Enable support for Internationalized Domain Names, via net-dns/libidn2 rather than net-dns/libidn
Enable Lua scripting support
Add Native Language Support (using gettextGNU locale utilities)
Enable support for calling scripts when leases change.
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
!!do not set this during bootstrap!! Causes binaries to be statically linked instead of dynamically
Enables built in TFTP server for netbooting.

Многофункциональный прокси DeleGate

Выбор прокси-серверов в *nix огромен. Поиск в репозитарии любого дистра
выдаст десяток приложений, ориентированных на разные задачи и протоколы.
Возможности у них различны: кэширующие, фильтрующие, прозрачные и так далее.
Популярный Squid несколько тяжеловат и в настройке довольно сложен. Если нужен
только кэширующий прокси, заменить кальмара поможет илиPolipo
— легкий проксик, ориентированный на небольшое количество клиентов, или
популярный Oops!.

Для примера запустим delegate в режиме http-прокси, работающего на 8080 порту
(‘-v’ для отладки):

Настраиваем браузер на новый порт и пробуем подключиться. В консоли наблюдаем
за ходом работы. Если номер порта выбрать <1024, Delegate при запуске потребует
права root. Если не использовать параметр ‘-v’, то после инициализации демон
освободит консоль. Остановить затем процесс можно так:

Теперь добавим кэширование и ограничим работу Delegate только внутренним
интерфейсом:

Процессы delegated никак не связаны между собой, таким образом, нам ничто не
мешает запустить столько копий Delegate со своими параметрами, сколько
действительно необходимо. Аналогично активируется FTP-прокси:

Кроме того, Delegate может работать как HTTP, FTP, DNS или NNTP-сервер.
Например, запустим его как веб-сервер:

Usage

This section covers various usage scenarios (maintenance and operational tasks) for the dnsmasq service.

Resetting leases

Clients that had a network interface update which results in a different MAC address might not get the intended IP address immediately. This is because the dnsmasq service has provided this IP address to the old MAC address, and will wait until the lease of this address has expired before re-assigning it.

The dnsmasq service stores its leases in /var/lib/misc/dnsmasq.leases. If the lease needs to be removed faster, shut down the dnsmasq service, remove the lease from the dnsmasq.leases file and start the service again.

Reloading non-main configuration settings

Next to the dnsmasq.conf file, the dnsmasq service can use external definitions for the following services:

  • DHCP host configuration entries (through command line option)
  • DHCP options (through command line option)

When these files are modified, a SIGHUP signal has dnsmasq reload these configuration files.

NoteThe resolv.conf files are by default polled by dnsmasq; changes on these files are automatically picked up unless the () command line option is set or the configuration parameter is used.

DNS 缓存设置

要在单台电脑上以守护进程方式启动dnsmasq做DNS缓存服务器,编辑,添加监听地址:

listen-address=127.0.0.1

如果用此主机为局域网提供默认 DNS,请用为该主机绑定固定 IP 地址,设置:

listen-address=192.168.x.x

这种情况建议配置静态IP

多个ip地址设置:

listen-address=127.0.0.1,192.168.x.x 

DNS 地址文件

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

在配置好dnsmasq后,你需要编辑让DHCP客户端首先将本地地址(localhost)加入 DNS 文件(),然后再通过其他DNS服务器解析地址。配置好DHCP客户端后需要重新启动网络来使设置生效。

resolv.conf

一种选择是一个纯粹的 配置。要做到这一点,才使第一个域名服务器在 中指向localhost:

/etc/resolv.conf
nameserver 127.0.0.1
# External nameservers
...

现在,DNS查询将首先解析dnsmasq,只检查外部的服务器如果DNSMasq无法解析查询. , 不幸的是,往往默认覆盖 , 所以如果你使用DHCP,这里有一个好主意来保护 ,要做到这一点,追加 到dhcpcd的配置文件:

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

也可以保护您的resolv.conf不被修改:

# chattr +i /etc/resolv.conf
三个以上域名服务器

Linux 处理 DNS 请求时有个限制,在 中最多只能配置三个域名服务器(nameserver)。作为一种变通方法,可以在 文件中只保留 localhost 作为域名服务器,然后为外部域名服务器另外创建 文件。首先,为 dnsmasq 新建一个域名解析文件:

/etc/resolv.dnsmasq.conf
# Google's nameservers, for example
nameserver 8.8.8.8
nameserver 8.8.4.4

然后编辑 让 dnsmasq 使用新创建的域名解析文件:

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

使用dhcpcd

可以是通过创建(或编辑)文件或 文件来指定dns服务器,使不会被每次都被dhcpcd重写

echo "nameserver 127.0.0.1" > /etc/resolv.conf.head #设置dns服务器为127.0.0.1

使用dhclient

要使用 dhclient, 取消 文件中如下行的注释:

prepend domain-name-servers 127.0.0.1;

使用NetworkManager

NetworkManager 可以靠自身配置文件的设置项启动 dnsmasq 。在 文件的 节段添加 配置语句,然后禁用由 systemd 启动的 :

/etc/NetworkManager/NetworkManager.conf
plugins=keyfile
dns=dnsmasq

可以在 目录下为 dnsmasq 创建自定义配置文件。例如,调整 DNS 缓存大小(保存在内存中):

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

dnsmasq 被 启动后,此目录下配置文件中的配置将取代默认配置。

提示: 这种方法可以让你启用特定域名的自定义DNS设置。例如: 改变第一个DNS地址,浏览以下网站使用。This method is preferred to a global DNS configuration when using particular DNS nameservers which lack of speed, stability, privacy and security.

IPv6

启用 在 NetworkManager 可能会中断仅持IPv6的DNS查询 (例如 ) 否则将工作。 为了解决这个问题,创建以下文件将配置 dnsmasq 总是监听IPv6的loopback:

/etc/NetworkManager/dnsmasq.d/ipv6_listen.conf
listen-address=::1

另一种选择是在NetworkManagers“设置(通常通过右键单击小程序)和手动输入设置。设置将取决于前端中使用的类型;这个过程通常涉及右击小程序,编辑(或创建)一个配置文件,然后选择DHCP类型为“自动(指定地址)。”DNS地址将需要输入,通常以这种形式:.

Troubleshooting

log continuously filled with DHCPINFORM / DHCPACK

Windows 7 among others ask for proxy settings using DHCP. The issue is that they do not stop asking until they have received an answer. This results in that the log contains a lot information about these requests, an example can be found below (thanks for http://wiki.excito.org for the info).

Jul 1 06:34:09 MorganB3 dnsmasq-dhcp: DHCPINFORM(br0) 10.69.10.59 00:23:14:c5:33:fc
Jul 1 06:34:09 MorganB3 dnsmasq-dhcp: DHCPACK(br0) 10.69.10.59 00:23:14:c5:33:fc MorgansVaioF12Z

To solve this, edit /etc/dnsmasq.conf and add the following lines:

# This will tell DHCP clients to not ask for proxy information
# Some clients, like Windows 7, will constantly ask if not told NO
dhcp-option=252,"\n"

and restart dnsmasq with /etc/init.d/dnsmasq restart

Assigning dnsmasq Queryport

The queryport is not the dns server port used by dhcp clients, it is the outgoing port dnsmasq uses to query other servers, and is integral to dnsmasq succesfully assigning DNS values to the DHCP clients. The default settings create arbitrary high port number connections on a range of ports. By assigning an option line like “ option queryport ‘30000’ ” in /etc/config/dhcp, one can constrain those connections to a port you assign. Be certain that your firewall allows outbound connections from the router on the query port that you assign.

As a caution, dnsmasq runs as user “nobody” on openwrt so it is not allowed to create listening sockets on ports < 1024. Using the standard DNS port 53 for these queries will fail. The failure can be found in the logs. Logread will show an “ignoring nameserver” error line like:

Jan 01 01:01:01 MyRoutersName daemon.warn dnsmasq: ignoring nameserver 8.8.8.8 - cannot make/bind socket: Permission denied

Do not assign query ports less than 1024 to the queryport.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *