使用nftables实现子网间流量路由及端口转发技术指南

本文探讨了如何通过配置Linux机器上的nftables,将192.168.2.0/24子网的流量经由192.168.1.0/24子网中的路由器路由至互联网,并详细分析了非标准端口转发及NAT规则配置中遇到的问题。

问题背景

我有一个子网192.168.2.0/24,它通过一台配置了nftables的Linux机器连接到另一个子网192.168.1.0/24。在子网192.168.2.0/24上有一个应用程序需要通过192.168.1.0/24子网上的路由器(使用非标准端口)访问互联网。

nftables配置

我配置的nftables规则如下:

1
2
3
4
5
6
7
8
nft flush ruleset

nft add table ip tunnel
nft 'add chain ip tunnel prerouting { type nat hook prerouting priority -100 ; }'
nft 'add chain ip tunnel postrouting { type nat hook postrouting priority 100 ; }'
nft 'add rule ip tunnel prerouting tcp dport 443 dnat to 192.168.1.254'
nft 'add rule tunnel postrouting ip daddr == 192.168.1.0/24 oif wlp2s0 snat to 192.168.1.94'
nft 'add rule tunnel postrouting ip daddr == 192.168.2.0/24 oif enp3s0f0 snat to 192.168.2.93'

遇到的问题

这个配置(以HTTPS为例)不工作。我怀疑原因是回复的数据包到达了执行端口转发的机器,而该机器不知道如何处理这些数据包,因为它只进行了端口转发。当使用NAT时,连接是持久化的,因此不存在这个问题。

寻求解决方案

所以我想问:我该怎么做才能让这个配置生效?


注意:此问题在Network Engineering Stack Exchange上被关闭,原因是该社区认为主机配置/问题超出了讨论范围,建议尝试在Unix & Linux论坛提问。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计