28 KiB
Quectel 调制解调器 Wiki
=================================
⚠️ 这是一个动态文档。随着更多发现的出现或社区软件的开发,内容可能会更新。如果您觉得有信息可以贡献给这个wiki,请提交pull request。
✔️ 本wiki主要关注Quectel的M.2规格蜂窝调制解调器。
M.2调制解调器直连以太网指南
许多Quectel调制解调器支持直接连接到PCIe以太网芯片组。这对于将蜂窝连接用作WAN接口很有用 - 您只需将调制解调器插入路由器的WAN端口,进行一些配置,就可以使用了。性能良好,调制解调器的板载连接管理通常比许多路由器使用的脚本更好地保持连接。
目录
QuecDeploy和调制解调器资源
建议您查看我的 RM520N-GL资源库
有一个自动安装程序.cmd文件,它会为您安装Windows所需的所有内容并放在正确的位置。使用.cmd后,请查看C:/Quectel/firmware文件夹中的固件。
那里还有一个Windows固件刷写指南
硬件推荐
我们实际上是将调制解调器置于PCIe Root Complex模式,以便通过PCIe使用以太网芯片组。您需要一个带有M.2 B-Key插槽的板子,具有电源、以太网、SIM卡槽和USB功能,并且需要一种方式为调制解调器的4个MHF4连接器提供蜂窝信号。
室内
以下是我推荐用于室内或移动场景的硬件:
购买链接:
不含调制解调器: Dual-Q 5G2PHY
或者
带x62 RM520N-GL(AP版本修改/转换为普通AA)。 预装自定义Arixolink固件(如果您想要Simpleadmin 2.0,请刷入最新的官方固件) Dual-Q 5G2PHY-RM520
包含:
- 主板和外壳
- 40cm USB3.0 A转Micro B线缆
- 2x 10cm MHF4转SMA线缆
- 2x 15cm MHF4转SMA线缆
- 1x 3x3.5x0.15 硅胶垫
- 1x 3x3x0.02 硅胶垫
- 安装硬件
- 板载RTL8125芯片组的小型散热片
不包含:
- 电源适配器
- 无源PoE注入器/适配器
- 天线
主要特点:
- 2.5千兆RTL8125单RJ45端口
- 支持无源PoE,我使用24v无源注入器
- ⚠️ 主动PoE如802.11将不工作 ⚠️ 因为它不进行协商
- USB 3.0
- 5.5x2.5mm DC端口接受12-50V的宽电压范围
- 内置的厚铝制散热片放置在调制解调器下方,并延伸到板子下方,即使在重负载下也能保持良好的散热
- M.2插槽靠近板子边缘的位置,方便访问调制解调器背面的触点,以防需要进入EDL模式
室外
(正在完善中) 目前仅提供链接 😄: https://www.rework.network/collections/lte-home-gateway/products/5g-rgm-o
推荐配件
-
DC适配器:来自亚马逊的12v 5A适配器
-
无源PoE:室外天线附带的是最佳选择,但任何19至60v电压范围内的适配器都应该可以
-
室内天线 亚马逊4件装(未测试;请自行选择)
-
家用WiFi路由器:GL.iNet Flint 2
示例配置:
固定场景
GL.iNet Flint 2路由器 加 室内调制解调器
移动场景
Beryl AX 加 室内调制解调器
-
便携WiFi路由器:GL.iNet Beryl AX
-
橡皮筋或扎带 :trollface:
-
此电池 12v3A DC输出,USB 5v3A输出,支持直通充电
-
基本配置
建议在继续之前先刷入最新的可用固件。
查看我的RM520资源库
请记住:
刷新固件会执行以下操作:
- 两种方法的IPPT都会恢复为默认关闭状态
- AT+QMAPWAC=1会恢复为AT+QMAPWAC=0,关闭自动连接 发送AT+QMAPWAC=1并重启来修复这个问题。如果您之前解锁并启用了adb,也可以通过adb这样做:
adb shell "echo -e 'AT+QMAPWAC=1 \r' > /dev/smd7"
adb shell reboot
- 通过/通过adb shell安装的自定义软件/服务将被移除。您可以使用我的组合安装程序重新安装Telnet守护程序、Simple Admin和每日重启功能
首次设置
通过USB连接到调制解调器并在Qnavigator中运行这些AT命令。如果您没有Qnavigator或其他发送AT命令的方式,请查看我的RM520资源库
AT+QCFG="data_interface",0,0
AT+QETH="eth_driver","r8125",1
AT+QCFG="pcie/mode",1
AT+QCFG="usbnet",1 #[如果您因为某些原因需要处于不同的USB模式,请记住发送AT+QMAPWAC=1]
AT+QMAPWAC=1 #[在ECM模式下可选,因为这会自动发生]
AT+CGDCONT=1,"IPV4V6","在此处填写apn"
任何其他您想运行的用于正确蜂窝连接的*魔法*命令
AT+QPRTPARA=1 [可选]
AT+CFUN=1,1
这些命令的作用:
AT+QCFG="data_interface":通过PCIe和USB配置网络端口/诊断端口通信。第一个参数用于网络通信;0表示USB,1表示PCIe。第二个参数用于诊断端口;只有0选项表示USB。请注意,即使在PCIe网络模式下,USB端口仍然可用于连接。似乎调制解调器会使用不同的APN配置从运营商请求第二个IP地址。在2023-07-31 AT文档的第41/42页中有一个命令,应该可以启用在同一APN上使用。RM520N-GL资源库中有相关说明。当然,如果您的运营商允许为SIM卡/线路分配第二个IP,这应该都能正常工作。我需要进一步研究这个问题。AT+QETH="eth_driver","r8125",1:这配置了在模块启动时要加载的以太网驱动程序。这是RTL8125以太网芯片组的正确驱动程序。您可以运行AT+QETH="eth_driver"来获取选项列表;我相信只能启用一个。第一个参数是驱动程序名称,第二个参数是布尔值,用于启用或禁用。AT+QCFG="pcie/mode":1 = RC(Root Complex),即主机。0 = EP(Endpoint),用于具有RC的设备中AT+QCFG="usbnet",1:USB ECM模式下的NIC数据呼叫方法。1=ECM(以太网控制模型)内部,即使没有物理以太网端口可用,调制解调器也会在这种模式下设置自己来维持连接。了解ECM的工作原理就知道为什么了。AT+QMAPWAC:启用或禁用移动AP自动拨号:0=禁用 1=启用(重启生效)。您可以运行AT+QMAPWAC?来获取当前保存/设置的值。我的发现:将其视为通用自动连接设置。如果设置为0,无线电会连接(或者会吗?)以便您可以看到信号统计,但不会从运营商获取IP地址。在大多数USB模式下(除了ECM),完成该过程取决于连接的设备。如果设置为1,它将在注册到网络后始终请求IP。AT+CGDCONT:设置APN命令。运行AT+CGDCONT可以查看APN配置文件1到8的设置。要清除APN,只需发送=和要清除的配置文件号码。例如,如果我想清除APN配置文件1,我会发送AT+CGDCONT=1。要设置APN,您需要指定配置文件号码、协议(IPV4、IPV6或IPV4V6表示两者都用)然后是APN。例如,如果我想将APN 1设置为APNGOESHERE并同时使用IPV4和IPV6,我会发送AT+CGDCONT=1,"IPV4V6","APNGOESHERE"- 注意:您的APN将根据SIM卡和调制解调器内置MDM配置文件的了解自动填充。有时您想使用不同于默认使用的APN。通常您可以通过运行命令手动设置,它会保持不变。但在某些情况下,比如当您从SIM1切换到SIM2然后再切回SIM1或反之时,APN会恢复到其MBN配置文件中的设置。运行
AT+CGDCONT?来查看。将ICCID锁定到APN的脚本在我的待办列表中。
- 注意:您的APN将根据SIM卡和调制解调器内置MDM配置文件的了解自动填充。有时您想使用不同于默认使用的APN。通常您可以通过运行命令手动设置,它会保持不变。但在某些情况下,比如当您从SIM1切换到SIM2然后再切回SIM1或反之时,APN会恢复到其MBN配置文件中的设置。运行
AT+QPRTPARA=1:应该将当前配置保存到内存。虽然不是必需的,但我总是运行它以防万一。
..运行AT+CFUN=1,1后,调制解调器将重启,您应该从以太网端口获得一个本地IP地址。通常是192.168.225.x。
固件刷新后;首次设置后
固件刷新后需要运行这些命令才能重新上线
如果您不在ECM模式下(AT+QCFG="usbnet",1),则需要先执行以下操作:
AT+QMAPWAC=1
AT+CFUN=1,1(重启)
运行我的工具包
固件刷新会移除工具包所做的内容:
- 安装Telnet守护程序
- 安装Simpleadmin网页界面
- 安装和配置Tailscale
- 如果您需要,设置重启定时器
- 如果您需要,发送一两个AT命令
使用AT命令更改调制解调器IP地址
默认情况下,调制解调器对IPv4充当真正的NAT路由器,并通过IPv6提供地址。调制解调器的IPv4地址是192.168.225.1 - 这可以通过AT命令更改参见第228页:AT+QMAP="LANIP"
有很多原因可能需要更改调制解调器的IP..例如,您可能有多个调制解调器连接到同一个路由器用于WAN负载均衡或绑定,或者它可能与您的内部网络IP范围冲突,或者(其他原因)。在最新的固件版本中,可以使用命令来完成这个操作!
命令是:
AT+QMAP="LANIP",<dhcp起始>,<dhcp结束>,<路由器ip>,<是否立即应用?>
AT+QMAP="LANIP",192.168.227.20,192.168.227.100,192.168.227.1,1
'是否立即应用?'表示路由器是否应该立即应用更改,或等待重启。1表示是,0表示否。
## 启用IP透传
如果您想启用IP透传,让从运营商分配的IP地址传递给连接到以太网端口的设备,您可以做到!即使在启用IPPT(IP透传)的情况下,包括网关在内的LAN IP地址仍然可以访问。
**IP透传有3个阶段:**
#
### DMZ方法
这种方法严格来说不是真正的IP透传,但它也能有效地消除双重NAT。基本上,您在这里所做的是将DHCP限制为只分配1个IP地址,然后将其设置为DMZ,有效地将每个端口转发到该内部IP。
#### 启用IP透传(DMZ方法):
AT+QMAP="LAN",192.168.225.2 AT+QMAP="DMZ",1,4,192.168.225.2 AT+CFUN=1,1(重启)
如果"LAN"命令不起作用,则使用"LANIP"来定义起始范围、结束范围、网关,1
使起始范围和结束范围相同
#
### 实际IP透传
这是在[2023-07-31 AT手册](https://github.com/iamromulan/RM520N-GL/blob/main/Documents/Quectel_RG520N&RG525F&RG5x0F&RM5x0N_Series_AT_Commands_Manual_V1.0.0_Preliminary_20230731.pdf)第231页记录的方法
#### 启用IP透传(QMAP方法):
AT+QMAP="MPDN_rule",0,1,0,1,1,"FF:FF:FF:FF:FF:FF"
发送此命令后,以太网端口应该会关闭一两秒钟,然后重新启动并启用IPV4透传。注意:IPV6有时也会分配?这只是DHCP IPV6吗?我会研究这个问题。
##### MPDN规则参数:
* 第一个 = MPDN规则号码,范围0-3(除非您在做一些复杂的事情,否则您会使用0。)[提示:多个数据呼叫规则]
* 第二个 = 要使用的APN配置文件ID(CGDCONT)。您可能想要使用1。
* 第三个 = VLAN ID。这通常是0,但您可以运行`AT+QMAP="VLAN"`来查看应该是什么。
* 第四个 = IPPT模式,使用1表示以太网,使用0表示禁用(AT PDF中有更多模式)
* 第五个 = 自动连接。如果设置为0=禁用 1=启用
* 第六个 = 要透传到的MAC地址。`FF:FF:FF:FF:FF:FF`将IP传递给最后连接的以太网设备。`"00:00:00:00:00:00"`将只传递给第一个连接的以太网设备。您也可以指定自定义MAC地址。
##### DHCPV4DNS
打开和关闭IPV4 DNS代理,以便运营商的DNS也会透传。
所以...
内部有一个DNS服务器/代理,用于通过AT命令设置域名并使其实际工作。通过adb shell/ssh shell有一种方法可以自己设置DNS覆盖到您自己的名称服务器。Tailscale会自动完成这个操作,我稍后会讨论这个问题。
AT+QMAP="DHCPV4DNS","disable"
#### 禁用IP透传(QMAP方法):
AT+QMAP="MPDN_rule",0(以太网端口将关闭并重新启动) AT+QMAPWAC=1(如果不在ECM模式下) AT+CFUN=1,1(重启)(可选)
或者
刷新固件---> 按照[固件刷新后;首次设置后](#固件刷新后首次设置后)的步骤操作
### 在IPPT模式下禁用NAT到VLAN
在启用MDPN规则并打开IPPT后,您可以禁用到VLAN0的NAT(192.168.225.x地址)并进行完全透传(除非您不需要/不想要本地访问网关,否则我不建议这样做)。您应该仍然可以使用Tailscale访问网关地址。
高级配置
这些调制解调器在底层是一个完整的Linux路由器。一旦获得访问权限,您可以修改文件系统上的任何内容。这很酷,也有点危险..但很有趣。访问是通过'adb'实现的 - 这与用于对Android手机进行有趣操作的工具相同。如果您安装了Tailscale,您也可以通过Tailscale使用SSH。我稍后会详细讨论这个问题。
解锁和使用ADB
默认情况下,这些调制解调器没有启用通过USB的ADB,需要解锁才能启用。一旦解锁,除非您禁用它,否则它会保持解锁状态。
:bowtie: 感谢carp4在qadbkey-unlock python脚本上的工作,我们现在可以不需要Quectel的帮助就能做到这一点!
要获得访问权限,您需要从调制解调器获取锁定代码,然后将其提供给python ADB解锁密钥生成器,获取它给出的解锁密钥代码,解锁ADB,然后实际启用通过USB的ADB。这只需要做一次,因为这在固件刷新后仍然有效。
要获取锁定代码,运行AT命令"AT+QADBKEY?"。调制解调器将回复:
AT+QADBKEY?
+QADBKEY: 12345678
OK
12345678就是这种情况下的锁定代码
然后您可以前往Python ADB解锁密钥生成器
用运行AT+QADBKEY?得到的响应替换12345678然后点击运行。在输出下方将生成您的解锁密钥。
获得解锁密钥后,您可以这样应用密钥:
AT+QADBKEY="0jXKXQwSwMxYoeg"
然后,要实际启用ADB,运行AT+QCFG="usbcfg",取出输出,将倒数第二个0改为1,然后将新的usbcfg字符串发送到调制解调器(不要只是复制/粘贴下面的内容;您的调制解调器的USB VID/PID很可能不同):
AT+QCFG="usbcfg"
+QCFG: "usbcfg",0x2C7C,0x0801,1,1,1,1,1,0,0 // 初始响应
AT+QCFG="usbcfg",0x2C7C,0x0801,1,1,1,1,1,1,0 // 启用ADB
并使用AT+CFUN=1,1重启以实际应用。
### 使用ADB
:warning: 将很快重新组织
:warning: adb现在已随QFlash 7.1+从QuecDeploy安装
:warning: 已过时
一旦调制解调器重新上线,您应该能够使用ADB通过USB连接来管理主机上的调制解调器。在使用之前,您需要安装ADB驱动程序和ADB命令行工具。最简单的方法就是使用我的RM520仓库脚本。或者自己动手:https://github.com/K3V1991/ADB-and-FastbootPlusPlus/releases
- 下载.exe非便携版

- 接受、是、下一步、允许基本上是您想要按的所有按钮。如果您收到这样的安全警告,请点击更多信息

- 在安装过程中,您一定要选择这些。

- 最后,确保这些选项如下所示:

- 之后会打开这样的窗口。

- 任何时候想使用adb都要打开ADB & Fastboot++

> :warning: **调制解调器不需要其他图标/快捷方式。它们对Android手机有用。如果您只需要这个用于Quectel调制解调器,可以删除图标/快捷方式**
>

### 基本命令:
在ADB & Fastboot++中输入`adb devices`并按回车。如果您的调制解调器已解锁ADB并通过USB连接,列表中应该至少显示一个设备。这是测试adb是否安装并正确识别您的调制解调器或Android手机的好方法。
**示例:**

- `adb pull /path/to/file` - 从调制解调器下载文件到当前工作目录
- `adb push /path/on/computer /path/on/modem` - 上传文件到调制解调器
- `adb shell` - 远程控制调制解调器上的root linux shell/命令行,完成后输入exit(注意在shell中运行通常以`adb shell`开头的命令时,需要跳过该部分)
- 在Quectel调制解调器的adb shell中,它会像unix shell一样工作。像`uname -a`这样的命令会显示操作系统名称、处理器类型、构建日期信息等;`ls`会显示文件结构,而`systemctl list-units --type=service --all`会显示所有已安装的服务,无论是否运行。
到目前为止,我尝试让ADB通过IP在以太网接口上监听都没有成功。警告 - `adb tcp <port>`命令会使ADB和所有其他通过USB暴露的串行端口崩溃,直到调制解调器重启。所以现在坚持使用USB上的ADB。如果有人了解这个设备上adbd是如何工作的,请随时打开issue/discussion/PR。现在您可以通过tailscale使用SSH。
Web GUI和工具包
概述
这些调制解调器有一个Web GUI界面,可以通过http://192.168.225.1(或您设置的任何其他IP)访问。它允许您查看状态、设置APN、设置PIN、查看日志等。它还允许您通过Web界面发送AT命令。
如何安装
我已经创建了一个工具包,它可以自动安装以下所有内容。您只需要在安装后配置Tailscale。
如果您想手动安装,请继续阅读。
Tailscale安装和配置
我已经创建了一个工具包,它可以自动安装以下所有内容。您只需要在安装后配置Tailscale。
如果您想要更多信息,请查看Tailscale的文档
- 从Tailscale的GitHub仓库下载最新的arm64版本。
- 解压缩下载的文件。
- 将tailscale和tailscaled二进制文件上传到调制解调器:
adb push tailscale /usr/bin/
adb push tailscaled /usr/sbin/
- 使二进制文件可执行:
adb shell chmod +x /usr/bin/tailscale
adb shell chmod +x /usr/sbin/tailscaled
- 创建systemd服务文件:
adb shell "echo '[Unit]
Description=Tailscale node agent
Documentation=https://tailscale.com
Wants=network-pre.target
After=network-pre.target NetworkManager.service systemd-resolved.service
[Service]
ExecStartPre=/usr/sbin/tailscaled --cleanup
ExecStart=/usr/sbin/tailscaled --state=/var/lib/tailscale/tailscaled.state --socket=/run/tailscale/tailscaled.sock --port=41641 --tun=userspace-networking
ExecStopPost=/usr/sbin/tailscaled --cleanup
Restart=on-failure
RuntimeDirectory=tailscale
RuntimeDirectoryMode=0755
StateDirectory=tailscale
StateDirectoryMode=0700
CacheDirectory=tailscale
CacheDirectoryMode=0750
Type=notify
[Install]
WantedBy=multi-user.target' > /etc/systemd/system/tailscaled.service"
- 创建必要的目录:
adb shell mkdir -p /var/lib/tailscale
adb shell mkdir -p /run/tailscale
- 启用并启动服务:
adb shell systemctl daemon-reload
adb shell systemctl enable tailscaled
adb shell systemctl start tailscaled
- 登录到您的Tailscale账户:
adb shell tailscale up --accept-routes --accept-dns=false --ssh
- 访问调制解调器的URL以完成登录过程。
使用Tailscale SSH
一旦您完成了Tailscale的设置,您就可以使用ssh root@<tailscale-ip>从任何连接到您的Tailnet的设备访问调制解调器。
禁用Tailscale
要禁用Tailscale,您可以:
adb shell systemctl stop tailscaled
adb shell systemctl disable tailscaled
卸载Tailscale
要完全卸载Tailscale:
adb shell systemctl stop tailscaled
adb shell systemctl disable tailscaled
adb shell rm /usr/bin/tailscale
adb shell rm /usr/sbin/tailscaled
adb shell rm /etc/systemd/system/tailscaled.service
adb shell rm -r /var/lib/tailscale
adb shell rm -r /run/tailscale
adb shell systemctl daemon-reload
每日重启
如果您经常遇到调制解调器需要重启的情况,您可以设置一个每日重启计划。这可以通过创建一个systemd服务和计时器来实现。
安装每日重启服务
- 创建重启服务文件:
adb shell "echo '[Unit]
Description=Daily modem reboot service
[Service]
Type=oneshot
ExecStart=/sbin/reboot
[Install]
WantedBy=multi-user.target' > /etc/systemd/system/modem-reboot.service"
- 创建计时器文件(默认为每天凌晨3点重启):
adb shell "echo '[Unit]
Description=Daily modem reboot timer
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target' > /etc/systemd/system/modem-reboot.timer"
- 启用并启动计时器:
adb shell systemctl daemon-reload
adb shell systemctl enable modem-reboot.timer
adb shell systemctl start modem-reboot.timer
禁用每日重启
要禁用每日重启,您可以:
adb shell systemctl stop modem-reboot.timer
adb shell systemctl disable modem-reboot.timer
卸载每日重启
要完全卸载每日重启服务:
adb shell systemctl stop modem-reboot.timer
adb shell systemctl disable modem-reboot.timer
adb shell rm /etc/systemd/system/modem-reboot.service
adb shell rm /etc/systemd/system/modem-reboot.timer
adb shell systemctl daemon-reload
其他高级功能
设置自定义DNS服务器
您可以通过修改/etc/resolv.conf文件来设置自定义DNS服务器:
adb shell "echo 'nameserver 1.1.1.1' > /etc/resolv.conf"
查看系统日志
要查看系统日志,您可以使用以下命令:
adb shell journalctl -f
检查网络连接
要检查网络连接状态,您可以使用以下命令:
adb shell ifconfig
adb shell ip addr
adb shell route -n
查看进程
要查看运行中的进程,您可以使用:
adb shell ps
adb shell top
检查服务状态
要查看所有服务的状态:
adb shell systemctl list-units --type=service
查看系统信息
要查看系统信息:
adb shell uname -a
adb shell cat /proc/cpuinfo
adb shell cat /proc/meminfo
故障排除
常见问题
调制解调器无法连接到网络
- 检查SIM卡是否正确插入
- 确认APN设置是否正确
- 检查信号强度
- 尝试重启调制解调器
ADB连接问题
- 确保已正确安装ADB驱动程序
- 检查USB连接
- 确认已解锁ADB并正确配置
- 尝试使用不同的USB端口或线缆
IP透传问题
- 确认已正确配置MPDN规则
- 检查MAC地址设置
- 验证VLAN配置
- 确保运营商支持IP透传
Tailscale连接问题
- 检查Tailscale服务状态
- 确认登录状态
- 验证网络连接
- 检查防火墙设置
有用的调试命令
检查网络状态
adb shell ifconfig
adb shell ip addr
adb shell route -n
查看系统日志
adb shell journalctl -f
adb shell dmesg
检查服务状态
adb shell systemctl status tailscaled
adb shell systemctl status modem-reboot.timer
网络连接测试
adb shell ping 8.8.8.8
adb shell traceroute 8.8.8.8
贡献
欢迎通过以下方式贡献:
- 报告问题
- 提交改进建议
- 创建拉取请求
- 分享您的经验
许可证
本文档采用MIT许可证。详情请参见LICENSE文件。
致谢
特别感谢:
- carp4 - 提供ADB解锁工具
- Quectel社区的所有贡献者
- 所有帮助测试和改进本文档的用户



