Инициализация DNS в dnsmasq до назначения аренды

583
Mark Olbert

Я нахожусь в процессе переноса служб 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, но это кажется глупым.

0

1 ответ на вопрос

1
Holger Böhnke

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

Спасибо, Хольгер! И для ответа, и для подробного объяснения того, почему это хороший способ настроить сервер. Теперь у меня есть более четкое представление о том, как dnsmasq, debian, dhcp и dns сочетаются друг с другом. Кроме того, мне нравится тот факт, что различные детали конфигурации не дублируются в разных местах (например, dnsmasq.conf и hosts). Mark Olbert 5 лет назад 0
@MarkOlbert Не за что. Я так понимаю, у вас это работает на растяжку? Если это так, я буду корректировать параграф об отказе от ответственности в начале. У меня в настоящее время нет времени, чтобы испытать это на растяжке самостоятельно. Но я так скоро. Holger Böhnke 5 лет назад 0
Да, это работает нормально! Кстати, вот статья, которую я написал о своем опыте и вашей критической помощи, помогающей мне заставить все работать: https://jumpforjoysoftware.com/2018/11/dnsmasq-and-etc-ethers/. Mark Olbert 5 лет назад 0
Спасибо @MarkOlbert за подтверждение того, что он работает на растяжку. Я изменил заявление об отказе от ответственности, чтобы включить это. Хороший пост, спасибо за кредиты. Holger Böhnke 5 лет назад 0

Похожие вопросы