惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Hacker News
The Hacker News
Martin Fowler
Martin Fowler
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
U
Unit 42
F
Full Disclosure
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Recorded Future
Recorded Future
Security Archives - TechRepublic
Security Archives - TechRepublic
阮一峰的网络日志
阮一峰的网络日志
T
Threatpost
P
Privacy International News Feed
GbyAI
GbyAI
Stack Overflow Blog
Stack Overflow Blog
MongoDB | Blog
MongoDB | Blog
I
Intezer
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Privacy & Cybersecurity Law Blog
A
Arctic Wolf
博客园 - 聂微东
博客园 - 叶小钗
Cisco Talos Blog
Cisco Talos Blog
H
Help Net Security
S
Schneier on Security
Y
Y Combinator Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
The Exploit Database - CXSecurity.com
T
Tor Project blog
月光博客
月光博客
NISL@THU
NISL@THU
A
About on SuperTechFans
Spread Privacy
Spread Privacy
Blog — PlanetScale
Blog — PlanetScale
D
DataBreaches.Net
雷峰网
雷峰网
C
CXSECURITY Database RSS Feed - CXSecurity.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 【当耐特】
G
Google Developers Blog
W
WeLiveSecurity
P
Palo Alto Networks Blog
The Last Watchdog
The Last Watchdog
K
Kaspersky official blog
博客园 - 司徒正美
L
LINUX DO - 热门话题
小众软件
小众软件

轶哥博客

blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog
blog
2022-05-09 · via 轶哥博客

之前轶哥介绍过《OpenWRT使用4G/5G无线网卡模块上网》的方法,文中对拨号上网部分描述不是很详细。本文我们就专门针对拨号上网的设置方法详细说明。

测试环境

安装依赖和驱动

在编译固件的时候安装4G模块相关组件或者选择有官方维护的内核版本安装相关组件。

opkg update
opkg install usb-modeswitch kmod-mii kmod-usb-net kmod-usb-wdm kmod-usb-net-qmi-wwan uqmi

不仅上述组件,我把相关的都装了:

kernel - 5.4.188-1-464fe1de21fd0be55bce8609c115ce6d
comgt - 0.32-33
comgt-ncm - 0.32-33
kmod-ppp - 5.4.188-1
kmod-pppoe - 5.4.188-1
kmod-pppox - 5.4.188-1
kmod-sched-connmark - 5.4.188-1
kmod-sched-core - 5.4.188-1
kmod-scsi-core - 5.4.188-1
kmod-slhc - 5.4.188-1
kmod-usb-acm - 5.4.188-1
kmod-usb-core - 5.4.188-1
kmod-usb-ehci - 5.4.188-1
kmod-usb-net - 5.4.188-1
kmod-usb-net-asix - 5.4.188-1
kmod-usb-net-cdc-eem - 5.4.188-1
kmod-usb-net-cdc-ether - 5.4.188-1
kmod-usb-net-cdc-mbim - 5.4.188-1
kmod-usb-net-cdc-ncm - 5.4.188-1
kmod-usb-net-cdc-subset - 5.4.188-1
kmod-usb-net-dm9601-ether - 5.4.188-1
kmod-usb-net-hso - 5.4.188-1
kmod-usb-net-huawei-cdc-ncm - 5.4.188-1
kmod-usb-net-ipheth - 5.4.188-1
kmod-usb-net-kalmia - 5.4.188-1
kmod-usb-net-kaweth - 5.4.188-1
kmod-usb-net-mcs7830 - 5.4.188-1
kmod-usb-net-pegasus - 5.4.188-1
kmod-usb-net-qmi-wwan - 5.4.188-1
kmod-usb-net-rndis - 5.4.188-1
kmod-usb-net-sierrawireless - 5.4.188-1
kmod-usb-net-smsc95xx - 5.4.188-1
kmod-usb-ohci - 5.4.188-1
kmod-usb-ohci-pci - 5.4.188-1
kmod-usb-serial - 5.4.188-1
kmod-usb-serial-ark3116 - 5.4.188-1
kmod-usb-serial-belkin - 5.4.188-1
kmod-usb-serial-ch341 - 5.4.188-1
kmod-usb-serial-cp210x - 5.4.188-1
kmod-usb-serial-cypress-m8 - 5.4.188-1
kmod-usb-serial-ftdi - 5.4.188-1
kmod-usb-serial-ipw - 5.4.188-1
kmod-usb-serial-keyspan - 5.4.188-1
kmod-usb-serial-mct - 5.4.188-1
kmod-usb-serial-mos7720 - 5.4.188-1
kmod-usb-serial-option - 5.4.188-1
kmod-usb-serial-oti6858 - 5.4.188-1
kmod-usb-serial-pl2303 - 5.4.188-1
kmod-usb-serial-qualcomm - 5.4.188-1
kmod-usb-serial-sierrawireless - 5.4.188-1
kmod-usb-serial-ti-usb - 5.4.188-1
kmod-usb-serial-visor - 5.4.188-1
kmod-usb-serial-wwan - 5.4.188-1
kmod-usb-storage - 5.4.188-1
kmod-usb-storage-extras - 5.4.188-1
kmod-usb-storage-uas - 5.4.188-1
kmod-usb-uhci - 5.4.188-1
kmod-usb-wdm - 5.4.188-1
kmod-usb2 - 5.4.188-1
kmod-usb2-pci - 5.4.188-1
kmod-usb3 - 5.4.188-1
libmbim - 1.24.8-1
libqmi - 1.28.8-1
libusb-1.0-0 - 1.0.24-4
libusbmuxd - 2.0.2-1
luci-proto-3g - git-22.046.84868-a7b0fe1
luci-proto-ncm - git-22.046.84868-a7b0fe1
luci-proto-ppp - git-21.163.64918-6c6559a
luci-proto-qmi - git-22.046.84868-a7b0fe1
picocom - 3.1-5
ppp - 2.4.8.git-2020-10-03-3
ppp-mod-pppoe - 2.4.8.git-2020-10-03-3
qmi-utils - 1.28.8-1
umbim - 2019-09-11-184b707d-1
uqmi - 2020-11-22-0a19b5b7-3
usb-modeswitch - 2017-12-19-f40f84c2-2
usbids - 0.359-1
usbmuxd - 1.1.1-1
usbutils - 013-2
wireless-regdb - 2021.08.28-1
wwan - 2019-04-29-5

