nftables - 在没有入口链的情况下转发第 2 层广播 (DHCP)?

nftables - 在没有入口链的情况下转发第 2 层广播 (DHCP)?

我现在在调查在 Docker 桥后面设置 DHCP 服务器。我的 docker 桥是用docker compose.我正在寻找一种将传入DHCPDISCOVER请求转发到桥接网络的方法。我在模式下设置了一个 IPS NFQUEUE,我打算用它来检查(并且改变*) 一些 DHCP 数据包。它似乎不可能queue numingressegress链上使用。

我知道可以fwdingress链上使用,但这会带来两个问题:

  • 数据包fwded 是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 无法到达数据包的那么深。

相关内容