![透明桥:使用 nftables 可以实现 nat 吗?](https://linux22.com/image/789649/%E9%80%8F%E6%98%8E%E6%A1%A5%EF%BC%9A%E4%BD%BF%E7%94%A8%20nftables%20%E5%8F%AF%E4%BB%A5%E5%AE%9E%E7%8E%B0%20nat%20%E5%90%97%EF%BC%9F.png)
我在一张卡上配置了两个 10gb NIC(eth1、eth2),将其配置为桥接器(br0),PC(装有 ubuntu 22.04)自己的 nic(eth0)仅用于访问它。我正在使用 nftables 将其设置为透明桥接器,以过滤不需要的数据包,效果很好(我也刚学)。
我也需要进行端口转发。例如:
chain nat {
type nat hook prerouting priority -199; policy accept;
meta nftrace set 1
iif eth1 ip daddr a.b.c.d tcp dport x counter dnat to e.f.g.h:y
}
我知道它不是网桥内的网络标准,网桥 nat 是关于修改目标 mac 的。我读到 nft 目前没有网桥 l3 ip 功能。
无论如何,我想问的是是否有任何解决方法,最好使用 nft 的两步操作。最后,如果 nft 无法实现,我可以使用 xdp/bpf 或其他东西来做吗?我不喜欢这样,因为要为每个新/修改条目编译 c 代码,这会带来许多其他复杂情况。
预先感谢
我尝试了如下在网上找到的方法:
table inet try1 {
chain nat {
type nat hook prerouting priority -199; policy accept;
meta nftrace set 1
ip daddr 10.100.10.9 tcp dport 50080 counter dnat to 10.100.10.10:80
}
}
table bridge firewall {
chain prer {
type filter hook prerouting priority -300;
meta nftrace set 1
iif eth1 ip daddr 10.100.10.9 tcp dport 50080 meta pkttype set host ether daddr set bridge MAC counter
}
chain input {
type filter hook input priority 0; policy accept;
}
其中桥接 mac 与 mac 的 eth1、eth2 不同(由我更改)。
还需要接受桥梁输入。
inet 表 nat 已触发,但我不知道这些数据包去了哪里。我再也找不到它们了。当然,数据包并没有像我需要的那样从 eth2 出去(我不需要改变它们的方向,但通常是 eth1 <--> eth2)。我认为上述方法是在多端口桥中更改输出,而不是这种情况