轶哥

妄图改变世界的全栈程序员。

OpenWRT使用4G卡托拨号上网
  •   更新:2022-05-09 13:35:14
  •   首发:2022-05-09 13:35:14
  •   教程
  •   1677

之前轶哥介绍过《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
打赏
交流区

暂无内容

尚未登陆
发布
  上一篇 (Kali Linux安装VMware Workstation 16及Win11教程)
下一篇 (OpenWRT配合爱快实现WAN口拓展)  

评论回复提醒