我现在在调查在 Docker 桥后面设置 DHCP 服务器。我的 docker 桥是用docker compose
.我正在寻找一种将传入DHCPDISCOVER
请求转发到桥接网络的方法。我在模式下设置了一个 IPS NFQUEUE
,我打算用它来检查(并且改变*) 一些 DHCP 数据包。它似乎不可能queue num
在ingress
或egress
链上使用。
我知道可以fwd
在ingress
链上使用,但这会带来两个问题:
- 数据包
fwd
ed 是NF_STOLEN
意义不会发生进一步的遍历,从而阻止数据包发送到 IPS。 fwd
规则和ingress
链需要命名 NIC。由于 Docker 动态地提供这些接口,这看起来不是一个干净的解决方案,并且增加了稍后必须添加表和链的开销。
为此,我尝试了以下方法:
table inet nat {
chain prerouting {
type nat hook prerouting priority -100; policy accept;
ether daddr ff:ff:ff:ff:ff:ff udp sport 68 ip daddr 255.255.255.255 dnat to 172.25.10.5;
}
}
和
table netdev filterearly_lan {
chain ingress {
type filter hook ingress device enp1s0.10 priority -500; policy accept;
ether daddr ff:ff:ff:ff:ff:ff udp sport 68 ip daddr set 172.25.10.5;
}
}
然而, 的输出中似乎没有出现任何内容tcpdump -i br-a039f83f0bc5 port 67 and port 68 or arp -nne
。
是否可以在不需要指定 NIC 的情况下执行此类转发?谢谢
* 改变 DHCP 服务器 IP(选项 54)字段,因为 nftables 无法到达数据包的那么深。