我的 dnsmasq 配置如下:
- 在主机“rtfm.lan”上
- 域名‘lan’
- 有一些 DHCP 预设包含主机名
所有通过 DHCP 注册的 '*.lan' 主机都可以正常解析: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 使用带有其真实 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
答案1
通常,您会在文件中定义静态主机/etc/hosts
并启用它。 允许您为此文件指定备用名称。hosts
dnsmasq.conf
dnsmasq
如果您希望rtfm.lan
被寻址为,则添加192.168.1.2
一行内容。通常,您的 dnsmasq 主机文件应该可以移植到您的所有服务器。192.168.1.2 rtfm.lan
/etc/hosts
IPrtfm.lan
堆栈将短路由并且不会将流量发送到网络上。
如果您更新/etc/hosts
文件并dnsmasq
使用信号发出HUP
信号,则主机文件将被重新读取并应用更改。
编辑:dnsmasq 并非设计用于为其自己的主机提供动态主机地址。如前所述,它确实为 DHCP 客户端提供其租约文件中的名称。
如果您的主机是 Internet 网关,它通常会提供本地静态地址。提供 Internet 网关地址可能会导致路由和防火墙问题。
您可以配置 DHCP 客户端以写入一行 hosts 文件。addn-host
除了 之外,还可以使用 dnsmasq 选项让 dnsmasq 读取此文件/etc/hosts
。如果地址可能会更改,则 DHCP 客户端可以重写该文件并向 dnsmasq 发送HUP
有关 IP 地址更改的信号。
答案2
dnsmasq 可以通过禁用从 /etc/hosts 读取并配置另一个配置文件来读取包括其自身在内的主机名来解析自己的主机名。
dnsmasq 配置(/etc/dnsmaq.conf):
no-hosts
addn-hosts=/etc/dnsmasq_hosts
在 /etc/dnsmasq_hosts 中,配置自己的主机名指向所需的 IP 地址(以及本地局域网中的其他主机名)。