基于树莓派Zero2W搭建一个随身旁路由
By 苏剑林 | 2025-08-02 | 20543位读者 |前段时间搞了个很迷你的开发板树莓派Zero2W(下面简称“Pi”),还搭配了个USB Key转接板,这几天折腾了一下,用于实现一个随身的旁路由。本文记录一下关键技术点,供有同样需求的读者参考。
背景描述 #
折腾过代理的同学,对“旁路由”这个概念应该不陌生,这里主要将旁路由用作透明代理。现在相关技术已经很成熟,所以有一台小主机的情况下,搭建一个透明代理并不算困难。而本文的主要关注点在于“随身”,这就要求小主机满足以下几个特性:
1、小巧(不然不适合随身带);
2、有连接Wi-Fi功能;
3、随时可以切换网络。
这里比较麻烦的是第3点。假设我带着笔记本和小主机来到了一个新环境,知道了当地的Wi-Fi账号密码,那我怎么才能让小主机连上新Wi-Fi呢?这里的关键是小主机还没连网时,笔记本怎么连上小主机,如果有网口的情况下,通过网线连接自然可以,但带网口的主机通常不小,而且随身带网线也累赘(Macbook还需要配转接头)。
树莓派Zero2W + USB Key正好可以完美实现这个需求!它能够在作为主机运行的同时还模拟一张网卡,通过USB口连接到电脑时,既可以给Zero2W供电,又可以构建一条Zero2W到电脑的直连通道,使得我们可以不经过Wi-Fi就连接到Zero2W上去。
烧录镜像 #
事实上,这种USB直连Pi Zero的方案由来已久,比如教程《树莓派 Zero USB/以太网方式连接配置教程(macOS平台)》已经是2018年的了,但里边的配置方式已经过时,这里主要更新一下在K2的帮助下能跑通的最新方案。
首先,准备SD卡,烧录最新的Raspberry Pi OS镜像到SD卡上。现在官方出了Raspberry Pi Imager,烧录镜像变得更简单了,这里烧录镜像的时候要注意几个细节,首先是必须把Wi-Fi账号密码配置好(后面可以改,第一次配置需要用Wi-Fi),然后必须开启SSH,其余的按需调整:
建议把主机名也设置好并记住,这样后面在内网中我们就可以直接通过它来访问Pi,而不需要记IP地址。设置完成后就可以烧录镜像了,烧录结束后,把SD卡继续用读卡器插到电脑上(我的电脑是Macbook Pro,系统是macOS 15.3.1,下面都简称“Mac”),在SD卡的根目录找到config.txt文件,在末尾加一句(当前末尾是[all]):
dtoverlay=dwc2至此,烧录镜像步骤完成。
网卡配置 #
现在我们可以将SD卡插入到Pi上,然后通过USB口将Pi插入到Mac,那么Pi就会通电启动,等到启动完成后,由于刚才已经配置了Wi-Fi,所以Pi应该已经顺利连上了网络,这时候把Mac也连接到同一个网络,我们就可以通过ssh me@pi.local来SSH上去Pi,当然,也可以在路由器处查找它的IP,通过IP来SSH。
接着我们在Pi端执行
sudo modprobe g_ether
sudo ip link set usb0 up
sudo ip addr add 169.254.7.11/16 dev usb0执行完后通过ifconfig观察,可以发现多出了个名为usb0的网卡,并且ip设置为了169.254.7.11,这属于内网保留 IP,可以自行设置,没有什么特殊考虑也可以直接复制。
稍等一会后,我们转到Mac端“设置”-“网络”,正常情况下会多出一个RNDIS/Ethernet Gadget服务,并已经自动连接上,点击“详细信息”可以看到通过DHCP方式分配了IP,我们将它改为手动模式,IP为169.254.7.1,路由留空。这个IP原则上也可以自定义,但没什么特殊考虑也是直接复制就好。
再次转到Pi端,执行ping 169.254.7.1,能ping通,说明Pi和Mac已经通过USB口组了一个小型局域网,Mac的IP是169.254.7.1,Pi的IP是169.254.7.11,在Mac端通过ssh me@169.254.7.11也可以连接到Pi。
启动服务 #
不过现在的网卡配置都是一次性的,重启就没了,我们需要将它配置成开机自动启动的服务,这样以后才能在没有网络的情况下,还能通过USB口以及ssh me@169.254.7.11连接到Pi,这就是我们的最终目的。
在Pi端,新建/usr/local/bin/usb0.sh:
#!/bin/bash
sudo modprobe g_ether
sudo ip link set usb0 up
sudo ip addr add 169.254.7.11/16 dev usb0
nohup ping -c 100 169.254.7.1 > /var/log/usb0_ping.log 2>&1 &
exit 0然后sudo chmod +x /usr/local/bin/usb0.sh,再新建/etc/systemd/system/usb0.service,写入
[Service]
Type=oneshot
ExecStart=/usr/local/bin/usb0.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target最后执行
sudo systemctl daemon-reload
sudo systemctl enable usb0.service就可以了。以后将Pi插入Mac,等开机完成后,就可以通过`ssh me@169.254.7.11`连接上去,如果有需要通过sudo raspi-config可以连接/切换Wi-Fi。
文章小结 #
至于剩下的搭建旁路由/透明代理的步骤,就请大家自行折腾了。本文主要是帮助大家把“随身”这一步跑起来,剩下的看自己发挥了。
转载到请包括本文地址:https://spaces.ac.cn/archives/11206
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Aug. 02, 2025). 《基于树莓派Zero2W搭建一个随身旁路由 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/11206
@online{kexuefm-11206,
title={基于树莓派Zero2W搭建一个随身旁路由},
author={苏剑林},
year={2025},
month={Aug},
url={\url{https://spaces.ac.cn/archives/11206}},
}













August 13th, 2025
但 zero2w 只支持 2.4GHz 802.11b/g/n 的 wifi,性能还是太孱弱了,感觉主要还是捣鼓为主
确实,不过旁路由不需要自己发Wi-Fi,勉强够用。