2016-10-02 67 views
2

我正尝试在Google Compute Engine上承载TCP套接字服务器,我在GCE防火墙规则(套接字端口0.0.0.0/0 tcp:11000)上添加了以下规则应用于所有的目标),但港口仍然无法从外部使用公共知识产权(我的情况是短暂的)。GCE允许特定端口上的传入流量

在这种情况下还有更多工作要做吗?我应该使用虚拟机上的ufw来设置其他规则吗?

任何帮助或提示将不胜感激,thx。

编辑: 1)防火墙设置:

NAME NETWORK SRC_RANGES RULES SRC_TAGS TARGET_TAGS

默认允许-HTTP默认0.0.0.0/0 TCP:80的HTTP服务器

默认允许-https default 0.0.0.0/0 tcp:443 https-server

default-allow-icmp default 0.0.0.0/0 icmp

默认允许内部默认10.128.0.0/9 TCP:0-65535,UDP:0-65535,ICMP

默认允许-RDP默认0.0.0.0/0 TCP:3389

默认 - 允许-SSH默认0.0.0.0/0 TCP:22

插座端口默认0.0.0.0/0 TCP:11000

2)在VM本身SocketListener类(C#)给出了错误:

无法分配请求在System.Net.Sockets.Socket.DoBind(端点endPointSnapshot,为SocketAddress的SocketAddress) 解决 在System.Net.Sockets.Socket.Bind(端点localEP)

“IPEndpoint由机器的公网IP的和端口11000

+0

1)将您的防火墙设置粘贴在这里; 2)你得到什么错误代码? 3)尝试通过内部IP从同一网络中的另一台虚拟机访问它,以确保服务已启动。 – Dagang

+0

@Dagang编辑我的问题,但目前我不能从另一个VM访问。 – Salem

回答

1

这是GCE的一个经典问题,您必须将您的服务器套接字绑定到0.0.0.0,而不是外部IP。我不知道这是否是由设计。

外部IP是一个虚拟IP。基础设施知道如何将针对IP的流量引导至您的虚拟机,但不会绑定到任何虚拟机的网络接口。如果在虚拟机中运行sudo ifconfig,则只能在eth0上看到内部IP。

+0

令人惊叹!谢谢! – Salem