端口重定向不适用于IP表

时间:2020-06-30 13:13:59

标签: tcp iptables istio

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

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

作为一种解决方案,我们计划使用linux iptables进行端口重定向,该重定向将通过minion重定向到端口80和443的端口,NLB将路由到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

你们对此有任何想法吗?

1 个答案:

答案 0 :(得分:0)

您正在使用<?php phpinfo(); ?> 链。这是从服务器内部到网络的软件包链,而不是传入软件包的链。

要从端口root@ubuntu-16:~# curl -v http://10.11.0.230:2222/index.php * Trying 10.11.0.230... * Connected to 10.11.0.230 (10.11.0.230) port 2222 (#0) > GET /index.php HTTP/1.1 > Host: 10.11.0.230:2222 > User-Agent: curl/7.47.0 > Accept: */* > < HTTP/1.1 200 OK < Date: Wed, 01 Jul 2020 07:51:24 GMT < Server: Apache/2.4.18 (Ubuntu) < Vary: Accept-Encoding < Transfer-Encoding: chunked < Content-Type: text/html; charset=UTF-8 < <!DOCTYPE html> <html> <body> ... ... ... 重定向到端口OUTPUT,您需要使用80链。该链主要用于DNAT。试试这个:

31380

要详细了解PREROUTING中的表和链,请选中此link