我需要拦截发往外部 IP 的流量并将其重新路由到本地主机。使用 iptables 非常简单,但我不明白如何通过 nft 使其工作。我在 nft 中创建了表和链,但无法创建规则,nft 说操作不受支持。
表格
sudo /usr/sbin/nft list ruleset
table ip filter {
chain OUTPUT {
type filter hook output priority filter; policy accept;
}
}
规则
sudo /usr/sbin/nft add rule ip filter OUTPUT ip daddr $EXTERNAL_ADDRESS counter dnat to 127.0.0.1
Error: Could not process rule: Operation not supported
内核模块
lsmod | grep nf_tables
nf_tables 360448 1 nft_nat
libcrc32c 12288 3 nf_conntrack,nf_nat,nf_tables
nfnetlink 20480 1 nf_tables
我的规则有什么问题?或者可以使其简单一些吗?
答案1
为主机分配 IP 地址。转发表的作用是路由所有流量,防火墙可以做到这一点,但这通常不是必需的。
例如,分配一个我编写的用于 Linux 环回的 IP 地址:
ip a add 2001:db8:114:6402::1020 dev lo
作为单主机路由,即使它通常存在于互联网的其他地方,它也会优先。在环回接口上,其他主机不会知道它,只有“离开”同一主机的流量才能到达。
如果主机是路由器,请决定是否要将其播报给其他路由器。
读者练习:在 IPAM 和 DNS 中注册它。使其与发行版的网络管理器保持一致。