![nftables dnat 转发无法正常工作](https://linux22.com/image/717155/nftables%20dnat%20%E8%BD%AC%E5%8F%91%E6%97%A0%E6%B3%95%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C%20.png)
再会,
我目前正在从 iptables 迁移到 nftables。问题是我的 systemd 容器在 NAT 后面运行,但我想将 443 或 80 等端口转发给它们。当我使用以下命令集时没有错误消息,但当我使用 nftables 时我也无法访问我的 Web 服务器。
提前谢谢了。
致以最诚挚的问候,Felix
编辑:问题已通过有用的评论得到解决。谢谢!
答案1
感谢 Роман Иванов 提供的有用信息nft monitor
。
NAT 不起作用,因为我在过滤器转发的末尾使用了这个规则:
iifname wan0 reject
在链式 NAT 中你需要规则:
NAT => 预路由
nft add rule nat prerouting iifname wan0 tcp dport { 80, 443 } dnat 192.168.0.10
在链式过滤器中你需要规则:
筛选 => 前进
nft add rule filter forward iifname wan0 oifname lan0 ip daddr 192.168.0.10 tcp dport { 80, 443 } accept
答案2
您可以采取以下一些步骤:
- 类型 nat hook 预路由优先级 0;<-根据 NF_IP_PRI_NAT_DST netfilter 常量应为 -100(减一百)
- 在预路由中使用“meta nftrace set 1”,并使用“nft monitor”调试数据包流
- 最简单的规则集,用于隔离问题并举例说明
我的 dnat 也不起作用。从一个 iface 上一切正常,但从另一个上不行。
数据包进入预路由,dnat 被接受但此后什么也没有发生。“Conntrac -E”看不到这些包。