我的 dnsmasq.conf 中有以下内容:
dhcp-range=set:red,10.1.1.2,10.1.1.69,72h,static
dhcp-range=set:blue,10.1.1.70,10.1.1.100,72h,static
dhcp-range=set:white,10.1.1.101,10.1.1.200,12h
dhcp-range=10.1.1.201,10.1.1.250,12h
我原本以为前两个范围对于不在 hosts 文件中的任何人都是禁止的,即保留用于静态 IP 保留。
但是,当我在网络中添加随机设备时,它似乎会分配红色范围内的 IP,即使没有为其保留静态 IP。我原本希望分配 10.1.1.101 至 10.1.1.250 范围内的 IP。
此功能是否与我预期的不同?
答案1
虽然是旧帖,但我会尝试一下……
这是因为所有范围都有相同的子网。
如果 eth0 是 10.1.1.1,那么它将提供通过该接口进入的 10.1.1.2 到 10.1.1.254 范围内的地址。这就是为什么所有新机器都获得较低(红色)范围内的地址。
但是如果你有第二个物理接口(10.1.2.1 上的 eth1/wlan0),那么通过该接口传入的所有请求都将被赋予 10.1.2.x 范围内的地址,如果这样配置这是我所知道的唯一一种分流方式容易地使用防火墙规则等
因为所有范围都有相同的子网;dnsmasq 只是分配位于其自己的监听接口网络内的 IP。10.1.1.x
在man dnsmasq
关于 dhcp-ranges 中,它指出
If you have more than one network, you will need to repeat this for each network on which you want to supply DHCP service.
。这对我来说意味着另一个物理接口,并且用颜色命名它们是我区分网络的方式,通过使用不同颜色的电缆。:)
阅读 dnsmasq 文档后,我认为 /etc/hosts 用作名称服务器的一部分,而不是 DHCP 分配,因为静态 IP 通常需要机器名称或 MAC 地址才能正常运行。
答案2
这篇帖子现在已经很老了,但我刚刚才遇到这个问题……
如果使用开始和结束地址:
dhcp-range=set:red,10.1.1.2,10.1.1.69,static
地址将被分发,有时甚至是在错误的子网上。
相反,只尝试一个网络地址和子网掩码:
dhcp-range=set:red,10.1.1.0,static,255.255.255.0
答案3
dnsmasq.conf
如果静态范围属于 中定义的子网,则无需在您的 中明确定义静态范围dhcp-range
:只需使用 定义静态租约dhcp-host
(例如 )dhcp-host=[MAC address],[IP address]
。仅当您要在不分配动态 IP 地址的子网中分配静态 IP 地址时,才需要定义静态范围。
来自手册页:
像这样分配的地址(即使用
dhcp-host
)不受选项给定范围的限制--dhcp-range
,但它们必须与某些有效的位于同一子网中dhcp-range
。对于不需要动态分配地址池的子网,请在--dhcp-range
声明中使用“static”关键字。
因此,要为10.1.1.70
具有 MAC 地址且租期为 72 小时的机器分配静态 IP 地址00:11:22:33:44:55
并用 标记blue
,请使用:
dhcp-range=10.1.1.201,10.1.1.250,12h
dhcp-host=00:11:22:33:44:55,set:blue,10.1.1.70,72h
答案4
其他答案正确地指出,在同一子网上定义静态范围作为动态分配的范围通常没有必要。但是,定义更多范围以与标签系统一起使用可以灵活地配置网络,并且特别容易更改一组主机的设置。
手册页说始终允许为同一子网定义多个范围。但是,我认为 OP 问题中发布的配置无效,原因有 2 个:
在 dhcp-range 行中,同时将结束地址设置为范围和静态模式是无效的。dhcp-range 选项的一般形式是
dhcp-range=[tag:<tag>[,tag:<tag>],][set:<tag>,]<start-addr>[,<end-addr>|<mode>[,<netmask>[,<broadcast>] ]][,<lease time>]
。在我看来,这|
意味着同时设置<end-addr>
和static
模式都是无效的。即使通过在起始地址上使用网络大小参数隐式设置范围(如手册页其他地方提到的那样,例如 10.1.1.2/25),也不被接受dnsmasq --test
。似乎静态模式关键字是作为范围参数的替代品,不能用于定义静态范围。对特定主机应用 dhcp-range 设置之内子网,标签应该
set
在 dhcp-host 定义行中,然后仅在 dhcp-range 行中引用。例如,在我的设置中,我希望已知主机的租约时间比未知主机长。手册页说,“已知”标签会自动为任何与 dhcp-host 配置匹配的主机连接设置。我们可以按如下方式使用它,利用 DNSMasq 将应用更具体的设置(tag: 行)(如果适用)这一事实。
# Default lease range, with 12h max lease time.
dhcp-range=10.1.1.201,10.1.1.250,12h
# For known hosts, set a 72h lease time.
# - the "known" tag is set whenever a host matches a dhcp-host directive.
# - other tags could be set in dhcp-host lines using e.g. set:red.
dhcp-range=tag:known,10.1.1.2,static,72h