我的软路由折腾之旅 篇三:在openmediavault上通过Docker实现OPENWRT旁路由功能

2020-06-20 11:28:38 66点赞 467收藏 89评论

创作立场声明:应该写成在debian或者ubuntu下实现docker运行软路由的功能,但是我感觉写omv可能会更有代表意义,在centos类的操作系统应该也是可以是实现该功能的。我想很多朋友和我最初一样会想利用群晖或者libreelec中的docker尝试,但是我这里没有成功,我猜测的原因是没有安装docker.io所致,unas的docker-ce套件也有这个问题。这篇文章属抛砖引玉,希望大家能够集思广益。

大家好,我是carlyang1986,不走寻常路的干货教程垃圾佬。网上很多的N1盒子搞OPENWRT做旁路由让我很是羡慕,于是我就在网上找但是没有发现在x86平台上能够实现的教程贴。还好功夫不负有心人,esir大神在docker hub上推出了一个可以给x86平台使用的docker镜像。让我等p民看到了希望,结合esir大神的教程,经过一番折腾,经历过多次重装更换系统我找到了一个在openmediavault,debian,ubuntu上实现使用docker运行openwrt旁路由的方法,如果大家感兴趣也可以结合我软路由系列的第一篇去设置单臂路由,这里就不做展开了,只来告诉大家在x86平台上通过docker运行openwrt的注意事项。

我的软路由折腾之旅 篇一:单网口电脑也能做主路由——openwrt平台下的安装过程论一个合格垃圾佬的自我修养——不抛弃,不放弃。在系列文章nas+htpc方案的最后两期提到这台过年期间淘汰下来的“受害者”1017u一体机无奈性能有限无法承担我越来越过份的影音播放和转码要求,于是我在大概三月份开启给他安排了很多种方案,其中就包括这个软路由的方案。中间尝试过lubuntu的虚拟机下运carlyang1986| 88 评论119 收藏852查看详情

为了不耽误大家的时间,我这里先说我折腾出来的结果:

首先,使用虚拟机的情况下。我试vmware,vitrualbox,hyper-v这三个虚拟机运行过debian9,debian10,ubuntu18.04,libreelec,U-NAS等系统在docker中运行openwrt的情况。都可以打开路由器的主界面,正常设置,但是路由的核心功能一概无法使用。但是,debian,ubuntu,omv系统在实体机上就可以了。到底什么情况我也不清楚,猜测是win10防火墙或者是虚拟机网络设置的问题。毕竟我不是虚拟机的作者也不是docker镜像的作者。为了自己的发际线和正常生活,所以到这一步我就没有继续折腾了,各位看官老爷们如果有兴趣和精力可以尝试下。

其次,我使用的NAS系统是OMV,网上下载的版本是5.3.9属于比较新的,老版本的应该也是可以的,这里我把OMV当成了原生的debian来用,直接通过命令行安装docker,没有使用系统插件库中自带的。esir大神的这个docker镜像个人感觉有点挑docker。我在DSM,libreelec,UNAS等系统下都尝试安装原生的docker套件都实现了能够看到路由器界面,但是功能无法使用的情况。感觉可能是套件中的docker版本不够高或者是缺少组件,总之就是本作者技术不行,没办法在这几个系统上运行成功,所以我的这个方法可以分享给大家去折腾,如果有人成功的话欢迎留言给我,给我点启发。

实现原理:

利用docker的macvlan技术,macvlan的有关知识请参考该文章,感谢作者的专业介绍。

另外,需要补充几个知识点,帮助大家理解macvlan。


我测试的结果和这个理论介绍的中提到的混杂模式有出入,我在所有的系统中尝试过打开和关闭网卡的混杂模式,对于建立openwrt镜像,访问web页面,设置服务等没有关系。换句话说,libreelec,黑群,u-nas等系统,打开混杂和不打开混杂,网页该能访问,访问。设置该能保存,保存。服务该用不了,用不了。所以对于第一次尝试的新手,我不建议去折腾这一项,也许其他场景中能用到再说。


