轶哥

📚 Having fun with AI Agent. Always learning.

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

    之前轶哥介绍过《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口拓展)  

    评论回复提醒