尽管有防火墙规则,但仍无法连接到 Google Cloud Compute 实例上的端口 80

Ros*_*one 9 google-compute-engine

总之,虽然我设置了允许 tcp:80 的防火墙规则,但我的 GCE 实例(位于“默认”网络上)不接受到端口 80 的连接。在我的实例上似乎只有端口 22 打开。我可以 ping 它,但不能在 64 跳以下跟踪路由到它。

接下来是我的调查,使我得出这些结论。

gcloud beta compute firewall-rules list

NAME                    NETWORK  DIRECTION  PRIORITY  ALLOW                         DENY
default-allow-http      default  INGRESS    1000      tcp:80
default-allow-https     default  INGRESS    1000      tcp:443
default-allow-icmp      default  INGRESS    65534     icmp
default-allow-internal  default  INGRESS    65534     tcp:0-65535,udp:0-65535,icmp
default-allow-rdp       default  INGRESS    65534     tcp:3389
default-allow-ssh       default  INGRESS    65534     tcp:22
temp                    default  INGRESS    1000      tcp:8888


gcloud compute instances list
NAME   ZONE        MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
ssrf3  us-west1-c  f1-micro      true         10.138.0.4   35.197.33.182  RUNNING


gcloud compute instances describe ssrf3
...
name: ssrf3
networkInterfaces:
- accessConfigs:
  - kind: compute#accessConfig
    name: external-nat
    natIP: 35.197.33.182
    type: ONE_TO_ONE_NAT
  kind: compute#networkInterface
  name: nic0
  network: https://www.googleapis.com/compute/v1/projects/hack-170416/global/networks/default
  networkIP: 10.138.0.4
  subnetwork: https://www.googleapis.com/compute/v1/projects/hack-170416/regions/us-west1/subnetworks/default
...
tags:
  fingerprint: 6smc4R4d39I=
  items:
  - http-server
  - https-server
Run Code Online (Sandbox Code Playgroud)

我通过 ssh 进入 35.197.33.182(这是 ssrf3 实例)并运行:

sudo nc -l -vv -p 80
Run Code Online (Sandbox Code Playgroud)

在我的本地机器上,我运行:

nc 35.197.33.182 80 -vv
hey
Run Code Online (Sandbox Code Playgroud)

但什么也没有发生。所以我尝试ping主机。看起来很健康:

ping 35.197.33.182 
PING 35.197.33.182 (35.197.33.182): 56 data bytes
64 bytes from 35.197.33.182: icmp_seq=0 ttl=57 time=69.172 ms
64 bytes from 35.197.33.182: icmp_seq=1 ttl=57 time=21.509 ms
Run Code Online (Sandbox Code Playgroud)

Traceroute 在 64 跳后退出,没有到达 35.197.33.182 目的地。

所以我用nmap检查哪些端口是开放的:

nmap 35.197.33.182

Starting Nmap 7.12 ( https://nmap.org ) at 2017-06-18 16:39 PDT
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.06 seconds



nmap 35.197.33.182 -Pn

Starting Nmap 7.12 ( https://nmap.org ) at 2017-06-18 16:39 PDT
Nmap scan report for 182.33.197.35.bc.googleusercontent.com (35.197.33.182)
Host is up (0.022s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 6.84 seconds
Run Code Online (Sandbox Code Playgroud)

...即使我nc -l -p 80在 35.197.33.182 上运行。

Ily*_*ski 7

确保 VM 级防火墙没有干预。例如,与所有其他默认映像相比,Container-Optimized OS 有点特殊:

默认情况下,Container-Optimized OS 主机防火墙仅允许传出连接,并仅接受通过 SSH 服务传入的连接。要接受 Container-Optimized OS 实例上的传入连接,您必须打开您的服务正在侦听的端口。

https://cloud.google.com/container-optimized-os/docs/how-to/firewall


小智 6

选中“允许 HTTP 流量”和“允许 HTTPS 流量”两个复选框即可解决问题。这创建了两个防火墙规则,打开了端口 80 和 443。由于某种原因,为这些端口手动添加规则不起作用,但它可以通过选中复选框来起作用。

虚拟机实例详细信息