这里引用一张图来解释docker中使用的bridge mode

在openmediavault上通过Docker实现OPENWRT旁路由功能

虽然macvlan有很多种,但是在docker中使用的是bridge模式。这种模式的特点是macvlan之间可以互相访问但是都不能和物理网卡直接进行访问,但是macvlan模式下网卡的效率会高很多,对于不支持网卡直通的CPU来说是一个巨大的福音。

部署openwrt镜像过程代码:

安装OMV,debian,ubuntu系统的教程请大家自行百度,不是本教程的重点这里不做展开说明。安装后使用root账户登录,或者使用sudo命令,#后面是注释。

1. 激活软件源

apt-get update

2. 安装docker.io, U-NAS的库中没有docker.io只有docker.ce加了debain9的源也没用,使用U-NAS的朋友请如果能安装上docker.io也请帮我测试下,讲道理应该也是可以用的。

apt-get -y install docker.io

我使用的是docker.io,U-NAS下使用docker-ce没有成功,原因不清楚。我使用的是docker.io,U-NAS下使用docker-ce没有成功,原因不清楚。

3. 如果是OMV系统可以在网络,界面中通过网络,接口看到网卡信息。

例如我这个网卡的名称是enp4s0,这里记住,下面要用。例如我这个网卡的名称是enp4s0,这里记住,下面要用。

4. 没有网络界面或者不知道怎么查的可以通过命令行来完成,这里先安装个工具,如果已安装可以略过。

apt-get install net-tools

我这里已经安装过了,大家可以参考下我安装后的版本。我这里已经安装过了,大家可以参考下我安装后的版本。

5. 查询网卡信息

ifconfig

这里可以看到列出了很多网卡信息,包括docker0。这里注意一下已经连到网络中的网卡。

在openmediavault上通过Docker实现OPENWRT旁路由功能

这里要多说一下,我这个物理网卡的名字是enp4s0,大家的可能跟我的不一样,这里不要照搬照抄,一定要记录下自己网卡的名字,后续会用到。

接下来使用docker安装openwrt的镜像,以下内容都在命令行中操作,虽然在portainer中也有图形界面去设置,但是感觉更麻烦,还不如命令行方便。

6. 创建macvlan网络,注意倒数第一步之前的命令末尾都要加空格

docker network create -d macvlan -o parent=enp4s0 eNet

这一步parent后面填自己刚才查到的网卡的名称,比如我的是enp4s0就写成enp4s0。如果是eth0就写eth0,按照自己上一步中查到的去写,不能照抄。

7. 设置maclvan的子网段,这里根据自己的网络的网段去设置。

--subnet=192.168.1.0/24

比如我的网段是192.168.1.X,路由器的网关是192.168.1.1,那么这里的网段信息就是192.168.1.0后面的/24的意思就是我们手动设置ipv4时候的子网掩码255.255.255.0的意思。

8. 设置macvlan的网关,注意这一步是没有空格的。

--gateway=192.168.1.1

这一步你路由器的网关或者访问路由器的IP地址是什么就设置成什么。

防止大家出错,这里截个图,大家注意格式。防止大家出错,这里截个图,大家注意格式。

因为我的macvlan网络已经创建好了,这里就点回车确认了,回车以后会提示网络创建好了。

9. 我们输入命令检查一下

docker network list

可以看到这个叫eNet的macvlan网络已经创建好了可以看到这个叫eNet的macvlan网络已经创建好了

10. 下载并运行openwrt镜像

docker run -d --restart always --name buddha --privileged --network eNet --ip=192.168.1.5 esirpg/buddha /sbin/init

