docker部署OpenWrt旁路由

2023-07-1911 min 教程

之前 100 多买的便携式路由器,刷了 OpenWrt 后用了一段时间,最近发现他代理的流量比直通的流量会慢很多,走代理的网速只有走直通的 1/5,经过排查之后基本可以确定是机器性能的问题。于是决定将功能分离到旁路由,由旁路由实现,刚好我也有一个 Debian 系统的 mini 主机 ☞零刻 EQ12pro 搭建一个低功耗的家庭服务器,最后确定了使用 docker 部署 OpenWrt 实现旁路由功能的方案。下面来说说我是这么做的吧。

先找资料

解决困难少不了搜索引擎的帮助,很快我就找到了网上一些有关方案,这些方案基本都指向了一个源头 ☞https://mlapp.cn/376.html,也主要是这篇文章给予了我最大的帮助,但由于文章是 2019 年 10 月发布的,这也是作者(SuLingGG)在他博客发布的最后一篇文章,一些内容已经过时,其中也有一些小坑需要注意的。

精炼的来说,教程大概可以分成三个部分,第一部分是对宿主机(这里指我的小主机)的配置,第二部分是 OpenWrt 容器的操作,最后就是主路由的一些配置了。

宿主机配置

  1. 打开网卡混杂模式,该模式使得网络接口可以获取和处理网络传输的所有数据包,而不是仅仅接收针对自己的数据包

    # 首先查看自己网口的信息, Debian使用的是ip address命令
    # 其他linux系统可能使用ifconfig命令
    # 通过观察ip信息,找到正确的网口
    ip address
    # 我这里是 enp2s0
    
    # 管理员权限设置网口为混杂模式,记得把enp2s0替换成你的网口
    sudo ip link set enp2s0 promisc on
  2. 创建 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
  3. 拉取 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

容器配置

  1. 进入容器修改网络信息

    执行 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 重启网络

  2. 进入 OpenWrt 管理界面

    设置无误的话,我们根据上一步设置的 ip 地址就可以进入后台,进入之后需要先设置密码。

  3. 关闭 DHCP 服务器

    通过 网络 接口 LAN 进入网口的配置页,将 DHCP 服务器的 忽略此接口 勾选上

  4. 配置完成,开始安装你想要的软件吧,这里不做多的赘述,不喜欢折腾的话我个人推荐先安装 istore 然后去 github 上找 Are-u-ok

主路由即客户端配置

我们可以在通过在客户端设置网关和 DNS 为我们 OpenWrt 容器的 ip 地址来使得客户端的流量走我们的旁路由,我使用的就是这种办法,这样更加灵活一些,我们可以自由选择经过旁路由的设备。

当然我们也可以在主路由的 DHCP 中直接下发我们旁路由的网关和 DNS 来将所有连接到主路由的设备都指向旁路由。

评论
正在加载评论组件...