我有一个盒子,我将其配置为有线/无线路由器,用于定义(有线)和(无线)接口之间的systemd-networkd
桥接(br0
) ,桥接上运行 DHCP 服务器。客户端的静态租约在桥接的网络配置文件中使用指令定义。但是我发现定义的静态 IP 并没有提供给连接在桥接接口上的客户端,而提供给了连接在 上的客户端。 上的客户端从 DHCP 池中获得 IP 地址,而我希望它按照下面的指令进行。enp3s0
wlp1s0
systemd-networkd
[DHCPServerStaticLease]
enp3s0
wlp1s0
enp3s0
10.0.0.147
10.0.0.10
[DHCPServerStaticLease]
以下是定义各种接口的配置:
/etc/systemd/network/10-br0.netdev
:
[NetDev]
Name=br0
Kind=bridge
/etc/systemd/network/15-br0.network
:
[Match]
Name=br0
[Network]
Address=10.0.0.1/24
DHCPServer=yes
DNS=10.0.0.1
Domains=lan
[DHCPServer]
PoolOffset=100
PoolSize=100
[DHCPServerStaticLease]
# Wired client - this IP does not get assigned (I've triple checked this MAC and it's correctly entered on client and server)
MACAddress=01:23:45:67:89:10
Address=10.0.0.10
[DHCPServerStaticLease]
# Wireless client - this IP gets assigned correctly
MACAddress=12:34:56:78:90:12
Address=10.0.0.20
/etc/systemd/network/20-lan.network
:
[Match]
Name=enp3s0
[Network]
Bridge=br0
无线接口由 提供hostapd
。/etc/hostapd/hostapd.conf
其中包括将无线接口添加到网桥的命令:
interface=wlp1s0
bridge=br0
一切正常运转后,连接有线客户端时,我没有在日志中看到有关 IP 地址分配的任何信息(启用调试日志记录以systemd-networkd
按照这个答案),只是表示请求已被确认,但这似乎对了解正在发生的事情没有什么帮助:
$ journalctl --unit systemd-networkd -r | grep "br0: DHCPv4"
Jan 01 21:36:59 router systemd-networkd[753]: br0: DHCPv4 server: ACK (0x6c2c7b71)
Jan 01 21:36:59 router systemd-networkd[753]: br0: DHCPv4 server: REQUEST (rebinding/renewing) (0x6c2c7b71)
是否有人看到我的设置出了什么问题,或者至少知道当 DHCP 服务器决定忽略有线客户端的静态分配时如何从 DHCP 服务器获取更多信息?
答案1
问题
这似乎是 Systemd <= 253 中的一个错误。当客户端不在 DHCP 客户端标识符中发送其 MAC 地址时,MAC 比较将不起作用。就您而言,无线客户端可能会发送 MAC,而有线客户端则不会。
- 错误报告:https://github.com/systemd/systemd/issues/21368
- 相关 Debian 错误报告:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1050098
此问题已在以下拉取请求中修复:https://github.com/systemd/systemd/pull/27313
客户端解决方法
作为一种解决方法,请确保 DHCP 客户端将客户端标识符作为 DHCP 请求的一部分发送。
systemd-networkd
对于 Systemd 的网络,默认使用 DUID。要将其更改为 MAC 地址,请添加以下网络配置:
[DHCPv4]
ClientIdentifier=mac
您可以在 中找到更多信息man 5 systemd.network
。
dh客户端
如果您使用 dhclient,则可以关闭 DUID 的使用:在 Debian Buster 上强制使用 MAC 地址作为 DHCP 客户端 ID
解决方案
升级到 Systemd >= 254 或应用补丁的反向移植。