我有一个在f1-micro实例上运行COS版'cos-dev-61-9733-0-0'的VM实例。我已配置外部IP地址146.xxx.xxx.106并已分配给此实例。我正试图从我的本地工作站测试到这个实例的HTTP连接,到目前为止都没有成功。
我在“防火墙”下启用了“允许HTTP流量”和“允许HTTPS流量”设置,即使它们在保存后没有显示已选中的复选框。但网络标签的值为“http-server,https-server”,如下所示:
我还确认“网络>防火墙设置”具有默认HTTP规则,如下所示:
我发现此处报告的类似问题无法解决我的问题: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 / sshdtcp 0 0 0.0.0.0:5355 0.0.0.0:*
LISTEN 613 / systemd-resolvetcp 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 /
从本地工作站:
$ 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
$ ssh 146.xxx.xxx.106 debianuser @ cos-dev-61-dockervm1~ $
$ 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个主机)
答案 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
提供服务。