折腾软路由也有几年了,系统从 Debian 换到 Arch,运营商从电信换到广电又换到移动,透明代理工具也是在 mihomo (Clash.Meta) 和 sing-box 之间来回切换过不少次。这么长时间也积累了不少经验,于是打算在这一篇文章里一并记录下
运营商的选择
由于各地运营商的情况不尽相同,这里只说广州的情况:
- 电信:贵,千兆档位是给开动态公网 v4 的,有动态公网 v6 封常用端口,稳定性最好
- 广电(aka 珠江宽频):不给 v6,公网 v4 原来免费现在收 50 元/月,拉完了
- 移动:性价比高,新装不给光猫改桥接了,无公网 v4,有动态公网 v6 且不封 80, 443 端口
- 联通:价格应该跟广电差不多,没用过
综合看下来广州移动算是一个不错的选择,晚高峰时期延迟(国内网站 / CN2 线路)也不错
软路由系统的选择
- 其实 Debian 用来做软路由非常不错,而且官方源的软件版本一般都比较稳定,如果不想折腾的话选择 Debian 完全 OK,可直接参考之前的文章,更推荐这种组合:Debian + systemd-networkd + sing-box
- 当然,都开始玩软路由了哪有不折腾的,Arch 的优势在于内核足够新且软件源更新比较勤,个人使用体验下来没那么容易滚挂,所以也是非常推荐的
- 至于 OpenWRT 和爱快(好像已经支持硬件直通了?)这些之前文章也有一些说明,如果技术能力不是很强或者不想折腾也是个不错的选择,就是可玩性没那么高罢了
Arch 安装
安装直接看这个就行 https://wiki.archlinuxcn.org/wiki/安装指南 注意事项如下:
- 最好避免直接使用
archinstall来安装系统 - 最好先通过 DHCP 配置好网络,如果运营商不给公网 v4 光猫改桥接意义不大
- 运行
pacstrap时最好一并带上nftables包(如果需要路由器拨号再追加一个ppp包) - 优先考虑
systemd-boot作为引导,如果电脑不支持 EFI 再考虑grub2
安装完成后,强烈推荐同时配置 archlinuxcn,另外也别忘了把源都换成国内镜像
路由器基础配置
sysctl
现行版本 Arch 已经不用 /etc/sysctl.conf 这个文件来进行配置了,直接创建并编辑 /etc/sysctl.d/99-forward.conf
1 | net.ipv6.conf.all.forwarding = 1 |
只需要配置 IPv6 转发并不是因为不需要设置 IPv4 转发,而是如果使用 systemd-networkd 来配置网络会自动帮我们开启 IPv4 转发,无需额外的显式配置(其实理论上 IPv6 也无需显式指定,但是感觉内核有一点 bug,必须开了 all 才生效)
systemd-networkd
先用 ip a 列一下物理网卡,决定好哪个用作 WAN 口,哪些需要组局域网桥(本文不讨论单网口旁路由,双网口机器不需要组网桥),这里仍然假设有四个网口:eno1 用作 WAN,eno2 ~ eno4 用作 LAN
先配置 /etc/systemd/network/10-wan.network WAN 口联网(除非有公网 v4 否则不推荐软路由拨号)
1 | [Match] |
接着配置 /etc/systemd/network/20-br0.netdev 创建网桥
1 | [NetDev] |
然后配置 /etc/systemd/network/30-lan.network 绑定几个物理网口到网桥
1 | [Match] |
最后配置 /etc/systemd/network/40-br0.network 完善 LAN 信息
1 | [Match] |
注意:
- 上述配置只会通告 SLAAC(无状态 IPv6 地址),而不开启 DHCPv6 Server(也没必要开)
networkd本身已经可以实现几乎全部ifupdown+dnsmasq+dhcp6c和部分nftables功能- 通过
systemctl enable --now systemd-networkd开机自启动网络服务 - 通过
systemctl restart systemd-networkd重启服务刷新配置
nftables
虽然 networkd 已经接管了 NAT 部分的配置,但是仍然需要防火墙等的额外配置,直接编辑文件 /etc/nftables.conf
1 | #!/usr/bin/nft -f |
同样的,需要仿照 systemd-networkd 的命令对 nftables 设置开机自启和重启
透明代理配置
这个时候 Arch 的优势就体现出来了,不管是 mihomo 还是 sing-box 都可以直接通过 archlinuxcn 仓库安装,而且更新非常及时。这里更推荐 sing-box 因为就连 mihomo 的 TUN 功能(透明代理的核心)底层实现也是 sing-tun (fork)
这里直接给出一个 /etc/sing-box/config.json 配置以供参考
1 | { |
当然,如果是光猫拨号的话,也可以考虑 dae 这种性能更好的方案,这个就纯看个人喜好了
All in Boom
其实对于性能过剩的机器,还是很推荐装个 docker 跑额外服务的,挂个大容量盘做 NAS 也是个不错的选择,这里简单列一下我自己在用的一些服务
- qBittorrent: 用来挂 PT 站还是很不错的,而且像 byr 这种其实只是禁止了国内运营商地址访问网页,P2P 协议其实仍然可以直连,这个不需要 docker 直接
pacman -S qbittorrent-nox就行 - Home Assistant: 如果有很多米家的智能家居设备想要用 Apple Home 控制,如果想要写出高度自定义的自动化任务,这个还是非常推荐的
- immich: 轻松实现多设备照片自动备份,如果对云盘的隐私协议存疑,可以尝试使用
- Jellyfin: 配合 PT 站 DIY 自己的影视资源库
另外,飞牛 似乎也是当下比较流行的一个选择,待我有空了折腾下试试