Я проверил это на Debian Wheezy и Jessie, и OP подтвердил, что он работает и на растяжку. Стретч и Джесси используют resolvconf, а wheezy - нет.
Просто поместите все свои фиксированные IP-адреса в файл /etc/hosts
локальный для хоста, на котором запущен dnsmasq. Здесь вы добавляете хосты с фиксированными адресами в вашей локальной сети (домен local.net
, IP 192.168.0.xxx
в этом примере) или хосты, которые вы хотите переопределить локально по тем или иным причинам:
# /etc/hosts
# the local host
127.0.0.1 localhost
# provide fixed addresses used by dnsmasq for the local network
192.168.0.100 host0.local.net host0
192.168.0.101 host1.local.net host1
192.168.0.102 host2.local.net host2
# map a fancy service to the same address as above (e.g. on host2)
192.168.0.102 imap.local.net imap
192.168.0.102 mediaserver.local.net mediaserver
# overwrite an external host with address 1.2.3.4
1.2.3.4 some.external-host.com
# map unwanted external hosts to localhost
127.0.0.1 some.malicious-advertising-server.com
Dnsmasq читает файл hosts предпочтительно для вызова внешних распознавателей. Таким образом, все IP-адреса в этом файле должны быть доступны до того, как любой из этих хостов запросит аренду (или даже запустит). Убедитесь, что в вашем /etc/dnsmasq.conf
есть следующие комментарии :
# /etc/dnsmasq.conf
...
# If you don't want dnsmasq to read /etc/hosts, uncomment the
# following line.
#no-hosts
...
Если ваш домен local.net
не является общедоступным доменом, поместите его в следующее предложение, чтобы dnsmaq не запрашивал исходящие преобразователи на несуществующих доменах:
# /etc/dnsmasq.conf
...
# Add local-only domains here, queries in these domains are answered
# from /etc/hosts or DHCP only.
local=/local.net/
...
Возможно, вы захотите проверить некоторые дополнительные параметры файла /etc/hosts
в /etc/dnsmasq.conf
. Окружающие комментарии довольно информативны.
Теперь вы хотите сопоставить свои физические хосты с этими IP-адресами. Если нет, создайте файл /etc/ethers
. В этом файле вы указываете MAC-адреса всех хостов, которые должны получить фиксированный IP-адрес, а затем их соответствующее DNS-имя:
# /etc/ethers
1C:6F:65:39:09:8D host0.local.net
1C:6F:65:39:19:8D host1.local.net
1C:6F:65:39:29:8D host2.local.net
Вам нужны только ваши физические хосты, а не дополнительные имена сервисов, которые вы определили в /etc/hosts
выше. Вернитесь к вашему /etc/dnsmasq.conf
и убедитесь, что чтение /etc/ethers
ethers включено:
# /etc/dnsmasq.conf
...
# If this line is uncommented, dnsmasq will read /etc/ethers and act
# on the ethernet-address/IP pairs found there just as if they had
# been given as --dhcp-host options. Useful if you keep
# MAC-address/host mappings there for other purposes.
read-ethers
Опять же, есть больше параметров, касающихся /etc/ethers
. Возможно, вы захотите просмотреть их, если вы ищете дополнительные функции.
В качестве третьего шага вы должны убедить resolconf использовать локальный dnsmasq в качестве первого распознавателя. В противном случае разрешение не будет работать правильно для динамических аренды (а не для фиксированных, настроенных выше) на том же хосте, на котором выполняется dnsmasq. Вот как выглядит мой /etc/resolvconf.conf
:
# /etc/resolvconf.conf
# Configuration for resolvconf(8)
# See resolvconf.conf(5) for details
resolv_conf=/etc/resolv.conf
# If you run a local name server, you should uncomment the below line and
# configure your subscribers configuration files below.
name_servers=127.0.0.1
# Mirror the Debian package defaults for the below resolvers
# so that resolvconf integrates seemlessly.
dnsmasq_resolv=/var/run/dnsmasq/resolv.conf
pdnsd_conf=/etc/pdnsd.conf
unbound_conf=/var/cache/unbound/resolvconf_resolvers.conf
Ключевая строка здесь:
# /etc/resolvconf.conf
...
name_servers=127.0.0.1
...
Это говорит решателю использовать локальный хост как первый распознаватель. Проблема в том, что dnsmasq также использует resolvconf для разрешения неизвестных адресов. Но не волнуйтесь, dnsmasq достаточно умен, чтобы не вызывать себя в рекурсивных циклах.
И последнее (вероятно, очевидное): если вы также определяете динамический диапазон IP-адресов, например, для гостей, мобильных устройств и т.д., Убедитесь, что он не конфликтует с адресами, указанными в /etc/hosts
:
# /etc/dnsmasq.conf
...
# Uncomment this to enable the integrated DHCP server, you need
# to supply the range of addresses available for lease and optionally
# a lease time. If you have more than one network, you will need to
# repeat this for each network on which you want to supply DHCP
# service.
dhcp-range=192.168.0.50,192.168.0.99,12h
# this range must not include above addresses given in /etc/hosts
...
Теперь dnsmaq получает IP-адреса из файла /etc/hosts
, независимо от существующей аренды. DHCP-запросы разрешают MAC-адрес, используя /etc/ethers
в доменное имя, которое снова преобразуется в IP, используя /etc/hosts
.
Таким образом, вы можете аккуратно настроить хосты и эфиры в отдельных файлах, и вам не нужно помещать каждый хост в ваш /etc/dnsmaq.conf
с опцией dhcp-host
... `.