无法连接到在Google Compute Engine VM实例上运行的HTTP服务

时间:2017-07-20 21:06:52

标签: google-compute-engine connectivity

我有一个在f1-micro实例上运行COS版'cos-dev-61-9733-0-0'的VM实例。我已配置外部IP地址146.xxx.xxx.106并已分配给此实例。我正试图从我的本地工作站测试到这个实例的HTTP连接,到目前为止都没有成功。

我在“防火墙”下启用了“允许HTTP流量”和“允许HTTPS流量”设置,即使它们在保存后没有显示已选中的复选框。但网络标签的值为“http-server,https-server”,如下所示:

enter image description here

我还确认“网络>防火墙设置”具有默认HTTP规则,如下所示:

enter image description here

我发现此处报告的类似问题无法解决我的问题:Cannot access Google Cloud Compute Instance External IP 有关我缺少的其他设置 的任何建议都将受到高度赞赏。我查找了操作系统级别的防火墙设置,但我找不到足够的Chromium OS文档。

以下是我遵循的步骤:

在GCE实例上:

  

$ sudo python -m SimpleHTTPServer 80

     

在0.0.0.0端口80上提供HTTP ...

     

$ sudo netstat -antup

     

活跃的互联网连接(服务器和已建立)

     

Proto Recv-Q Send-Q本地地址外地地址
  状态PID /程序名称

     

tcp 0 0 0.0.0.0:22 0.0.0.0:*
  LISTEN 638 / sshd

     

tcp 0 0 0.0.0.0:5355 0.0.0.0:*
  LISTEN 613 / systemd-resolve

     

tcp 0 0 0.0.0.0:80 0.0.0.0:*
  LISTEN 12750 / python2.7

跑完curl命令并得到以下回复:

  

$ curl http://localhost:80    目录列表/

目录列表/


  • .bash_history
  • .bash_logout
  • .bash_profile < / li>
  • .bashrc
  • .docker /
  • .ssh /
  • .viminfo
  • apps /

从本地工作站:

  1. Ping外部IP地址并收到回复:
  2.   

    $ ping 146.xxx.xxx.106 PING 146.xxx.xxx.106   (146.xxx.xxx.106)56(84)字节的数据。 146.xxx.xxx.106中的64个字节:   icmp_seq = 1 ttl = 63 time = 1131 ms ^ C.   --- 146.xxx.xxx.106 ping统计--- 3包传输,3接收,0%丢包,时间2007ms

    1. 成功通过SSH连接到实例:
    2.   

      $ ssh 146.xxx.xxx.106   debianuser @ cos-dev-61-dockervm1~ $

      1. Ran'nmap'命令但它只显示SSH端口22打开:
      2.   

        $ nmap -Pn 146.xxx.xxx.106

             

        在2017-07-20 11:35 CDT Nmap上启动Nmap 6.47(http://nmap.org)   扫描报告106.xxx.xxx.146.bc.googleusercontent.com   (146.xxx.xxx.106)主机已启动(延迟0.17秒)。未显示:999已过滤   港口港口服务22 / tcp open ssh

             

        完成Nmap:在86.74秒内扫描1个IP地址(1个主机)

1 个答案:

答案 0 :(得分:2)

Container-optimized OS图像在操作系统级别启用了防火墙以阻止所有传入流量(ssh除外)。默认情况下,仅允许传出流量。

除了配置Google Compute Engine防火墙规则以允许传入VM的流量外,您还需要确保在VM中运行的操作系统也允许这样做。

docs for Container-Optimized OS

中提到了这一点
  

Configuring the Host Firewall

     

默认情况下,容器优化的操作系统主机防火墙仅允许   传出连接,仅接受传入连接   SSH服务。接受传入的连接   容器优化的OS实例,您必须打开您的服务端口   正在听。

     

例如,接受来自其他实例的连接   同样的Compute Engine项目,在你的两个上运行以下命令   开发工作站,以及容器优化的OS实例:

# On your workstation:
SUBNETWORK_URI=$(gcloud compute instances describe ${COS_INSTANCE_NAME} | grep -w 'subnetwork:' | awk '{ print $2 }')
SUBNET_PREFIX=$(gcloud compute networks subnets describe ${SUBNETWORK_URI} | grep -w 'ipCidrRange:' | awk '{ print $2 }')

# On your Container-Optimized OS instance:
sudo iptables -w -A INPUT -p tcp -s ${SUBNET_PREFIX} -j ACCEPT
sudo iptables -w -A INPUT -p udp -s ${SUBNET_PREFIX} -j ACCEPT
 As another example, if you need to accept HTTP (port 80) connections from any source IP address, run the following commands on
     

您的Container-Optimzied OS实例:

# On your Container-Optimized OS instance:
sudo iptables -w -A INPUT -p tcp --dport 80 -j ACCEPT
     

通常,建议您将主机防火墙配置为   systemd通过cloud-init提供服务。

相关问题