Tcp 端口重定向不适用于IP表

Tcp 端口重定向不适用于IP表,tcp,iptables,istio,Tcp,Iptables,Istio,我们正在努力将istio入口网关与NLB一起使用,默认情况下,入口网关在nodeport(范围30000-32767)上运行,这意味着更高的端口 但是我们已经有了配置为端口80-443的现有安全组规则,我们有很多源IP的规则,我们几乎达到了安全组规则的极限。所以我们不能再为31380和31390端口制定更多的规则了。我们需要一种方法将相同的安全组与入口网关和NLB一起使用 作为一个解决方案,我们计划使用linux iptables进行端口重定向,该端口重定向将通过minion NLB重定向到端口

我们正在努力将istio入口网关与NLB一起使用,默认情况下,入口网关在nodeport(范围30000-32767)上运行,这意味着更高的端口

但是我们已经有了配置为端口80-443的现有安全组规则,我们有很多源IP的规则,我们几乎达到了安全组规则的极限。所以我们不能再为31380和31390端口制定更多的规则了。我们需要一种方法将相同的安全组与入口网关和NLB一起使用

作为一个解决方案,我们计划使用linux iptables进行端口重定向,该端口重定向将通过minion NLB重定向到端口80和443,将路由到31380和31390(入口网关节点报告)

但我很难做到这一点,端口重定向没有正常发生,我看不到任何数据包通过NLB命中入口网关

我已经在我的工作节点中配置了以下iptables规则

iptables -A INPUT -p tcp -m tcp --dport 31380 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 31380 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:31380
但当我试图从另一个实例到达这个仆从的端口80(入口网关也在同一个节点中)时,我得到了以下错误:

$ curl -v 10.1.29.77

* Rebuilt URL to: 10.1.29.77/
*   Trying 10.1.29.77...
* TCP_NODELAY set
* connect to 10.1.29.77 port 80 failed: Connection refused
* Failed to connect to 10.1.29.77 port 80: Connection refused
* Closing connection 0
curl: (7) Failed to connect to 10.1.29.77 port 80: Connection refused
但我可以从同一个实例访问节点端口

$ curl -v 10.1.29.77:31380
* Rebuilt URL to: 10.1.29.77:31380/
*   Trying 10.1.29.77...
* TCP_NODELAY set
* Connected to 10.1.29.77 (10.1.29.77) port 31380 (#0)
> GET / HTTP/1.1
> Host: 10.1.29.77:31380
> User-Agent: curl/7.61.1
> Accept: */*
> 
< HTTP/1.1 404 Not Found
< date: Tue, 30 Jun 2020 12:52:17 GMT
< server: istio-envoy
< content-length: 0

$curl-v10.1.29.77:31380
*重建的URL地址:10.1.29.77:31380/
*正在尝试10.1.29.77。。。
*TCP_节点集
*连接到10.1.29.77(10.1.29.77)端口31380(#0)
>GET/HTTP/1.1
>主持人:10.1.29.77:31380
>用户代理:curl/7.61.1
>接受:*/*
> 
未找到

你们对此有什么想法吗?

你们正在使用
输出链。这是从服务器内部到网络的包链,而不是传入包的链

要从端口
80
重定向到端口
31380
,需要使用
PREROUTING
链。该链条主要用于DNAT。试试这个:

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 127.0.0.1:31380

要了解有关
iptables
中的表和链的更多信息,请选中此

您正在使用的
输出
链。这是从服务器内部到网络的包链,而不是传入包的链

要从端口
80
重定向到端口
31380
,需要使用
PREROUTING
链。该链条主要用于DNAT。试试这个:

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 127.0.0.1:31380
要了解有关
iptables
中的表和链的更多信息,请选中此项