配置 dnsmasq 以提供不同范围的地址

配置 dnsmasq 以提供不同范围的地址

我想为未知客户端提供某个范围内的 IP 地址,为已知客户端提供另一个范围内的 IP 地址(静态地址)。

我尝试了很多次,但似乎都不起作用。我只得到一个“无可用地址”错误。

我的网络是 10.1.0.0/22(<-!!!)应为访客分配一个在 10.1.3.1-10.1.3.254 范围内的地址,静态地址在 10.1.2.1-10.1.2.254 范围内

这是我的配置:

iface eth0 inet static
    address 10.1.0.2/22
    gateway 10.1.0.1

eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.1.0.2/22 brd 10.1.3.255 scope global eth0
        valid_lft forever preferred_lft forever

dhcp-range=tag:guests,10.1.3.1,10.1.3.254,255.255.252.0,12h
dhcp-range=tag:known,10.1.2.0,static,24h
dhcp-option=option:router,10.1.0.1
dhcp-option=option:dns-server,10.1.0.3
dhcp-option=option:ntp-server,10.1.0.1

dhcp-host=aa:bb:cc:dd:ee:ff,10.1.2.1
dhcp-host=11:22:33:44:55:66,10.1.3.2

已知主机会被赋予其地址(无论是 .2. 还是 .3. 地址),但未知主机不会获得任何地址。

答案1

要使用标签,需要某个地方。我对从另一个子网中继的请求执行此操作:

dhcp-range=set:wifi,192.168.4.0,static,255.255.255.0,24h
dhcp-option=tag:wifi,option:router,192.168.4.1

在 OP 的情况下,dhcp-host 条目将是设置标签的地方known,如下所示:

dhcp-host=aa:bb:cc:dd:ee:ff,10.1.2.1,set:known

但是(来自 dnsmasq 手册页):当主机与任何 --dhcp-host 指令(或 /etc/ethers 暗示的指令)匹配时,将设置特殊标签“known”。

所以这set:known是隐含的。使用为了否定该标签,我们可以将不同的范围应用于“未知”主机:

dhcp-range=tag:!known,10.1.3.1,10.1.3.254,255.255.252.0,12h
dhcp-range=tag:known,10.1.2.0,static,255.255.252.0,24h
dhcp-option=option:router,10.1.0.1
dhcp-option=option:dns-server,10.1.0.3
dhcp-option=option:ntp-server,10.1.0.1

dhcp-host=aa:bb:cc:dd:ee:ff,10.1.2.1
dhcp-host=11:22:33:44:55:66,10.1.3.2

答案2

您没有提供该tag:known范围的网络掩码,因此 dnsmasq 将假定它是整个 /22,完全覆盖该tag:guests范围。

答案3

似乎有问题的部分是:tag:known。出于某种原因,当我删除它时,dnsmasq 在启动日志消息中没有显示任何不同的东西,但现在似乎可以正常工作了。(我无法判断它是否适用于 /22,因为我已经停止使用它了。)

相关内容