执行lsusb查看型号:

root@OpenWrt:~# lsusb
Bus 001 Device 003: ID 05c6:6001 USB Modem USB Modem

注意: 未安装驱动或未载入驱动前查看到的信息可能是这样的:

Bus 001 Device 001: ID 05c6:6001 Qualcomm, Inc.

因为识别到了Modem模块而标识为USB Modem

验证您是否已通过内核配置或依赖安装为USB蜂窝模块QMI接口,判断是否正常连接Linux内核qmi_wwan驱动程序,执行lsusb -t可以看到驱动识别情况:

root@OpenWrt:~# lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M
    |__ Port 1: Dev 3, If 3, Class=, Driver=qmi_wwan, 480M
    |__ Port 1: Dev 3, If 4, Class=, Driver=usb-storage, 480M

可以看到识别到了qmi_wwanusb-storage。前者是QMI接口的驱动,用于上网,后者就是Win下我的电脑里面的光驱,用于win平台展现驱动文件的CD-ROM,USBModem Disk。

执行dmesg查看内核信息:

[   23.484954] qmi_wwan 1-1:1.3: cdc-wdm0: USB WDM device
[   23.491347] qmi_wwan 1-1:1.3 wwan0: register 'qmi_wwan' at usb-101c0000.ehci-1, WWAN/QMI device, 02:1e:6c:eb:92:57
[   23.502274] usbcore: registered new interface driver qmi_wwan
[   23.608183] usbcore: registered new interface driver rndis_host
[   23.639271] usbcore: registered new interface driver sierra
[   23.645120] usbserial: USB Serial support registered for Sierra USB modem
[   23.688208] usbcore: registered new interface driver sierra_net
[   23.769029] usbcore: registered new interface driver smsc95xx
[   23.868062] usbcore: registered new interface driver ti_usb_3410_5052
[   23.874814] usbserial: USB Serial support registered for TI USB 3410 1 port adapter
[   23.882722] usbserial: USB Serial support registered for TI USB 5052 2 port adapter
[   23.999218] usbcore: registered new interface driver cdc_mbim
[   24.032262] usbcore: registered new interface driver ipw
[   24.037856] usbserial: USB Serial support registered for IPWireless converter
[   24.259600] usbcore: registered new interface driver option
[   24.265437] usbserial: USB Serial support registered for GSM modem (1-port)
[   24.273163] option 1-1:1.0: GSM modem (1-port) converter detected
[   24.279722] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
[   24.287127] option 1-1:1.1: GSM modem (1-port) converter detected
[   24.293719] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
[   24.301097] option 1-1:1.2: GSM modem (1-port) converter detected
[   24.307680] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
[   24.434175] usbcore: registered new interface driver qcserial
[   24.440204] usbserial: USB Serial support registered for Qualcomm USB modem

