server - 如何打开可公开访问的端口?
问题描述
我在我的电脑上运行一个服务器(Photon),它使用端口 9090。
我可以使用本地 IP 地址访问它,使用内部路由器网络的 IP 地址而不是公共 IP 地址。即使通过这个公共 IP 地址也可以完美地 ping。
要公开运行服务器,我不使用路由器而是直接连接。所有可能的防火墙都被禁用,没有防病毒,入站规则中的所有端口都打开(以防万一)。但还是telnet xxx.xxx.xxx.xx 9090
给了我Could not open connection to the host, on port 9090: Connect failed
。
如果我进入netstat -aonb
cmd 我会看到
TCP 0.0.0.0:9090 监听
据我了解,这意味着必须在端口 9090 上监听任何 IP 地址(0.0.0.0)
但正如在线服务所说,9090 端口仍然关闭。如果我尝试从客户端连接到服务器(因为它适用于内部网络)我得到Error: 1004 Master peer error timeout
我还能做些什么来打开这个端口并最终通过公共网络访问它?
我使用 Windows。
解决方案
问题的描述似乎不一致。最有可能的是,“所有可能的防火墙都已禁用 [...并且] 入站规则中的所有端口都已打开”的说法是不正确或具有误导性的一种或两种。
如果
- 测试客户端可以成功 ping 目标机器,并且
netstat
表明客户端正在目标机器上监听 0.0.0.0:9090 / TCP,但是- 测试客户端无法连接到同一地址的端口 9090,并且
- 测试客户端可以通过它的其他地址成功连接到目标机器上的端口 9090,之前和之后
那么到目前为止,最有可能的情况是失败的连接尝试被防火墙阻止。即使服务器本身上根本没有运行防火墙,也可能在客户端和服务器之间的网络路径上的路由器上运行一个防火墙。请注意,路由器防火墙通常区分内部流量和外部流量,对后者应用更严格的控制。有些对两者有完全不同的规则集。
推荐阅读
- javascript - 提交后渲染列表时如何解决转换组的问题
- swift - React Native 在 Swift 中实例化单例原生模块
- lua - Lua 宏:尝试调用全局 '__def'(一个 nil 值)
- c# - 如何在代码中获取线程“位置”/StackTrace?
- c++ - 为每个 GPU 实例化单独的 TensorFlow 会话
- javascript - 为什么这个正则表达式的第二部分不匹配?
- php - 将压缩的 JSON 发布到 Laravel API 端点
- java - 扩展父级的静态嵌套类与也扩展该父级的顶级类之间的区别
- ios - Intune 托管与非托管设备
- r - 基于R中的列基于间隔制作垃圾箱