这里我准备把openwrt当作旁路由来用,在ip后面设置一个ip地址给容器避免何其他地址冲突。大家可以根据自己的情况设置。这个镜像大概有60M,有可能中间会有retry,大家耐心等到pull完就好,如果多次没有陈工,就按键盘的ctrl+c退出这个命令,重新执行一次。我的镜像已经下载好了,这里不做截图演示了。

11. 进入到容器中设置openwrt的ip地址。

docker exec -it buddha ash

进入到路由器的命令行进入到路由器的命令行

openwrt旁路由设置过程:

在openwrt的命令行状态下,首先要设置openwrt路由器的ip地址。esir大神考虑到初学者可能对vi命令比较恐惧,所以内置了nano,为大神的贴心点赞。

nano /etc/config/network

旁路由设置示意旁路由设置示意

因为我的这个旁路由已经设置好了,所以这个地默认的wan和vpn0都删掉了,如果只需要做旁路由的朋友可以参考我图片中的设置。其中:

option ipaddr '192.168.1.5' 填openwrt管理页面的IP地址

option netmask '255.255.255.0' 填子网掩码默认好像就是255.255.255.0 没有特殊需要不要去改。

option gateway '192.168.1.1' 填路由器的IP网关地址,不知道自己网络网关地址的可以在电脑上通过CMD命令查询到。

我的路由器的网关我的路由器的网关

option dns '192.168.1.1 114.114.114.114 8.8.4.4' 填dns的ip地址,我这里填了这几个大家可以根据自己的情况填,其中192.168.1.1就是网关。这些设置好以后,进入到web页面中设置。

打开浏览器,输入openwrt的ip,进入到openwrt的管理页面。默认情况下输入任何密码都能进入,进入后首先按照提示修改登录密码,点击修改密码提示的字,或者从系统,控制权选项卡进入,填写自己的登录密码,点击保存并应用。

在openmediavault上通过Docker实现OPENWRT旁路由功能

然后从网络,接口选项卡中对LAN口进行设置,要注意的地方是去掉在此接口DHCP的勾,还有物理连接中去掉桥接,然后继续点保存并应用。

在openmediavault上通过Docker实现OPENWRT旁路由功能

在openmediavault上通过Docker实现OPENWRT旁路由功能

在openmediavault上通过Docker实现OPENWRT旁路由功能

在openmediavault上通过Docker实现OPENWRT旁路由功能

在openmediavault上通过Docker实现OPENWRT旁路由功能

这两步设置好以后就可以试着在服务等选项卡中设置订阅内容,后者尝试导入连接测试是否可以正常应用。我在libreelec,群晖,u-nas的docker中这一步尝试均失败。本人水平不行,无法解释其中原因,希望大家自己摸索,如果谁成功了,麻烦在评论区留言告诉我或者给我点提示。

在目前的局域网中可以把旁路由理解成一个网关服务器,去广告等服务内容是可以通过旁路由这个网关服务器处理后下发给客户机的,这样一定程度上减少了主路由运算的负担,而且旁路由的功能也更加强大,这里大家自己去摸索,不做展开介绍。服务设置好并正常使用后,回到主路由器的设置。

在主路由的DHCP或者内网设置中,将网关地址指向旁路由的IP地址,比如我的是192.168.1.5。设置好以后会提示重启,重启后再联网就可以享受旁路由的强大功能了。

将主路由的网关指向旁路由即可将主路由的网关指向旁路由即可

一点经验提示:

我在ubuntu18.04,debian 9, debian 10,以及衍生版omv 5.39下成功的实现了openwrt的搭建和运行,U-NAS系统是基于debian 9的讲道理如果放弃自带的docker套件,通过命令行安装上docker.io应该可以使用,我不知道是soures.list设置不对还是什么原因,无法安装中找到docker.io的package。如果是arm平台的朋友,可以参考N1搭建openwrt的文章,使用armbian完成配置,过程是类似的。docker是一个很开放的平台,有了debian,ubuntu和omv的成功经验,其他平台的朋友尝试过后也麻烦将结果在留言评论中告诉我,集思广益,也许您的宝贵经验能够帮助我在群晖和libreelec上找到突破口,这里再次感谢大家!

