1、先检查模组是否拨号成功?若拨号成功继续下一步,若拨号失败检查拨号日志。
2、检查PDP上下文是否激活?网络注册是否成功?拨号成功不代表数据业务激活
比如AT+CGACT?检查PDP上下文是否激活
比如AT+CGREG?检查网络注册状态
比如AT+CSQ检查信号强度,信号太差也会导致连接不稳定
比如AT+COPS?检查当前注册的运营商网络
比如AT+CGPADDR获取模组从运营商网络层分配到的公网IP地址。如果没有获取到IP,说明核心网没给分配数据通道,需要换卡测试
3、若拨号成功,PDP也已激活,尝试在模组内部ping 8.8.8.8,让模组自身去ping公网IP,这样可以测试”从模组到互联网“的连通性,绕过上位机,先排查模组本身的问题,或者网络侧的问题。
4、如果8.8.8.8能ping通,再尝试ping www.baidu.com,如果不通,则进行下一步排查。
5、上位机执行ifconfig和ip addr show,看网卡是否真的获取到IP地址?IP地址是否在合理的私有地址段(比如10.x.x.x,100.x.x.x.,192.x.x.x)。
6、ping网关IP,检查上位机到模组内部网桥/路由功能的连通性,如果网关ping不通,那么问题出在上位机与模组的本地连接上。
7、ping www.baidu.com观察是否能解析出IP,如果ping 8.8.8.8能通,但是ping www.baidu.com不通,基本上可以断定是DNS问题。
8、ip route show检查默认路由是否指向模组提供的网关,比如,应该有一条类似0.0.0.0 0.0.0.0 via 10.0.0.1的路由,其中10.0.0.1是模组的网关。如果默认路由指向了其他网卡,数据就不会走模组。
9、大部分嵌入式模组在拨号后,会作为网关为上位机提供NAT服务。需要确认模组的NAT功能是否启用,通常是默认启用。
10、iptables检查防火墙规则,尝试清除防火墙规则。
常见问题模式
有IP,无网关→ 检查模组DHCP服务或静态配置
有网关,ping不通→ 检查上位机到模组的本地链路(防火墙、驱动)
能ping 8.8.8.8,不能访问网站→DNS问题,检查
/etc/resolv.conf模组无公网IP→ SIM卡问题(欠费、APN错误、数据业务未开通)
拨号成功后,上位机网卡的配置应该形成一个完整的出站路径:上位机 → 私有IP → 模组网关 → NAT转换 → 模组公网IP → 互联网。任何一环中断都会导致无法上网。
数据包流转路径
1.上位机侧(出站)
应用层:应用程序(如浏览器、ping)产生请求
网络层:操作系统封装数据包
源地址:私有IP(如
192.168.1.100)源端口:随机高端口(如
54321)目的地址:目标服务器公网IP
目的端口:服务端口(如
80)
2.路由决策
系统检查路由表,发现目标不在本地子网
根据默认路由(
0.0.0.0/0 via 192.168.1.1)将包发送到模组网关
3.模组网关接收
模组在
192.168.1.1监听,收到数据包识别这是需要转发到外网的流量
4.NAT转换(最关键步骤)
模组执行SNAT(源地址转换):
映射表建立:
(192.168.1.100:54321) ↔ (100.80.50.30:35000)包头重写:
源IP:
192.168.1.100→100.80.50.30(模组公网IP)源端口:
54321→35000(新映射端口)目的地址不变
5.公网传输
转换后的数据包以模组的公网IP身份进入运营商网络
经过多个路由器跳转到达目标服务器
6.返回路径(入站)
服务器响应发送到
100.80.50.30:35000模组查NAT表,反向转换:
目的IP:
100.80.50.30→192.168.1.100目的端口:
35000→54321
转发回上位机
故障排查对应点
当上网失败时,可按此路径逐段排查:
| 故障段 | 检查方法 | 可能问题 |
|---|---|---|
| 上位机→模组网关 | ping 192.168.1.1 | 本地链路断开,IP冲突,防火墙 |
| 模组NAT功能 | 模组AT指令:AT+CGACT?AT+CGPADDR | NAT未启用,无公网IP,PDP未激活 |
| 模组→运营商 | AT+PING="8.8.8.8" | SIM卡欠费,信号弱,APN错误 |
| DNS解析 | nslookup baidu.com | DNS服务器不可达,配置错误 |
| 完整路径 | traceroute 8.8.8.8 | 查看在哪个跳点中断 |
这个路径图清晰地展示了为什么拨号成功 ≠ 可以上网——即使模组拨号成功(获得公网IP),如果NAT转换失败或路由不正确,数据包仍然无法到达互联网。