![Nftables DNAT 从外部到内部接口以及 Web 服务器绑定到的不同端口,如何使用?](https://linux22.com/image/788147/Nftables%20DNAT%20%E4%BB%8E%E5%A4%96%E9%83%A8%E5%88%B0%E5%86%85%E9%83%A8%E6%8E%A5%E5%8F%A3%E4%BB%A5%E5%8F%8A%20Web%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%BB%91%E5%AE%9A%E5%88%B0%E7%9A%84%E4%B8%8D%E5%90%8C%E7%AB%AF%E5%8F%A3%EF%BC%8C%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
有多宿主 Ubuntu 22.04:内部 192.168.0.99/24 外部 12.12.12.12/29(例如)也充当网关。所有(包括从服务器以及从后面的 Lan 访问互联网)均有效,即 IP 转发已打开,SNAT 已设置。我确实设置了 SNAT,因为有静态外部 IP。
Web 服务器仅与内部接口 85 端口绑定。未与外部端口绑定!
需要从 Internet 到 Web 服务器进行外部访问,使用外部端口 40000。
为此我做了以下事情:
nft add rule ip nat prerouting iif ext counter goto extprerouting
nft add rule ip filter input iif ext counter goto extinput
nft add chain ip filter extinput
nft add chain ip nat extprerouting
nft add rule ip nat extprerouting iif ext ip ne saddr 192.168.0.0/24 ip daddr 12.12.12.12 ip protocol tcp tcp dport 40000 counter dnat to 192.168.0.99:85
nft add rule ip filter extinput iif ext ip daddr 192.168.0.99 ip protocol tcp tcp dport 85 ct state { new } counter accept
当我看到 nft list ruleset | grep dnat 时,有一些数据包符合这些规则,但仍然无法访问。
它不起作用。谁能帮助让 DNAT 正常工作?