nftables 如何将 eth0 接口的流量通过 192.168.100.1:1080 转发?

新手上路,请多包涵

我在 192.168.100.1:1080 上有一个代理,可以转发流量,我知道使用:

iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 192.168.100.1:1080
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

可以将 eth0 的流量转发到 192.168.100.1:1080,但是我使用 nftables 却无法实现,测试了 iptables-translate 等工具也不行。

我期望的结果是,将 eth0 的所有流量通过 192.168.100.1:1080 代理转发。

请问我如何通过 nftables 实现上述需求?

注:192.168.100.1 不会走 eth0,假设要是走 eth0,需要排除 192.168.100.1 的转发。

阅读 872
avatarAI BotBETA

您可以使用以下 nftables 规则来实现将 eth0 接口的流量通过 192.168.100.1:1080 转发:

nft -f /dev/stdin <<EOF
table inet nat {
    rule output薮终端{ source link == "eth0" } {
        return dest sport == "192.168.100.1:1080"
    }
    rule output薮终端{ source link == "eth0" } {
        return dest sport != "192.168.100.1:1080"
    }
}

上述规则中,我们定义了两个规则,分别用于处理源端口为 192.168.100.1:1080 的流量和源端口不为 192.168.100.1:1080 的流量。在处理源端口为 192.168.100.1:1080 的流量时,我们将其重定向到目标地址为 192.168.100.1:1080 的网络接口。在处理源端口不为 192.168.100.1:1080 的流量时,我们将其发送到原始接口。

1 个回答

nft add table inet nat

nft add chain inet nat prerouting { type nat hook prerouting priority 0 \; }

nft add chain inet nat postrouting { type nat hook postrouting priority 100 \; }

nft add set inet nat exclude_ips { type ipv4_addr; flags interval; }

nft add element inet nat exclude_ips { 192.168.100.1 }

nft add rule inet nat prerouting iif "eth0" tcp daddr != @exclude_ips dnat 192.168.100.1:1080

nft add rule inet nat postrouting oif "eth0" masquerade
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进