我有一个 EC2 实例和一个需要从实例内部发送到 EIP 的应用程序。
我正在尝试在输出链上配置一个 dnat,这样数据包就不会传到互联网并返回。
我尝试过以下内容:
nft add table ip table
nft add chain table output '{ type filter hook output priority raw; policy accept; }'
nft add rule tgw-routing output oif "ens7" ip daddr "A.A.A.A" ip daddr set "B.B.B.B" accept
其中 AAAA 是 EIP 地址,BBBB 是 EC2 实例上的私有地址。
如果我执行数据包跟踪,我可以看到转换已经发生,但它被发送到默认网关的 MAC,就好像转换是在其路由决策之后发生的一样。
有关更多上下文,我正在尝试复制此 iptables 规则:
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DNAT all -- anywhere A.A.A.A to:B.B.B.B
哪个按我想要的方式工作,但有人告诉我我不能使用 iptables,所以需要一个 nftables 解决方案。
将
chain type
from更改filter
为route
- 似乎为我解决了这个问题。