展开 收起

Xiaomi 小米 AX3000T 双频3000M 家用千兆Mesh路由器 Wi-Fi 6 白色 单个装

Xiaomi 小米 AX3000T 双频3000M 家用千兆Mesh路由器 Wi-Fi 6 白色 单个装

99元起

Xiaomi 小米 BE6500 Pro 双频6500M 家用千兆Mesh无线路由器 Wi-Fi 7

Xiaomi 小米 BE6500 Pro 双频6500M 家用千兆Mesh无线路由器 Wi-Fi 7

535元起

Ruijie 锐捷 雪豹 X30E 双频3000M 家用千兆Mesh无线路由器 Wi-Fi 6 白色 单个装

Ruijie 锐捷 雪豹 X30E 双频3000M 家用千兆Mesh无线路由器 Wi-Fi 6 白色 单个装

159元起

ZTE 中兴 AX3000 巡天版 双频3000M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装 白色

ZTE 中兴 AX3000 巡天版 双频3000M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装 白色

164元起

Xiaomi 小米 BE3600 2.5G版 3600M 双频千兆家用无线路由器 Wi-Fi 7 白色

Xiaomi 小米 BE3600 2.5G版 3600M 双频千兆家用无线路由器 Wi-Fi 7 白色

219元起

ASUS 华硕 RT-BE88U 双频7200M 家用Mesh无线路由器 Wi-Fi 7 黑色 单个装

ASUS 华硕 RT-BE88U 双频7200M 家用Mesh无线路由器 Wi-Fi 7 黑色 单个装

1999元起

Redmi 红米 AX6000 双频5952M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装黑色

Redmi 红米 AX6000 双频5952M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装黑色

329元起

Xiaomi 小米 AX6000 双频6000M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装 黑色

Xiaomi 小米 AX6000 双频6000M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装 黑色

299元起

HUAWEI 华为 BE3 Pro 双频3000M 千兆家用路由器 Wi-Fi 7 黑色

HUAWEI 华为 BE3 Pro 双频3000M 千兆家用路由器 Wi-Fi 7 黑色

289元起

Xiaomi 小米 BE7000 三频千兆Mesh无线路由器 Wi-Fi 7

Xiaomi 小米 BE7000 三频千兆Mesh无线路由器 Wi-Fi 7

406元起

HUAWEI 华为 AX2 Pro 双频1500M 家用千兆无线路由器 Wi-Fi 6 白色

HUAWEI 华为 AX2 Pro 双频1500M 家用千兆无线路由器 Wi-Fi 6 白色

132元起

ZTE 中兴 问天BE7200Pro+ 双频7200M 家用千兆Mesh无线路由器 WiFi 7 黑色

ZTE 中兴 问天BE7200Pro+ 双频7200M 家用千兆Mesh无线路由器 WiFi 7 黑色

579元起

TP-LINK 普联 BE5100 双频5100M 家用千兆Mesh无线路由器 Wi-Fi 7 黑色 单个装

TP-LINK 普联 BE5100 双频5100M 家用千兆Mesh无线路由器 Wi-Fi 7 黑色 单个装

279元起

TP-LINK 普联 飞流系列 TL-XDR5480 易展Turbo版 双频5400M 家用千兆Mesh无线路由器 WiFi 6 单个装 灰色

TP-LINK 普联 飞流系列 TL-XDR5480 易展Turbo版 双频5400M 家用千兆Mesh无线路由器 WiFi 6 单个装 灰色

379元起

ZTE 中兴 巡天AX3000Pro+ 双频3000M 家用千兆Mesh无线路由器 Wi-Fi 6 白色 单个装

ZTE 中兴 巡天AX3000Pro+ 双频3000M 家用千兆Mesh无线路由器 Wi-Fi 6 白色 单个装

