输入链中的 nftables dnat

输入链中的 nftables dnat

我试图将到达防火墙端口 80 和 443 的所有流量重定向到10.133.8.11.

我收集自输入链中的 NAT 应该是可能的。但好像dnat不是。什么样的 NAT 是可能的?

我尝试使用输入链执行此操作的原因是,如果我将其放入预路由链中,则所有流量都会被删除,而不仅仅是发往防火墙的流量。

到目前为止,这是我的尝试:

表 inet nat 已存在。

# nft 'add chain inet nat input { type nat hook input priority -100; }'

# nft 'add rule inet nat input tcp dport { 80, 443 } dnat ip to 10.133.8.11'
Error: Could not process rule: Operation not supported
add rule inet nat input tcp dport { 80, 443 } dnat ip to 10.133.8.11
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

#
``

答案1

您正在尝试将到达本地端口的数据包重定向到非本地目的地。为了成功,需要在做出路由决策之前(即在 PREROUTING 链中)完成该重定向。

INPUT 链中的数据包已经在传送到某个本地进程的途中,因此虽然更改端口号应该不受限制,但更改目标 IP 地址可能是不可能的或仅限于本地主机上使用的地址。

你可以做类似的事情

nft 'add chain inet nat prerouting { type nat hook prerouting priority -100; };'
nft 'add rule inet nat prerouting ip daddr <firewall's own IP here> tcp dport { 80, 443 } dnat ip to 10.133.8.11'

因为您的 DNAT 会影响路由决策(本地与非本地),所以它必须在钩子上完成prerouting

是的,您可以在预路由链中更改原始目标地址之前对其进行匹配。然后,其他链将看到具有更改的目标 IP 地址的数据包,因此您必须注意,例如您的forward规则将允许它。

是的,您可以要求数据包匹配多个事物(例如目标地址目的端口)在相同的规则中。

相关内容