Dnsmasq разрешает локальное имя хоста в 127.0.0.1 по всей сети

8

Мой dnsmasq настроен:

  • На хосте 'rtfm.lan'
  • Домен 'lan'
  • Есть несколько предустановок DHCP, которые включают имена хостов

Все хосты * .lan, зарегистрированные через DHCP, разрешают нормально: dnsmasq знает, какие IP-адреса назначены каким именам хостов. Однако, 'rtfm.lan' читается из / etc / hosts и разрешается до 127.0.0.1.

Я могу запретить dnsmasq читать / etc / hosts и добавить адрес вручную:

no-hosts
address=/rtfm.lan/192.168.1.2

Но это не гибко: если однажды я решу изменить свой IP - мне также придется изменить его в dnsmasq.conf.

Как я могу сказать dnsmasq использовать local-hostname с его реальным IP?


На всякий случай .. вот мой конфиг DNSmasq:

# Never forward plain names (without a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces.
bogus-priv
# Read resolv.conf serially
strict-order

#==========[ NAMESERVER ]==========#

# Cache size
cache-size=4096
# Don't read /etc/hosts
no-hosts
# Read additional hosts-file (not only /etc/hosts) to add entries into DNS
addn-hosts=/etc/hosts-dnsmasq
# Auto-append <domain> to simple entries in hosts-file
expand-hosts

#=== HOSTNAME OVERRIDES
address=/localhost/127.0.0.1 # *.localhost => 127.0.0.1

#==========[ DHCP ]==========#
# Enable for the local network?
dhcp-authoritative
# Tell MS Windows to release a lease on shutdown
dhcp-option=vendor:MSFT,2,1i

#=== DHCP
# Domain name
domain=lan
# DNS-resolve hosts in these domains ONLY from /etc/hosts && DHCP leases
local=/lan/

# DHCP range & lease time
dhcp-range=192.168.1.70,192.168.1.89,24h 
# Default route
dhcp-option=3,192.168.1.1

#=== FIXED LEASES
# LAN MY HOSTS
dhcp-host=00:23:54:5d:27:fa,                    rtfm.lan,               192.168.1.2
dhcp-host=00:23:54:5d:27:fb,                    rtfm.lan,               192.168.1.2
dhcp-host=c8:0a:a9:45:f1:03, 00:1e:64:9e:e9:5e, wtf.lan,                192.168.1.3
kolypto
источник

Ответы:

10

Обычно вы определяете свои статические хосты /etc/hostsи включаете их hostsв своем dnsmasq.confфайле. dnsmasqпозволяет указать альтернативное имя для этого файла.

Если вы хотите , rtfm.lanчтобы решить , как 192.168.1.2затем добавьте строку 192.168.1.2 rtfm.lanв /etc/hosts. Обычно ваш файл hosts для dnsmasq должен быть переносимым на все ваши серверы.

В rtfm.lanстеке IP будет происходить короткое замыкание при маршрутизации и не будет отправляться трафик в сеть.

Если вы обновите свой /etc/hostsфайл и отправите сигнал dnsmasqс HUPсигналом, файл хостов будет перечитан и изменения будут применены.

РЕДАКТИРОВАТЬ: dnsmasq не предназначен для обслуживания динамического адреса узла для своего собственного узла. Как уже отмечалось, он обслуживает имена из своего файла аренды для клиентов DHCP.

Если ваш хост является интернет-шлюзом, он обычно обслуживает локальный статический адрес. Обслуживание адреса интернет-шлюза может вызвать проблемы с маршрутизацией и брандмауэром.

Вы можете настроить свой DHCP-клиент так, чтобы он записывал однострочный файл хостов. Опция dnsmasq addn-hostможет быть использована, чтобы dnsmasq прочитал этот файл в дополнение к /etc/hosts. Если адрес может измениться, тогда DHCP-клиент может переписать файл и отправить dnsmasq HUPсигнал об изменении IP-адреса.

BillThor
источник
Итак ... нет способа заставить dnsmasq использовать текущий IP, полученный с интерфейса?
Колыпто
Не по умолчанию, но вы можете заставить своего DHCP-клиента предоставлять необходимые данные. Я не уверен, почему вы будете обслуживать динамический адрес для хоста из dnsmasq.
BillThor
4

dnsmasq может разрешить свое собственное имя хоста, отключив чтение из / etc / hosts и настроив другой файл конфигурации для чтения имен хостов, включая самого себя.

Конфигурация dnsmasq (/etc/dnsmaq.conf):

no-hosts
addn-hosts=/etc/dnsmasq_hosts

В / etc / dnsmasq_hosts настройте собственную точку имени хоста для IP-адреса, который нужен (а также другие имена хостов в локальной сети).

pnail
источник