当 DNAT 和 REDIRECT 都设置相同的规则时,iptables 如何工作?

当 DNAT 和 REDIRECT 都设置相同的规则时,iptables 如何工作?
$ iptables -t nat -L -n
Chain KUBE-PORTALS-CONTAINER (1 references)
target     prot opt source               destination         
REDIRECT   tcp  --  0.0.0.0/0    11.1.1.88      /* service-nginx */ tcp dpt:8001 redir ports 43318
Chain KUBE-PORTALS-HOST (1 references)
target     prot opt source               destination         
DNAT   tcp  --  0.0.0.0/0    11.1.1.88    /* service-nginx */ tcp dpt:8001 to:10.10.103.58:43318

[更新] 顺便说一句,10.10.103.58 只是本地机器 eth0 的 IP。

我看到了答案IPTABLES 中的 DNAT 和 REDIRECT 之间的区别,所以我知道 REDIRECT 仅适用于本地重定向。

[更新] 但我的问题是,在这种情况下,Kubernetes 在同一台机器上同时设置了 DNAT 和 REDIRECT,为什么?

[更新] 从链的名称来看,我猜测DNAT会将任何从主机发送到的请求转发到11.1.1.8810.10.103.58:43318但是对于从在此主机上运行的容器发送的请求,该REDIRECT链将起作用。

我对吗?

答案1

无需同时设置两个规则。对于相同类型的流量,其中一个规则就足够了。

  1. 如果您想要将流量重定向到本地计算机(防火墙),则可以使用其中任意一个。DNAT如果您的计算机有多个 IP 地址,并且想要在本地计算机上指定除由 拾取的 IP 地址之外的其他 IP 地址,则使用REDIRECT可能会很有用。
  2. 如果您想将流量重定向到其他机器,则需要使用DNAT指定新的目的地。

总之DNAT就是比较通用,可以在所有情况下使用。

相关内容