OpenWrt 全屋翻墙旁路由实现记录
前言
很多人认为软路由必须买专门的工控机,但作为开发者,我们手头闲置的性能怪兽才是最佳选择。本次实验对象是一台拥有 4核8线程 i7-7700HQ 的神舟 战神Z7 kp7d2,它是我的私人服务器。我们将通过 Docker Macvlan 技术,让它在不破坏原宿主机 宝塔面板环境的前提下,化身为全家网络的“大脑”。
第一部分:宿主机(Ubuntu)的地基搭建
在 Docker 运行旁路由,最难的不是容器本身,而是宿主机网卡的权限。
开启内核转发
Linux 默认不转发包,不开启此项,流量进得来出不来。
Bash
sudo sysctl -w net.ipv4.ip_forward=1
# 永久生效echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
网卡混杂模式(Promiscuous Mode)
这是最容易被忽视的巨坑。 旁路由需要处理不属于自己 MAC 地址的包,必须开启混杂模式。
Bash
sudo ip link set enp2s0 promisc on
创建 Macvlan 网络
我们需要给 Docker 容器一个真实的局域网身份,使其与小米 BE3600 路由器处于同一地位。
Bash
docker network create -d macvlan \
--subnet=192.168.31.0/24 \
--gateway=192.168.31.1 \
-o parent=enp2s0 macnet
第二部分:OpenWrt 容器部署与网络调优
启动容器
使用特权模式运行,确保 OpenWrt 能修改容器内核网络。
Bash
docker run -d --name openwrt --restart always --privileged --network macnet --ip 192.168.31.2 sulinggg/openwrt:x86_64 /sbin/init
接口配置(单臂路由逻辑)
进入 OpenWrt 后台(192.168.31.2),进入 网络 -> 接口 -> LAN:
- IPv4 网关:必须指向小米路由器
192.168.31.1。 - 使用自定义 DNS:建议填
192.168.31.1。 - IPv6:将分配长度设为“已禁用”。旁路由架构下,IPv6 是导致手机“WiFi 图标消失”和“假断网”的元凶。
- DHCP 服务器:勾选“忽略此接口”,让小米路由器继续负责分配 IP。
防火墙补丁(必做)
在 网络 -> 防火墙 -> 自定义规则 添加: iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE 这行命令强制 OpenWrt 进行 SNAT 转换,解决小米路由器不认识回程流量的问题。
第三部分:OpenClash 高级配置(梯子落地)
OpenClash 是基于规则的 Clash 客户端,由于我们的 CPU 性能过剩,建议开启全功能模式。
模式选择
- Redir-Host:最稳定的模式,适合 Docker 环境。
- 规则模式 (Rule):实现国内流量直连,美国服务器流量走代理的核心。
DNS 防污染设置
进入 OpenClash -> 全局设置 -> DNS 设置:
-
勾选 本地 DNS 劫持:确保所有设备的域名请求都被 OpenClash 接管。
-
勾选 自定义上游 DNS:
- 国内:阿里云 (223.5.5.5)、腾讯 (119.29.29.29)。
- 国外:Google (8.8.8.8)。
-
分流逻辑:国内域名通过国内 DNS 解析并直连,国外域名通过加密隧道解析。
节点导入与启动
- 在 配置文件订阅 中贴入你的美国服务器链接,点击更新。
- 回到 运行状态 点击“启动 OpenClash”。
第四部分:全屋自动起飞(小米 BE3600 配置)
当你手动在手机上设置 192.168.31.2 作为网关能通了,就可以去小米路由器后台改 DHCP:
- 默认网关:
192.168.31.2 - DNS 1:
192.168.31.2 - DNS 2:
192.168.31.1(备用方案) - 关闭IPV6,现在我还不会怎么做IPV6翻墙
第五部分:踩坑实录与总结
那个该死的“193”
在配置手机静态 IP 时,千万注意不要手抖将 192 写成 193。这种低级错误会导致内网能进后台,但流量永远发不到真正的网关上。我成功的把192.168.xx.x写成了193.xx.x.x, 卡我2天。
为什么重启后没网了?
因为 Ubuntu 重启后网卡混杂模式会失效。 解决方案: 编写一个 Shell 脚本,包含 ip link set enp2s0 promisc on,并利用 crontab @reboot 或 systemd 实现开机自启。
手机 WiFi 图标消失
这通常是由于手机发出的检测包(访问苹果或谷歌的验证服务器)没有得到回包。检查 OpenClash 的节点是否可用,以及防火墙的 MASQUERADE 规则是否生效。
结语
这次折腾让我们明白了,旁路由不是一个插件那么简单,它是一场关于 Linux 网络转发、防火墙规则和 DNS 解析的综合实践。神舟笔记本 i7 的性能让网页开启速度达到了毫秒级,这才是开发者该有的网络环境!