在树莓派4B上搭建透明代理服务器
Preface
树莓派的初始化
树莓派的系统直接使用官方提供的Raspberry Pi OS(powered by Debian 12)。
此处遇到一个小问题,即使用Raspberry Pi Imager对系统进行定制时,写入的Wi-Fi配置无效。暂时不清楚这是笔者的配置问题还是Raspberry Pi Imager的bug。解决方案也很简单,树莓派开机后使用有线网络登录并激活Wi-Fi即可。
由于Raspberry Pi OS使用NetworkManager作为默认的网络管理工具,因此完全不需要使用iw
、iwlist
以及wpa_cli
等命令,也不需要手工编写wpa_supplicant.conf
以激活Wi-Fi连接。直接使用NetworkManager提供的命令行工具nmtui
即可方便的添加Wi-Fi配置。
激活Wi-Fi后,在自己的路由器中为树莓派设置静态IP绑定。鉴于IPv6的兼容性,这里依然选择使用IPv4。笔者使用小米的家用路由器,因此局域网段为192.168.31.0/24
。树莓派分配的IP地址为192.168.31.23
。在路由器中配置静态IP绑定的方式,相比在Raspberry Pi OS配置IP地址更为方便灵活。
激活网络后,可以更换系统的软件源,以期取得更快的软件下载安装速度。对应Raspberry Pi OS而言,因为它是Debian的衍生版本,因此可以直接使用Debian的软件源;同时,对于树莓派特有的软件,需要单独替换/etc/apt/sources.list.d/raspi.list
。这里使用清华大学Tuna协会提供的软件镜像,具体参考:
安装docker
Docker CE的安装也参考了清华大学Tuna协会的帮助。
以下操作均需使用特权(普通用户配合sudo
命令)。
笔者采用自动方式安装,执行以下命令即可将Docker CE的下载地址以及软件源地址修改为清华大学开源软件镜像站,并进行无人值守自动安装:
DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce" curl -fsSL https://get.docker.com/ | sudo -Esh |
等待安装完成后,编辑/etc/docker/daemon.json
,将如下内容写入。该部分是限制docker生成的日志文件的大小。笔者使用SD卡作为树莓派的硬盘,因此希望尽量减少写入以延长SD卡的寿命。
{ |
此外,默认情况下,普通用户无法执行docker的相关命令,如有需要可以按以下步骤,授权普通用户执行docker命令。
sudo gpasswd -a $USER docker # 1. 将用户添加到`docker`用户组 |
完成以上操作后,重启docker服务使改动生效:
sudo systemctl daemon-reload |
配置Meta Kernel(代理核心)
主要参考示例配置。
在家目录下创建文件~/mihomo/data/config.yaml
,注意文件的后缀必须是yaml
而非yml
。将示例配置拷贝到该文件中,并进行以下定制。
对proxy-providers
字段进行如下的改动,以<>
包裹的字段要根据实际情况替换:
proxy-providers: |
使用MetaCubeXD作为Meta Kernel的外部控制器(图形前端)。添加或者修改以下字段以启用外部控制器:
external-controller: 192.168.31.0:9090 # 允许局域网内的设备访问 |
secret
字段相当于访问密码,如不需要可以置空或者删除该字段。
Meta Kernel in docker
MetaCubeXD提供了一种在docker内运行Meta Kernal和MetaCubeXD的方法。
创建~/mihomo/docker-compose.yml
,写入以下配置:
1 | version: '3' |
Meta Kernel的默认配置目录是/root/.config/mihomo/
,因此笔者将主机下的~/mihomo/data/
目录整体挂载过去,即可使上一步编写的config.yaml
生效。
切换到~/mihomo/
目录,使用以下命令即可启动docker:
docker compose up -d |
此时即可在浏览器中访问树莓派的IP地址192.168.31.23
,访问MetaCubeXD了。在MetaCubeXD中选择自己订阅的代理即可。
可以使用以下命令更新、重启这两个docker服务(需要进入~/mihomo
目录):
docker compose kill # 停止meta dockers服务 |
如需排查问题,可以使用以下命令进入meta docker:
docker exec -it meta sh # meta docker仅提供sh终端 |
Meta Kernel on Windows
TO BE FINISHED…