无法从外部设备访问本地Django web服务器,常规排查操作未生效
排查方向
- 首先确认你使用的IP是否为独立公网IP
绝大多数家庭宽带默认分配运营商内网IP(网段为10.x.x.x、172.16.x.x-172.31.x.x、192.168.x.x),这类IP无法直接从公网访问。你可以直接在本机浏览器搜索「我的IP」拿到公网IP,和本机网卡配置的IP对比,二者不一致说明是内网IP,需要联系运营商开通公网IP,或使用FRP、Ngrok等内网穿透工具实现外部访问。 - 检查路由器端口转发配置
你之前配置的是本机iptables规则,还需要在路由器管理后台配置端口转发规则:将公网访问的8000端口(或你自定义的端口)TCP协议,转发到你运行Django服务的设备的局域网IP对应端口。 - 先排查局域网连通性,再验证公网访问
找一台和服务器连接同一WiFi的设备(比如手机),输入服务器的局域网IP+端口访问,要是能正常打开,说明服务本身和本机防火墙配置没问题,问题出在公网链路;要是打不开,继续排查本机配置。 - 确认端口监听状态正确
执行ss -tulnp | grep 8000查看端口监听信息,确认监听地址为0.0.0.0:8000,如果是127.0.0.1:8000说明服务仅绑定了本地回环接口,外部无法访问,需要杀死所有Django相关进程后重新执行启动命令。 - 排查本机其他防火墙规则
除了iptables,部分系统默认开启ufw、firewalld等防火墙服务:- Debian/Ubuntu系统执行
ufw status查看ufw状态,如为开启状态,执行ufw allow 8000/tcp放通端口 - CentOS/RHEL系统执行
firewall-cmd --state查看firewalld状态,如为开启状态,执行firewall-cmd --add-port=8000/tcp --permanent && firewall-cmd --reload放通端口
- Debian/Ubuntu系统执行
- 规避运营商端口封禁
国内运营商默认封禁80、8080、443等常用端口,你可以换用高位端口(比如18000)测试,启动时执行python manage.py runserver 0.0.0.0:18000,同步修改路由器转发规则和防火墙规则后重试。
内容的提问来源于stack exchange,提问作者pepeisadog
相关产品推荐
相关产品推荐

