繁体   English   中英

Google Cloud + Linux TCP连接被拒绝,是什么原因造成的?

[英]Google Cloud + Linux TCP connection refused, what causes it?

我有一个在Google Cloud中运行的VM实例“实例1”(Linux实例1 3.16.0-4-amd64#1 SMP Debian 3.16.43-2 + deb8u5(2017-09-19)x86_64 GNU / Linux)。

我在端口1234上有一项服务,当“ instance-1”本身要求时:

curl localhost:1234

产生预期的响应。

我已经设置了防火墙规则:

my-service Ingress  Apply to all     IP ranges: 0.0.0.0/0 tcp:1234   Allow 1000

除了端口号和优先级外,这与default-allow-http规则相同。

但是,当从互联网尝试时(aa.bb.cc.dd代表实例1的公共IP地址):

curl aa.bb.cc.dd:1234 --> curl: (7) Failed to connect to aa.bb.cc.dd port 1234: Connection refused

然而

curl aa.bb.cc.dd:80

给出预期的响应(与我想要的1234不同)

作为实验,我在与“ instance-1”相同的子网络中创建了另一个云实例“ instance-2”。 它应该被默认规则覆盖:

default-allow-internal Ingress  Apply to all     IP ranges: 10.128.0.0/9 tcp:0-65535, udp:0-65535, 1 more    Allow 65534

但它与instance-1:1234的连接也被拒绝。 即使删除我的自定义规则。

我认为这不是instance-1上的本地防火墙问题:

xxx@instance-1:~/.ssh$ sudo iptables -L Chain INPUT (policy ACCEPT) target     prot opt source               destination          Chain FORWARD (policy ACCEPT) target     prot opt source               destination          Chain OUTPUT (policy ACCEPT) target     prot opt source               destination

因此,我为2个不同的端口设置了相同的Google Cloud Firewall规则,但是它们被接受而另一个被拒绝。 我不太明白为什么。 至于实例1上的其他防火墙,我没有看到。

是什么导致我从instance-1本身以外的任何地方拒绝我与instance-1的连接?

linux上的服务可以选择监听的地址。 如果服务侦听127.0.0.1 ,则即使没有防火墙,它也将接受本地连接。 为了接受任何接口上的连接,服务应在0.0.0.0侦听。

要对此进行测试,请运行sudo netstat -lntp ,并查看您的服务正在侦听哪个地址。 如果显示127.0.0.1:1234 ,那么您需要更改它的监听地址。 如果显示0.0.0.0:1234 ,那就是另一个问题。

不同的软件需要不同的步骤来更改侦听地址。 Apache使用Listen指令 Tomcat HTTP连接器使用address连接器参数 在编写自己的代码时,请在套接字上调用bind时指定侦听地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM