问题背景
我有一个子网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论坛提问。