269元起

HUAWEI 华为 Q6 网线版 双频3000M 千兆Mes无线分布式路由器 Wi-Fi 6 一母三子装 白色

HUAWEI 华为 Q6 网线版 双频3000M 千兆Mes无线分布式路由器 Wi-Fi 6 一母三子装 白色

469元起
89评论

  • 精彩
  • 最新
  • 能看懂这篇文章的,发际线可能都偏高吧 [喜极而泣]

    校验提示文案

    提交
    别人我不知道,这段时间我是高了不少。但是个人觉得难度应该比第二篇编译的那个小很多。

    校验提示文案

    提交
    收起所有回复
  • 就是docker里装openwrt,我是在n1里装的,也装了omv。恩山有不少帖子,照着做就行。

    校验提示文案

    提交
    N1是arm平台的,教程比较多,我看过一些,但是在PC平台上很少能找到适用的镜像,所以写这个出来给大家分享,毕竟不是每个人都有N1。

    校验提示文案

    提交
    赞,这应该是大妈上第一个x86的教程,配置本身不难,但是找镜像费劲,文章提到的亲测可用

    校验提示文案

    提交
    收起所有回复
  • 一直不敢碰openwrt,各种安装都是小事,就是不会设置,不懂原理,怕把家里网络再搞瘫痪了,但每次看到又眼馋

    校验提示文案

    提交
    搞瘫了也影响不到啥,光猫别乱搞,先把路由配置备份一份,出问题了把路由直接恢复出厂设置,再恢复配置,没啥可担心的,不折腾永远体会不到

    校验提示文案

    提交
    B站上有很多教学视频,我也是折腾累了不想折腾了。

    校验提示文案

    提交
    还有4条回复
    收起所有回复
  • 哎哟...我真羡慕你们有时间折腾

    校验提示文案

    提交
    每天也是顶着媳妇的埋怨,不过只要商量好每天给我2个小时写东西还是能理解我的。

    校验提示文案

    提交
    收起所有回复
  • 我是黑群晖虚拟爱快主和openwrt做旁路,黑群老提示他俩掉线。。但是使用却感觉不到

    校验提示文案

    提交
    虚拟机里最容易实现,docker的效率更高一点,不怎么吃配置,群晖那个虚拟机不支持网卡直通。

    校验提示文案

    提交
    请问一下大神,网卡直通是什么意思?

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 我一开始是在n1上装的openwrt,后来想我家云的omv上也可以运行docker,就在我家云的omv系统上装的docker,然后在docker上装的openwrt。有了docker我又装了ha,用来控制斐讯dc1插座。

    校验提示文案

    提交
    N1还是多面手,比树莓派开发板便宜多了。但是最近涨价有点多,我不准备折腾了。

    校验提示文案

    提交
    收起所有回复
  • 我估计是个假理科生,完全没明白

    校验提示文案

    提交
    这就和***做菜一样,跟着做就完了,理解这种事交给发明菜的人吧。我也只是借花献佛而已,好多问题解决不了。

    校验提示文案

    提交
    啰哩巴嗦一大通,都没讲清楚有什么用?

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 你网口可以用在另外的网口上吗?

    校验提示文案

    提交
    我没太明白你这句话的意思,你是电脑上有多个网口吗?

    校验提示文案

    提交
    收起所有回复
  • 谁帮忙科普下旁挂路由是干啥的?

    校验提示文案

    提交
    就是一台网关服务器,把去广告或者其他出国业务等走旁路由。

    校验提示文案

    提交
    就是把路由的部分功能分到另一个路由处理,缓解主路由压力或弥补主路由功能不足,比如酸酸乳。

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 我用笔记本的usb3转千兆网口做了一台单臂旁路由,感觉没啥用处。

    校验提示文案

    提交
    笔记本原本没网口?比较新的吧?这性能做主路由没问题。

    校验提示文案

    提交
    老本子,貌似是百兆的网口

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 群晖能装上,不能科学,知道原因的吗?

    校验提示文案

    提交
    可能是群晖的docker的问题吧,我在unas里面装dockerce也失败了,估计装docker.io就可以了。

    校验提示文案

    提交
    群晖里很早之前就折腾过,但科学就是跑不起来。试了很多镜像都一样。最终还是用虚拟机跑了。

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • n1装openwrt再跑docker,和docker里装openwrt什么区别,像是套娃呢

    校验提示文案

    提交
    你仔细品,鸡生蛋还是蛋生鸡。 [龇牙]

    校验提示文案

    提交
    收起所有回复
  • 可以看看unraid,虚拟机,docker,都有,直接在虚拟机里部署一个x64 openwrt, 还能各种直通。家里服务器稳定运行大半年了,我觉得挺适合家用 [高兴]

    校验提示文案

    提交
    没用unraid得原因是直通费劲 [邪恶]

    校验提示文案

    提交
    收起所有回复
  • 我家云可以这么搞

    校验提示文案

    提交
    我家云需要改供电不

    校验提示文案

    提交
    我的没改,刷了不掉盘固件一直很稳定

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 问个问题啊,作者提到没用hyper-v装OpenWrt,有什么问题吗?我感觉esir的版本挺好的啊,精品小包跑在hyper-v很稳定,不去折腾,基本是几周都不用重启。

    校验提示文案

    提交
    装完hyperv先建交换机,选择外部交换机。这时原有物理网卡就成为虚拟交换机了。宿主机和虚拟机的网卡可以理解成接在虚拟交换机下的虚拟网卡。建立虚拟机的时候,网卡配置选择接入刚才建立的外部交换机即可。hyperV应该还是挺稳定的,20多人办公场地,使用虚拟爱快做主路由,经常是几个月不用重启的。

    校验提示文案

    提交
    谢谢提示,我下次补一篇。

    校验提示文案

    提交
    收起所有回复
  • 我用了这个旁路由后,电脑的无线上网偶尔会断线,几十秒后又自动重新连上了,请问是什么原因呢?

    校验提示文案

    提交
    我不知道你的无线上网用了哪种方式,建议换一个好点的ap或者让ap夜里定时重启下。

    校验提示文案

    提交
    用的是华硕ax3000无线路由,电脑网卡是ax200,连的无线5g网,无线路由里默认网关设的软路由的ip。

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • openwrt装好了,但是这个上面的clash我不能用。clash无限重启。

    校验提示文案

    提交
    我没用过crash [吐血]

    校验提示文案

    提交
    用了openclash,可算可以上网了

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 我发现我硬件平台debian版本是i386的情况下安装docker各种不成功 32位系统出错的原因是镜像源里没有docker i386对应的包 换kali debian6.0 debian9.5安装docker出错的问题也很类似 如果是64位操作系统成功率95%以上 邪门儿

    校验提示文案

    提交
    32位我也是很久没经历过了

    校验提示文案

    提交
    收起所有回复
  • 还有一个问题,照您的设置完之后其他设备都成功链接,但是docker下其他的宿主container与macvlan不通,都断网了。

    校验提示文案

    提交
    抱歉,这条请无视吧,我自己解决了。

    校验提示文案

    提交
    抱歉,几天没看,问下你咋搞定的。

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 想问一下楼主DHCP是在主路由开启还是在容器内开启,我尝试用树莓派进行容器内的Openwrt服务,现在能访问到openwrt页面,但是好像旁路有并没有生效,主路由的网口网关也配置了 现在有些迷惑 [想一想]

    校验提示文案

    提交
    容器里是旁路由,在主路由内打开DHCP

    校验提示文案

    提交
    [欢呼] 又看了一遍文章 终于修好了 感谢楼主

    校验提示文案

    提交
    还有1条回复
    收起所有回复
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
467
扫一下,分享更方便,购买更轻松