Python Socket实现服务端及端口转发后公网访问超时问题咨询
问题结论
该问题不是服务端和客户端运行在同一设备导致的,你补充的外网访问同样超时的测试结果已经可以排除该可能性。
错误原因与排查方案
- 首先确认运营商是否分配了真实公网IP
目前多数国内运营商默认给家庭宽带分配大内网IP(CGNAT),你路由器WAN口显示的IP实际是运营商内网的保留地址,外部网络根本无法直接访问。你可以将路由器WAN口显示的IP和公开IP查询工具返回的你当前网络公网IP做对比,二者不一致即可判定为CGNAT。这种情况直接拨打运营商客服电话,告知需要使用远程监控功能申请公网IP,一般都会免费开通。 - 检查路由器端口转发配置正确性
- 转发规则需指定协议为TCP,外部端口、内部端口均填写2112,内部IP固定为你服务端设备的私网IP
192.168.0.143 - 给服务端设备设置固定静态IP,不要使用DHCP自动分配,避免设备重启后IP变更导致转发规则失效
- 确认路由器开启了WAN口流量转发权限,部分路由器默认拦截公网主动发起的入站请求,需手动开启对应规则
- 转发规则需指定协议为TCP,外部端口、内部端口均填写2112,内部IP固定为你服务端设备的私网IP
- 检查服务端设备配置
- 确认你当前连接的局域网被Windows识别为专用网络,公用网络默认会拦截外部入站连接
- 除了系统防火墙,还要检查安全管家、杀毒软件等第三方安全工具是否拦截了2112端口的入站请求
- 代码中
server.bind(('', 2112))的写法是正确的,代表监听当前设备所有网卡的请求,无需修改为绑定固定私网IP
- (可选)内网用公网IP访问失败的补充处理
如果后续外网可以正常访问,但内网设备用公网IP访问仍失败,是因为路由器未开启NAT回流(回环路由)功能,部分家用路由器默认不支持该功能,属于正常情况,内网访问直接用私网IP即可。
验证方法
配置完成后,使用公开的端口扫描工具扫描你的公网IP+2112端口,显示端口开放即代表配置生效,此时再运行客户端即可正常连接。
内容的提问来源于stack exchange,提问作者Umang Lunia
相关产品推荐
相关产品推荐

