首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NFTABLES:如何在POSTROUTING中获得DNAT

NFTABLES:如何在POSTROUTING中获得DNAT
EN

Stack Overflow用户
提问于 2022-05-17 14:32:33
回答 1查看 769关注 0票数 -1

我在POSTROUTING中设置一个DNAT有问题(我真的需要它来做一个项目)。

在开始时,我尝试使用下面的命令使用iptables设置它:

iptables -t nat -A POSTROUTING -p icmp -d 30.0.0.1 -j DNAT --to-destination 40.0.0.1,但是iptables给了我这个错误iptables v1.8.7 (nf_tables): RULE_APPEND failed (Invalid argument): rule in chain POSTROUTING

然后,我在iptable手册页上读到,我不可能做我想做的事情。

之后,我尝试使用nftable使用以下命令执行相同的操作:

nft add table nat

nft 'add chain nat postrouting { type nat hook postrouting priority -100; }'

nft add rule nat postrouting oif wg-1to2 dnat to 40.0.0.1

但是nftables给了我这个错误Error: Could not process rule: Operation not supported。我认为不可能用nftable来设置一个POSTROUTING的DNAT。

我是错了还是我犯了一些错误?

如果不可能,为什么?这仅仅是没有实现的东西吗?

是否有一些技术问题使其无法实施?

你将如何解决这个问题?

谢谢你的忠告

EN

回答 1

Stack Overflow用户

发布于 2022-05-19 06:21:06

弗朗西斯科,据我所知,你不能在后置做DNAT。

原因是在(内核)路由/转发代码中,几个参数会根据数据包中包含的目的地(例如,下一跳,必须发送该数据包的接口,到达下一跳的MAC地址)进行调整。

如果您执行DNAT,因此您更改了数据包中的目标地址,上述参数可能会变得无效,因此您可能需要再次遍历路由/转发代码。但是,考虑到POSTROUTING钩子在Linux内核中的位置,这是不可能的。例如,它完全支持SNAT。

解决这个问题的一个可能的方法是编写一个eBPF程序来执行DNAT并调整上述参数。希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72275902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档