可以看到使用到了ttyUSB0ttyUSB1ttyUSB2,分别有执行AT指令和回传串口信息等作用。

执行ifconfig wwan0查看wwan0信息:

wwan0     Link encap:Ethernet  HWaddr 02:1E:6C:XX:XX:XX
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

此时该网卡处于未分配到IP地址的状态。

判断使用什么方式驱动网卡

在大多数情况下,ModemManagerNetworkManager相结合将自动检测4G蜂窝模块。

之前在《OpenWRT使用4G/5G无线网卡模块上网》一文中有提到过,直接新建wan口并选择wwan0作为DHCP客户端即可上网。但这类方法只适用于可以支持Raw-IP模式的QMI接口。

基于高通芯片组的蜂窝模块实现了高通MSM(QMI)接口。有一个支持此接口的开源Linux内核驱动程序,它称为qmi_wwan。此驱动程序可以与ModemManagerNetworkManager一起使用,以自动建立连接并作为连接管理器。

ModemManager使用的库libqmi也可以用于通过QMI接口与蜂窝设备更直接地通信,并逐步进行必要的配置并触发通过蜂窝网络进行数据连接。

简单来说,可以分三步进行测试:

  1. 直接按照《OpenWRT使用4G/5G无线网卡模块上网》中说的方法新建DHCP客户端看是否能上网;
  2. 如果方法1无法获得IP地址,则尝试按照文中最后的方法以QMI蜂窝的方式创建接口;
  3. 如果上面两个方法都无法上网,则尝试UMTS/GPRS/EV-DO方式手动拨号上网(即本文介绍的方法)。

手动拨号上网

libqmi提供一个命令qmicli,可用于QMI接口与4G模块通信。借此我们也可以进一步判断QMI接口是否支持Raw-IP模式。

QMI控制通道相关网络接口的名称可以通过以下命令获取:

qmicli --device=/dev/cdc-wdm0 --device-open-proxy --get-wwan-iface

这里得到的wwan0QMI对应的网卡。

检查主机系统配置的IP模式:

qmicli --device=/dev/cdc-wdm0 --get-expected-data-format

检查蜂窝模块需要的IP模式:

qmicli --device=/dev/cdc-wdm0 --device-open-proxy --wda-get-data-format

如果第一个命令返回802-3且第二个命令提示RAW IP相关内容,则我们可以强制使能RAW-IP

echo Y > /sys/class/net/wwan0/qmi/raw_ip

重启该网络接口:

ip link set dev wwan0 down
ip link set dev wwan0 up

如果一切顺利,则按照方法一进行上网即可。

可如果执行qmicli --device=/dev/cdc-wdm0 --device-open-proxy --wda-get-data-format得到错误:

root@OpenWrt:~# qmicli --device=/dev/cdc-wdm0 --device-open-proxy --wda-get-data-format
error: couldn't create client for the 'wda' service: QMI protocol error (31): 'InvalidServiceType'

则说明无法使用RAW IP方式上网。也就是无法直接充当DHCP Client获得蜂窝模块分配的IP地址。这种情况下,需要尝试手动拨号。

进入OpenWRT后台,选择网络-接口-添加新接口,取个名并选择UMTS/GPRS/EV-DO协议。

wwan0.png

创建完成后选择防火墙为wan。编辑该接口参数。

调制解调器设备选择/dev/ttyUSB1(看dmesg输出的结果,如果不知道可以挨个试试),服务类型选择UMTS/GPRSAPN根据卡片来(联通3gnet、移动cmnet、电信ctnet),拨号号码:*99#

UMTSGPRS.png

保存并应用后即可成功拨号。

拨号成功后,得到的IP地址可能是一个运营商内网的IPv4地址,正常的话,到这里设备就有数据链接了。

使用蜂窝网络接口将ping发送到远程服务器可以证明这一点:

ping -I wwan0 1.2.4.8

需要注意的是,手动拨号上网会导致4g卡托自身的wifi功能无法上网,只能有线用于拨号设备的上网,蜂窝模块(卡托)现在类似于是光猫的桥接模式。

其它有用的命令

获取模块Model:

qmicli --device=/dev/cdc-wdm0 --device-open-proxy --dms-get-model

获取固件版本:

qmicli --device=/dev/cdc-wdm0 --device-open-proxy --dms-get-revision

获取模块ID(IMEI等):

qmicli --device=/dev/cdc-wdm0 --device-open-proxy --dms-get-ids

获取SIM卡状态:

qmicli --device=/dev/cdc-wdm0 --device-open-proxy --uim-get-card-status

获取模块制造商:

qmicli --device=/dev/cdc-wdm0 --device-open-proxy --dms-get-manufacturer