我试图将到达防火墙端口 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
规则将允许它。
是的,您可以要求数据包匹配多个事物(例如目标地址和目的端口)在相同的规则中。