Я проверил это на 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
включено:
# /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
опцией ... `.