
出差、露营、临时搭展会或者去一个只提供了有线网的酒店最烦的就是没有WiFi可用。手机热点能救急可电话一进来网络就断、机身烫得厉害、电量肉眼可见往下掉稍微用久一点就让人浑身不自在。所以我动手做了一台基于Raspberry Pi和4G模块的便携WiFi路由器插一张流量SIM卡放到包里周围所有设备都能连上专属无线网。哪天网络抽风了我自己能查、能重启、能换卡用下来比现成的随身WiFi可靠太多。这篇文章会把整个制作过程完整拆一遍从为什么选这套方案、树莓派和4G模块怎么挑到系统怎么配、拨号怎么搞定、WiFi热点怎么建、流量转发怎么做最后是功耗、散热和常见故障的排错记录。无论你是第一次碰树莓派的新手还是已经玩过一些嵌入式设备的选手跟着这套流程走都能把一台真正的4G路由器装进包里。1. 项目整体设计与思路拆解1.1 为什么不用现成的随身WiFi非要自己做市面上几十块钱的随身WiFi不少插上SIM卡就能用。但这类设备有几个让人不舒服的地方固件封闭想改信道、改DNS、限制设备带宽基本不可能很多还锁了运营商只能用特定卡用久了发热降频、掉线出了问题连日志都看不到。自己用Raspberry Pi做路由器本质上是把“网络接入设备”变成了一台完整的Linux主机。你能自由选择APN、修改DHCP地址池、设置防火墙规则、写自动重连脚本甚至在上面跑一个流量统计服务。今天做纯路由器明天改造成车载热点、离线下载服务器都只要加软件不用重新买硬件。这个自由度是任何成品随身WiFi都给不了的。1.2 网络拓扑和流量到底怎么走在动手之前最好先搞清楚数据是怎么流到你手上的。整个系统的逻辑很简单客户端设备手机、笔记本→ WiFi热点树莓派无线网卡→ 树莓派 → 4G模块 → 运营商基站 → 互联网树莓派扮演两个角色对内它是WiFi接入点的“主人”负责分配IP地址、下发DNS对外它是4G网络里的一台“普通终端”通过SIM卡拨号上网。两个网络之间的流量要打通全靠NAT转发。可以这么理解树莓派左边是自家客厅右边是运营商外网它站在中间把客厅里所有设备的外出请求打包送到隔壁再把隔壁回来的包裹分发回各房间。这个比喻理解了后面配iptables时就清楚自己为什么要写那几条规则。1.3 硬件选型树莓派与4G模块怎么挑树莓派型号直接决定功耗、性能和可玩性。我做了个对比表选型时对照着看就行。型号参考功耗USB接口优点适合场景Zero 2 W较低1个micro USBOTG体积小、功耗低少设备、要求便携的场景3B中等4个USB 2.0便宜、资料多通用DIY4B较高4个USB 3.0/2.0性能强、接口足多设备、需要稳定高速如果追求极致便携Zero 2 W可以选但只有一个micro USB口4G模块供电会非常紧张新手容易在电源环节折腾到崩溃。我更建议第一版用树莓派4B或3B把整个流程跑通再考虑缩小体积。这一步省掉的麻烦比省下的那几十克重量值钱得多。4G模块的选择更关键它决定拨号方式是否顺利。模块型号网络制式接口/拨号方式特点SIM7600CE全网通4G Cat4USB、AT指令、PPP教程多、价格适中、新手友好EC25全网通4G Cat4USB、QMI/ECM工业级、稳定、适合长期用Air724UG全网通4G Cat4USB、AT指令国内开源生态好、社区活跃新手最优先考虑SIM7600CE资料最多几乎所有问题都能搜到答案。EC25稳定性好但QMI配置对刚接触的朋友略复杂。除了模块本体天线也要注意买带延长线或棒状天线的版本别用PCB直焊天线信号差一截。SIM卡准备好一张能正常使用的大卡或者卡托别随手塞一张剪坏的卡进去后面排查会少很多麻烦。2. 系统准备与环境搭建2.1 系统烧录与SSH远程入口系统我推荐Raspberry Pi OS Lite版64位优先。不带桌面省内存、省CPU树莓派只需要专心做路由转发不需要跑图形界面。用Raspberry Pi Imager把镜像烧进TF卡后先在boot分区里放一个名为ssh的空文件这样才能首次开机直接走SSH登录。默认用户名是pi密码是raspberry第一次登录后记得马上改。如果你旁边没有显示器又没有网线还得提前准备好WiFi配网信息在boot分区新建wpa_supplicant.conf填好你的路由器SSID和密码开机后树莓派会自己连上你家WiFi然后你再用路由管理页面找到它的IP地址SSH进去操作。整个过程大概5分钟。这里有个小坑新版本镜像默认不开启SSH不在boot分区放ssh文件的话你会发现ping不通也连不上别再问我为什么知道了。2.2 4G模块识别与SIM卡安装插模块之前先断电然后把SIM卡按模块丝印方向插好。SIM卡方向装反是新手最容易犯的错有的是切角朝里有的是金属触点朝上不同模块不一样装好后通电跑一下下面几条命令看是否被识别lsusb dmesg | tail -20 ls -l /dev/ttyUSB* /dev/cdc-wdm* 2/dev/null如果你看到类似“SIM Technology”“Quectel”“Qualcomm”的厂商信息并且出现ttyUSB0或cdc-wdm0这样的设备节点说明模块已经被内核认出来了。SIM7600系列的USB口通常映射成多个ttyUSB比如ttyUSB0用来发AT指令ttyUSB2是数据口EC25这类QMI模块则会出现cdc-wdm0设备后面上网网卡会叫wwan0。然后用串口工具确认模块能响应AT指令比如minicom连接ttyUSB0波特率115200输入AT回车能返回OK就说明模块活着sudo apt install -y minicom sudo minicom -D /dev/ttyUSB0 -b 115200如果minicom光标乱跳先把终端里硬件流控关掉。到这一步硬件链路基本确认没问题就可以开始装软件了。2.3 需要装的软件和它们各自干什么整个系统里真正干活的软件不多但每一个都有明确分工hostapd让树莓派的无线网卡变成一个人人可接入的WiFi热点相当于“开了一个AP”。dnsmasq同时提供DHCP和DNS服务给连进来的设备分配IP并帮它们做域名解析。NetworkManager和ModemManager负责识别和管理4G模块完成拨号让模块拿到IP地址。iptables做流量转发和NAT让客户端能借4G模块的“水”上网。安装命令很简单sudo apt update sudo apt install -y hostapd dnsmasq network-manager modemmanager libqmi-utils iptables-persistentRaspberry Pi OS较新版本的镜像已经自带NetworkManager老版本可能需要单独装。装完后建议先看一眼服务状态sudo systemctl enable --now NetworkManager ModemManager这里解释一下为什么推荐NetworkManager而不是自己去跑pppd新版系统对ModemManager的支持已经很成熟一条nmcli命令就能完成拨号、认卡、自动获取IP还自带了重连机制。自己写pppd脚本也可以但那是“能用”和“好维护”的区别第一版尽量让工具替你分担。3. 核心配置流程从拨号到WiFi全覆盖3.1 让4G模块拨号上网先确认ModemManager能看到你的4G模块sudo mmcli -L如果输出类似下面这样说明识别正常/org/freedesktop/ModemManager1/Modem/0如果SIM卡需要PIN码先解锁sudo mmcli -i 0 --pin1234然后直接用nmcli创建GSM连接。以中国移动为例APN是cmnetnmcli connection add type gsm ifname cdc-wdm0 con-name 4g-wan apn cmnet nmcli connection up 4g-wan有些卡需要PIN还可以在后面加一步nmcli connection modify 4g-wan gsm.pin 1234连接成功后检查是否拿到了IPip addr show wwan0 ip route如果看到wwan0上出现IPv4地址并且默认路由走的是wwan0说明4G拨号已经成功。不同运营商的APN不同我习惯直接记一张表运营商APN中国移动cmnet中国联通3gnet中国电信ctnet物联网卡见卡片说明如CMIOT等物联网卡很特殊有的默认APN不是标准cmnet拿到卡后先看说明书或者直接问客服要APN信息配置错了就是无信号但有卡状态特别坑。如果你手头是PPP类型的老模块比如SIM7600系列某些固件版本也可以用pppd拨号。大致思路是安装ppp然后写一个拨号脚本调用chat工具发AT指令把数据口指定成ttyUSB2APN填cmnet最后ATD*99#发起PDP会话。pppd方式能用但不管是日志可读性还是自动重连体验都不如NetworkManager。所以优先推荐走nmcli路线只有模块不支持qmi_wwan驱动时才退回去用PPP。3.2 搭建自己的WiFi热点AP4G拨号搞定后接下来让树莓派广播一个WiFi信号。创建hostapd配置文件# /etc/hostapd/hostapd.conf interfacewlan0 drivernl80211 ssidRPi-4G-Router hw_modeg channel6 wmm_enabled1 auth_algs1 wpa2 wpa_passphraseYourPassword wpa_key_mgmtWPA-PSK rsn_pairwiseCCMP country_codeCN很多人在这一步卡住现象是hostapd起来一秒钟就退出。最常见原因是NetworkManager把wlan0抢走了。解决办法是先让NetworkManager不要管这张无线网卡sudo nmcli device set wlan0 managed no因为树莓派板载无线网卡只支持2.4GHz频段channel建议选1、6、11三选一。这三个信道互相不重叠干扰最小。如果你附近邻居路由多试验后发现某个信道特别拥挤再换另外两个试。密码长度至少8位这里不建议再用什么生日或12345678毕竟是给别人连的网。配置完成后启动hostapdsudo systemctl unmask hostapd sudo systemctl enable hostapd sudo systemctl start hostapd这时手机上搜索WiFi应该能看到名为RPi-4G-Router的热点。先别急着连下一步还没配好DHCP连上了也拿不到IP。3.3 DHCP、IP分配与DNS热点能广播信号但客户端连上后还需要一个内网地址才能把数据发包给树莓派。这一步要先把wlan0设成静态IP我用的是192.168.42.1这个网段和运营商那边完全隔离方便路由管理。如果系统用的是dhcpcd编辑/etc/dhcpcd.confinterface wlan0 static ip_address192.168.42.1/24如果wlan0已经被NetworkManager设为unmanaged也可以手动临时加sudo ip addr add 192.168.42.1/24 dev wlan0然后把dhcp和dns的活儿交给dnsmasq。编辑/etc/dnsmasq.conf在前半部分加interfacewlan0 dhcp-range192.168.42.10,192.168.42.200,255.255.255.0,24h dhcp-optionoption:router,192.168.42.1 dhcp-optionoption:dns-server,192.168.42.1 no-resolv server223.5.5.5 server119.29.29.29这样连进来的设备会被分配192.168.42.10到192.168.42.200之间的地址网关指向树莓派自己DNS由dnsmasq转发上游用阿里和腾讯的公共DNS。之所以不直接让客户端去向运营商DNS请求是因为dnsmasq会做缓存内网设备重复查询同一个域名时速度更快也能减少4G流量的浪费。启动dnsmasqsudo systemctl enable dnsmasq sudo systemctl start dnsmasq3.4 开启转发和NATWiFi有了IP也能分配了但树莓派愿不愿意把流量转出去还得看内核和防火墙。先打开IP转发sudo sysctl -w net.ipv4.ip_forward1 echo net.ipv4.ip_forward1 | sudo tee -a /etc/sysctl.conf接下来是NAT规则。注意拨号接口名走QMI方式的一般是wwan0走ppp方式的接口是ppp0你看ip route里的default dev是哪个就用哪个。我这里以wwan0为例sudo iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE sudo iptables -A FORWARD -i wlan0 -o wwan0 -j ACCEPT sudo iptables -A FORWARD -i wwan0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT第一条规则把内网包的源地址伪装成树莓派在4G网络里拿到的地址相当于把所有设备的外出流量统一“署名”。最后保存一下规则重启后不会丢sudo netfilter-persistent save到这一步整条链路已经通了。手机连RPi-4G-Router打开浏览器应该能正常上网。如果还不行先别急后面第5章有完整的排查路径。3.5 开机自启和断线自动恢复路由器不可能每次都手动ssh进去启动服务所以要把关键环节做成开机自启。hostapd和dnsmasq已经用systemctl enable设置好了iptables规则也保存了还差4G拨号连接自启。先设置nmcli连接自动连接nmcli connection modify 4g-wan connection.autoconnect yes但光靠NetworkManager自启有时候不够稳模块枚举速度慢系统启动顺序稍有变化就可能导致拨号失败。我习惯写一个开机脚本放在/usr/local/bin/start-router.sh#!/bin/bash sleep 10 nmcli connection up 4g-wan 2/dev/null sleep 5 ip addr add 192.168.42.1/24 dev wlan0 2/dev/null || true systemctl start hostapd systemctl start dnsmasq iptables -t nat -C POSTROUTING -o wwan0 -j MASQUERADE 2/dev/null || iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE给它加执行权限再放到systemd服务里执行。最省事的做法是把脚本写到/etc/rc.local里但考虑到异常退出问题我用systemd服务管理更干净。再配合一个断线自动重连脚本定时检查4G链路#!/bin/bash if ! ping -c 2 -W 2 223.5.5.5 /dev/null 21; then nmcli connection down 4g-wan nmcli connection up 4g-wan fi放进crontab每5分钟执行一次。这样半夜信号波动导致掉线也能自动恢复不用大冬天爬起来拔插SIM卡。4. 功耗优化与便携化改造4.1 供电方案和实测电流树莓派加4G模块整个系统的功耗不是固定值而是根据网络活动动态变化的。我实测过树莓派4B搭配SIM7600CE状态电流5V输入待机只跑系统约0.6A4G模块待机约0.8A一台手机看视频约1.2A两台设备同时下载约1.8A也就是说峰值供电能力最好留到2.5A以上。我最初拿一个5V 1A的充电头测试结果4G模块一发起网络请求系统直接欠压关机。后来换成支持5V 3A的移动电源才稳定跑下来。部分移动电源会自动识别负载树莓派功耗低时它居然休眠断电了这也是个坑。所以选移动电源时尽量挑带小电流模式开关的型号或者直接用一个支持持续输出的DC-DC降压模块搭配18650电池组。如果你用的是树莓派Zero 2 W功耗会比4B低不少待机时可以压到400mA左右。但Zero的供电路径弱带SIM7600这种吃电大户很容易供电不足长期当路由器跑的话我更推荐老老实实用3B或4B。4.2 散热、外壳与天线布置树莓派4B发热非常明显空载开机一会儿散热片摸上去就发烫。4G模块的发热也不小很多模块是高通方案长时间大数据吞吐时温度能到60°C以上。高温带来的直接后果是网络不稳定、模块掉线。所以机箱里至少要有散热片和一个小风扇风扇可以3.3V供电转速低一点噪音不大。外壳方面我见过很多3D打印的成品外壳确实漂亮但这东西千万不能做成全封闭。一定要在两侧留进出风口风扇对着树莓派和4G模块吹。如果不用机箱用一捆扎带加铜柱把板子固定在一块亚克力板子上散热更好排查硬件时也更方便。天线位置影响很大。4G天线不要贴着金属外壳车规级模块和棒状天线最好伸出机箱信号强度通常能提升好几个dB。WiFi信号方面树莓派板载天线是PCB天线放在包里会衰减如果对覆盖要求高可以考虑给无线网卡外接天线但那就属于后续扩展了第一版先用板载天线把功能跑通。4.3 远程监控和流量统计做成便携路由器之后最尴尬的情况是不确定它是在正常工作还是已经悄悄断网。我习惯在树莓派上跑一个简单的流量统计脚本定时把/proc/net/dev里wwan0的收发字节数记录到文件里cat /proc/net/dev | grep wwan0这个数值大得吓人但除以1024再除以上次记录的时间差就能算出实时下行速率。把脚本放到crontab里每小时跑一次再配合SSH登录查看心里就有底了。更进阶一点的玩法是装Prometheus和node_exporter做流量图表。不过对于一台随身路由器我建议先别整那么重一个脚本够用了。5. 常见问题与排查技巧实录5.1 拨号失败和SIM卡识别问题拨不上号先把硬件层排除干净。执行mmcli -L看模块在不在如果不在八成是SIM卡没装好或者接触不良。SIM卡的金属触点要用酒精擦一下卡托压紧。如果模块在但SIM卡状态是locked就需要用mmcli -i 0 --pin解锁。确认卡没问题后再看APN。运营商标准卡用cmnet、3gnet、ctnet通常没问题物联网卡必须看卡片说明很多云卡有独立APN配置填错就是有信号无数据。还有一个隐藏问题部分卡注册到网络后没有激活PDP上下文表现为模块信号正常但拿不到IP。这时用AT指令看一下ATCGDCONT1,IP,cmnet ATCGACT1,1如果还是不行用ATCSQ看信号强度返回值在10以下基本没戏20以上才算能用。5.2 热点不稳定与信号干扰WiFi热点频繁断开先看供电。树莓派欠压时会在/var/log/syslog里留下警告输入vcgencmd get_throttled如果返回的十六进制值里有bit0或bit1就说明电压不足或发生过欠压换个电源试试。然后是信道问题2.4GHz只有1、6、11三个完全不重叠信道周边路由器多的话干扰很严重。如果开启hostapd后热点存在但极其卡很可能是加密方式兼容性问题。老设备建议把wpa2改成wpa1能兼容WPA和WPA2混合模式。不过这样安全性会下降我一般不推荐除非你手头确实有十年以上的旧设备要连。还要明确一点树莓派Zero和大多数板载无线网卡只有2.4GHz单频网速再快也跑不满4G模块的峰值。如果你追求高速可以考虑USB无线网卡支持5GHz AP模式但功耗和兼容性都是新的考验。5.3 能连WiFi但上不了网的排查这是最折磨人的问题手机连上了RPi-4G-Router也拿到了IP就是打不开网页。排查时我按这条链路一级一级测先ping网关ping 192.168.42.1如果网关不通问题在树莓派自身检查wlan0是否设置了静态IPdnsmasq是否在运行。然后ping公网IPping 223.5.5.5如果通了说明NAT没问题接着ping域名ping baidu.com如果域名不通那就是DNS解析问题检查dnsmasq配置里的server行有没有写对。如果公网IP都不通问题多半在4G拨号接口或NAT规则。执行iptables -t nat -L -n -v看看POSTROUTING链有没有命中数据包没命中就是接口名写错了比如你用的接口实际是ppp0规则里却写了wwan0。这一步排查最忌讳跳着测。老老实实从网关往外一层层测问题在哪一层马上就能定位。5.4 问题速查表症状常见原因处理方法模块不被识别SIM卡装反 / USB口接触不良断电重插检查lsusb有信号但没IPAPN错误 / PDP未激活改APNATCGDCONT配置热点启动后退出NetworkManager抢占wlan0nmcli device set wlan0 managed no能连WiFi但打不开网页NAT规则接口名错 / DNS失效检查iptables、dnsmasq配置频繁断流供电不足 / 信道干扰换电源换1/6/11信道网速跑不满2.4GHz瓶颈 / 天线方向差调整天线考虑5GHz扩展手机连上但无法获取IPdnsmasq未启动 / 静态IP丢失检查wlan0地址和dnsmasq状态除了表里列的还有一个很少被人提起的问题新版树莓派系统默认启用了predictable network interface naming有时无线网卡接口可能不叫wlan0而是叫wlan1或者其他名字。写hostapd配置之前一定要先用ip link确认接口名别想当然直接用wlan0。这台设备我断断续续用了大半年最大的感触是自制品最大的价值不在于省钱而在于出问题时你能一级一级查下去。手机热点挂了你只能熄屏重启碰运气而这台路由器每一层都摊开在你面前拨号、AP、DHCP、NAT哪个环节出问题都能直接定位。最后再分享一个小技巧物联网卡多半有流量有效期插进去之前先在后台确认清楚。别等月底流量清零了才意识到整台设备只能空转。配置完成之后先让它稳定跑一周等到你开始忘记它存在的时候这件小东西才算真正做好了。