Я нахожусь в процессе переноса служб DHCP/DNS для моей локальной сети из системы, работающей в режиме wheezy, в систему, работающую в режиме натяжения. DHCP и DNS предоставлены dnsmasq.

Что я вижу, по крайней мере с тем способом, которым я настроил dnsmasq на новой машине, так это то, что предоставляемая им служба DNS знает только об устройствах, которые получили от нее DHCP-аренду. Я предполагал, что он сможет разрешать устройства, которым я назначил фиксированный IP-адрес в dnsmasq.conf, даже до того, как они запросят новую аренду DHCP. Но, видимо, дело не в этом ... или я что-то неправильно настроил.

Например, несмотря на эту запись в dnsmasq.conf:

dhcp-host=1C:6F:65:39:09:8D,colossus,10.0.0.8

выполнить nslookup для colossus или colossus.localnet (это имя, которое я назначил для моей локальной сети) не удается.

Есть ли способ настроить dnsmasq, чтобы он разрешал устройства с фиксированными IP-адресами до назначения аренды?

Кроме того, поскольку stretch использует resolvconf и dhcpcd и перезаписывает и /etc/resolv.conf, и /run/dnsmasq/resolv.conf, куда мне поместить фиксированные IP-адреса, чтобы они разрешались даже до назначения аренды? Я думал о том, чтобы поместить их в resolv.conf.tail, но это кажется глупым.

1 ответ1

1

Я проверил это на 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 ... `.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .