我想为未知客户端提供某个范围内的 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,因为我已经停止使用它了。)