我正面临着从不同的VPC
连接到一组Google Cloud
机器的问题。连接是通过nat box/public IP
地址从源(说Project A
)到目的地(说Project B
)。在另一个项目(比如C
)中有另一组实例。有一个通用的防火墙规则(Target Tag
)允许从两个项目的公共IP地址进行连接。来自Project C
的连接正在工作,但是来自Project A
的连接不是。我看到A项目和B项目之间在其他端口和实例集上还有其他成功的通信。此外,端口和服务已启动并运行(我们能够在项目C的机器上获得响应)。我尝试从源和目标捕获tcpdump。我没有看到任何数据包在目的地和源只有SYN
数据包。
00:33:27.484091 IP projb-instance-01.c.project-B-123.internal.59300 > 4.3.2.1.bc.googleusercontent.com.http: Flags [S], seq 2180601143, win 28400, options [mss 1420,sackOK,TS val 2746803643 ecr 0,nop,wscale 7], length 0
[user@projb-instance-01 ~]$ telnet destination-ip.domain.com 8080
Trying 1.2.3.4...
telnet: connect to address 1.2.3.4: Connection refused
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
01:22:00.499643 IP projC-instance-01.c.project-c.internal.42259 > 4.3.2.1.bc.googleusercontent.com.tproxy: Flags [S], seq 1844998068, win 28400, options [mss 1420,sackOK,TS val 4099848389 ecr 0,nop,wscale 7], length 0
01:22:00.501860 IP 4.3.2.1.bc.googleusercontent.com.tproxy > projC-instance-01.c.project-c.internal.42259: Flags [S.], seq 2589898876, ack 1844998069, win 28160, options [mss 1420,sackOK,TS val 28180717 ecr 4099848389,nop,wscale 7], length 0
01:22:00.501904 IP projC-instance-01.c.project-c.internal.42259 > 4.3.2.1.bc.googleusercontent.com.tproxy: Flags [.], ack 1, win 222, options [nop,nop,TS val 4099848391 ecr 28180717], length 0
01:22:04.889432 IP projC-instance-01.c.project-c.internal.42259 > 4.3.2.1.bc.googleusercontent.com.tproxy: Flags [P.], seq 1:6, ack 1, win 222, options [nop,nop,TS val 4099852779 ecr 28180717], length 5
01:22:04.890293 IP 4.3.2.1.bc.googleusercontent.com.tproxy > projC-instance-01.c.project-c.internal.42259: Flags [.], ack 6, win 220, options [nop,nop,TS val 28185106 ecr 4099852779], length 0
01:22:04.890390 IP 4.3.2.1.bc.googleusercontent.com.tproxy > projC-instance-01.c.project-c.internal.42259: Flags [F.], seq 1, ack 6, win 220, options [nop,nop,TS val 28185107 ecr 4099852779], length 0
调试步骤:
- 在
Project B
中验证端口正在监听0而不是localhost上的一个主机上的服务。
tcp6 0 0 :::8080 :::* LISTEN 2578/airflow-backend
- 端口和服务可从不同项目的主机访问
telnet and curl from a host in project C
- 通过不同的主机和端口从项目A连接到项目B正在工作
请告诉我还有什么方法可以找出连接被拒绝的原因。
提前感谢。
您考虑过使用共享VPC吗?由于您尝试跨多个项目连接vm,因此这种方法应该是最安全且配置和维护最简单的。
我们发现在nat盒的iptables中有一个数据包被过滤的问题,我们删除了它,它工作了