我一直在尝试使用 LTE 卡 (Sierra Wireless AirPrime EM7455) 作为 WAN 接口在笔记本电脑上设置虚拟路由器。
总结一下我的问题,LTE 卡在主机中工作,但当我将其转发到来宾虚拟机时,我无法上网。
硬件/软件信息
- 笔记本电脑:运行 Debian 11.7 的 Lenovo Yoga 370 20JJ(运行 i3 的最小网络安装)
- LTE 调制解调器卡:Sierra Wireless AirPrime EM7455
- 虚拟化:KVM/QEMU/libvirt + virsh
在主机上
使用 ModemManager 且不使用 NetworkManager(出于偏好),我可以在主机中使用以下命令进行连接:
mmcli -m 0 --enable
mmcli -m 0 --simple-connect="user=3,apn=data.tre.se,ip-type=ipv4"
然后手动配置网络如下:
ip link set wwan0 up
ip addr add [IP/PREFIX] dev wwan0
ip link set dev wwan0 arp off
ip link set dev wwan0 mtu [MTU]
ip route add default dev wwan0 metric 200
我能够建立连接。平有效。我可以浏览互联网等。
在宾客中
在来宾中,我使用 转发 LTE 调制解调器(显示为 USB 设备)virsh attach-device
。如果我复制在主机系统上使用的上述命令,我将无法连接到互联网。我没有收到任何数据包的响应,包括对网关 IP 的 ping。相反,我只收到 TX 和 RX 错误:
user@modem:~$ ip -c -s link show wwan0
3: wwan0: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 66:24:85:3c:8e:fb brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped missed mcast
0 0 20621 0 0 0
TX: bytes packets errors dropped carrier collsns
0 0 9 0 0 0
但对我来说最奇怪的是我是能够:
1.通过APN获取IPmmcli
--simple-connect
一旦我在来宾中运行该命令,就会出现承载设置,并且调制解调器会被列为“已连接”。分别查看调制解调器信息和承载信息的输出:
$ sudo mmcli -m 0
--------------------------------
General | path: /org/freedesktop/ModemManager1/Modem/0
| device id: [REDACTED]
--------------------------------
Hardware | manufacturer: Sierra Wireless, Incorporated
| model: Sierra Wireless EM7455 Qualcomm Snapdragon X7 LTE-A
| firmware revision: SWI9X30C_02.33.03.00
| carrier config: default
| h/w revision: EM7455
| supported: gsm-umts, lte
| current: gsm-umts, lte
| equipment id: [REDACTED]
--------------------------------
System | device: /sys/devices/pci0000:00/0000:00:05.7/usb1/1-4
| drivers: cdc_mbim
| plugin: sierra
| primary port: cdc-wdm0
| ports: cdc-wdm0 (mbim), wwan0 (net)
--------------------------------
Status | lock: sim-pin2
| unlock retries: sim-pin2 (3)
| state: connected
| power state: on
| access tech: lte
| signal quality: 74% (recent)
--------------------------------
Modes | supported: allowed: 3g; preferred: none
| allowed: 4g; preferred: none
| allowed: 3g, 4g; preferred: 4g
| allowed: 3g, 4g; preferred: 3g
| current: allowed: 3g, 4g; preferred: 4g
--------------------------------
Bands | supported: utran-1, utran-3, utran-4, utran-5, utran-8, utran-2,
| eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, eutran-8,
| eutran-12, eutran-13, eutran-20, eutran-25, eutran-26, eutran-41
| current: utran-1, utran-3, utran-4, utran-5, utran-8, utran-2,
| eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, eutran-8,
| eutran-12, eutran-13, eutran-20, eutran-25, eutran-26, eutran-41
--------------------------------
IP | supported: ipv4, ipv6, ipv4v6
--------------------------------
3GPP | imei: [REDACTED]
| enabled locks: fixed-dialing
| operator id: 24002
| operator name: hallon
| registration: home
| packet service state: attached
--------------------------------
SIM | primary sim path: /org/freedesktop/ModemManager1/SIM/0
| sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
| slot 2: none
--------------------------------
Bearer | paths: /org/freedesktop/ModemManager1/Bearer/0
$ sudo mmcli -m 0 -b 0
------------------------------------
General | path: /org/freedesktop/ModemManager1/Bearer/0
| type: default
------------------------------------
Status | connected: yes
| suspended: no
| multiplexed: no
| interface: wwan0
| ip timeout: 20
------------------------------------
Properties | apn: data.tre.se
| roaming: allowed
| ip type: ipv4
| user: 3
------------------------------------
IPv4 configuration | method: static
| address: A.B.C.58
| prefix: 30
| gateway: A.B.C.57
| dns: 80.251.201.178, 80.251.201.177
| mtu: 1500
------------------------------------
Statistics | start date: 2023-08-11T10:16:31Z
| duration: 30
| uplink-speed: 50000000
| downlink-speed: 300000000
| attempts: 1
| total-duration: 30
(部分信息已删减)
2. 甚至可以通过以下方式将客人的短信发送到我的手机mmcli
这对我来说问题不在于调制解调器连接到蜂窝塔,而更多地局限于我的网络配置或与硬件如何转发到虚拟机有关。可能是固件问题?
尝试进行故障排除
ModemManager 和 Debian 的不同版本
我在来宾中尝试过 Debian 11.7 和最新稳定的 Debian (12.X)。它们附带不同版本的 ModemManager(分别为 1.14.12 和 1.20.4)。没有明显的区别,我的主机运行的是 Debian 11.7 mmcli 1.14,尽管在 Debian 12 上遇到错误时我确实必须运行以下命令:
$ mmcli -m 0 -e
error: couldn't enable the modem: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Retry: Invalid transition'
$ sudo ln -sft /etc/ModemManager/fcc-unlock.d /usr/share/ModemManager/fcc-unlock.available.d/*
NetworkManager 与 ModemManager 集成
我尝试过使用 NetworkManager 与 ModemManager 集成。我安装了一个新的来宾(Debian 12),安装了 NetworkManager 并通过它设置了 GSM 连接。结果我得到了 IP、网关、DNS 服务器等,并且连接显示为“已连接”,但我仍然只收到 RX/TX 错误
防火墙
我已确保该功能nftables
已被禁用。系统上不存在其他防火墙,除非有一些我不知道的有关 virsh 和网络的信息。
有人有主意吗?我是 ModemManager 和相关技术的新手。我希望我犯了一些致命的、基本的网络错误。