如何使用 nft 将发往特定地址的所有流量路由到本地主机?

如何使用 nft 将发往特定地址的所有流量路由到本地主机?

我需要拦截发往外部 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 中注册它。使其与发行版的网络管理器保持一致。

相关内容