![dnsmasq 无需手动更改 /etc/hosts 文件](https://linux22.com/image/1283625/dnsmasq%20%E6%97%A0%E9%9C%80%E6%89%8B%E5%8A%A8%E6%9B%B4%E6%94%B9%20%2Fetc%2Fhosts%20%E6%96%87%E4%BB%B6.png)
我一直在尝试让 dnsmasq 作为一个组合的 dns 和 dhcp 服务器工作。到目前为止,这真是令人恼火……简而言之,DNS 对于添加到 /etc/hosts 的任何内容都工作正常,dhcp 工作正常,但 dhcp 不会使用来自客户端的主机名信息更新 dns。
结果是,如果我知道节点的地址,我只能通过主机名 ping 节点,这意味着设置静态 dhcp 分配并手动将主机名放入 /etc/hosts,这非常烦人,有点违背了 dhcp 的意义。一定有办法让 dnsmasq 更新主机文件,肯定
如果这很重要的话,客户端不会使用 fqdn,我想我已经尝试了“expand-hosts”和“domain=”的所有组合
以下是 dnsmasq 配置文件内容:
需要域 bogus-priv 除外接口=tun0 dhcp 范围=192.168.1.10,192.168.1.80,255.255.255.0,12h dhcp-租约文件=/var/lib/misc/dnsmasq.leases dhcp-权威 日志查询 DHCP日志
答案1
尝试使用 设置域domain example.org
。
dnsmasq 还有一个钩子来调用脚本dhcp-script=foo.sh
。发送给脚本的参数是“add”或“del”,然后是 MAC 地址、IP 地址,最后是主机名。
快速创建更新主机文件的脚本应该相对容易。
答案2
DHCP 客户端需要发送一个名称,以便 DNS 中提供该名称。否则 dnsmasq 可以提供该名称,但您必须先在 /etc/dnsmasq.conf 或 /etc/hosts 中配置该名称。
由于 dnsmasq 是 DNS 服务器,因此您需要一个域名。此domain-needed
部分强制执行这一点。在您的配置中也设置一个域名。
因此,这基本上就是我所拥有的:
bogus-priv
dhcp-authoritative
dhcp-host=00:0c:29:1b:62:c6,host1,192.168.1.86,infinite
dhcp-host=00:0c:29:f7:e6:7d,host2,192.168.1.89,infinite
dhcp-host=00:1e:58:94:d2:5b,192.168.1.10,infinite
dhcp-option=19,0 # option ip-forwarding off
dhcp-option=27,1
dhcp-option=42,0.0.0.0
dhcp-option=44,192.168.1.10 # set netbios-over-TCP/IP nameserver(s) aka WINS server(s)
dhcp-option=45,0.0.0.0 # netbios datagram distribution server
dhcp-option=46,8 # netbios node type
dhcp-option=6,0.0.0.0
dhcp-option-force=210,/
dhcp-option-force=211,30i
dhcp-option=option:domain-search,example.com
dhcp-option=option:router,192.168.1.1
dhcp-range=192.168.1.50,192.168.1.150,255.255.255.0,30d
domain=example.com
domain-needed
enable-tftp
expand-hosts
interface=eth0
local=/dartworks.biz/
local=/localnet/
no-poll
no-resolv
server=<ISP DNS 1>
server=<ISP DNS 2>