我试图在Google Compute Engine上托管TCP套接字服务器,我在GCE防火墙规则上添加了以下规则(套接字端口0.0.0.0/0 tcp:11000适用于所有目标)但是使用公共IP(在我的情况下是短暂的)外部仍然无法访问端口。
在这种情况下还有更多工作要做吗?我应该在VM本身使用ufw来设置其他规则吗?
任何帮助或提示都将不胜感激,谢谢。
编辑: 1)防火墙设置:
名称网络SRC_RANGES规则SRC_TAGS TARGET_TAGS
default-allow-http默认值0.0.0.0/0 tcp:80 http-server
default-allow-https默认值0.0.0.0/0 tcp:443 https-server
default-allow-icmp default 0.0.0.0/0 icmp
default-allow-internal默认值10.128.0.0/9 tcp:0-65535,udp:0-65535,icmp
default-allow-rdp默认值0.0.0.0/0 tcp:3389
default-allow-ssh默认值0.0.0.0/0 tcp:22
sockets-port default 0.0.0.0/0 tcp:11000
2)在VM本身上,SocketListener类(C#)给出错误:
无法分配请求的地址 在System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot,SocketAddress socketAddress) 在System.Net.Sockets.Socket.Bind(EndPoint localEP)
" IPEndpoint由机器的公共IP和端口11000
组成答案 0 :(得分:1)
这是GCE的典型问题,您必须将服务器套接字绑定到0.0.0.0,而不是外部IP。我不知道这是不是设计的。
外部IP是虚拟IP。基础架构知道如何将针对IP的流量定向到您的VM,但它不受任何VM的网络接口的约束。如果在VM中运行execution(* mypackage.PersonaServiceImpl.*(..))
,则只能在eth0上看到内部IP。