之前 100 多买的便携式路由器,刷了 OpenWrt 后用了一段时间,最近发现他代理的流量比直通的流量会慢很多,走代理的网速只有走直通的 1/5,经过排查之后基本可以确定是机器性能的问题。于是决定将功能分离到旁路由,由旁路由实现,刚好我也有一个 Debian 系统的 mini 主机 ☞零刻 EQ12pro 搭建一个低功耗的家庭服务器,最后确定了使用 docker 部署 OpenWrt 实现旁路由功能的方案。下面来说说我是这么做的吧。
先找资料
解决困难少不了搜索引擎的帮助,很快我就找到了网上一些有关方案,这些方案基本都指向了一个源头 ☞https://mlapp.cn/376.html,也主要是这篇文章给予了我最大的帮助,但由于文章是 2019 年 10 月发布的,这也是作者(SuLingGG)在他博客发布的最后一篇文章,一些内容已经过时,其中也有一些小坑需要注意的。
精炼的来说,教程大概可以分成三个部分,第一部分是对宿主机(这里指我的小主机)的配置,第二部分是 OpenWrt 容器的操作,最后就是主路由的一些配置了。
宿主机配置
打开网卡混杂模式,该模式使得网络接口可以获取和处理网络传输的所有数据包,而不是仅仅接收针对自己的数据包
# 首先查看自己网口的信息, Debian使用的是ip address命令 # 其他linux系统可能使用ifconfig命令 # 通过观察ip信息,找到正确的网口 ip address # 我这里是 enp2s0 # 管理员权限设置网口为混杂模式,记得把enp2s0替换成你的网口 sudo ip link set enp2s0 promisc on
创建 docker 网络,这里需要按照自己主路由的网络情况来填写
# 你需要替换ip(旁路由ip)、subnet(主路由子网掩码)、gateway(主路由网关)、parent(网口)为你网络的信息 sudo docker network create -d macvlan --ip=192.168.99.90 --subnet=192.168.99.0/24 --gateway=192.168.99.1 -o parent=enp2s0 macnet
拉取 docker 镜像,由于 SuLingGG 大佬的原镜像不再维护,我拉取的是
dickhub/sulinggg-openwrt-mini
# 根据系统架构选择tag sudo docker pull dickhub/sulinggg-openwrt-mini:x86_64 # 拉取完成后执行容器 sudo docker run --restart always --name openwrt -d --network macnet --privileged dickhub/sulinggg-openwrt-mini:x86_64 /sbin/init
容器配置
进入容器修改网络信息
执行
docker exec -it openwrt bash
命令进入容器的终端,再输入vim /etc/config/network
对配置文件进行修改,我们需要修改 Lan 口的配置:# 我们主要修改以下三项配置,gateway与dns填写主路由的信息 # ip地址随意只要在网段内且不与已经存在的客户端冲突即可 config interface 'lan' option ipaddr '192.168.99.100' option gateway '192.168.99.1' option dns '192.168.99.1'
保存修改后,执行
/etc/init.d/network restart
重启网络进入 OpenWrt 管理界面
设置无误的话,我们根据上一步设置的 ip 地址就可以进入后台,进入之后需要先设置密码。
关闭 DHCP 服务器
通过
网络
→接口
→LAN
进入网口的配置页,将 DHCP 服务器的忽略此接口
勾选上配置完成,开始安装你想要的软件吧,这里不做多的赘述,不喜欢折腾的话我个人推荐先安装
istore
然后去 github 上找 Are-u-ok
主路由即客户端配置
我们可以在通过在客户端设置网关和 DNS 为我们 OpenWrt 容器的 ip 地址来使得客户端的流量走我们的旁路由,我使用的就是这种办法,这样更加灵活一些,我们可以自由选择经过旁路由的设备。
当然我们也可以在主路由的 DHCP 中直接下发我们旁路由的网关和 DNS 来将所有连接到主路由的设备都指向旁路由。