在openmediavault上通过Docker实现OPENWRT旁路由功能
创作立场声明:应该写成在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的注意事项。
为了不耽误大家的时间,我这里先说我折腾出来的结果:
首先,使用虚拟机的情况下。我试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的有关知识请参考该文章,感谢作者的专业介绍。
我测试的结果和这个理论介绍的中提到的混杂模式有出入,我在所有的系统中尝试过打开和关闭网卡的混杂模式,对于建立openwrt镜像,访问web页面,设置服务等没有关系。换句话说,libreelec,黑群,u-nas等系统,打开混杂和不打开混杂,网页该能访问,访问。设置该能保存,保存。服务该用不了,用不了。所以对于第一次尝试的新手,我不建议去折腾这一项,也许其他场景中能用到再说。
这里引用一张图来解释docker中使用的bridge mode
虽然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没有成功,原因不清楚。
3. 如果是OMV系统可以在网络,界面中通过网络,接口看到网卡信息。
4. 没有网络界面或者不知道怎么查的可以通过命令行来完成,这里先安装个工具,如果已安装可以略过。
apt-get install net-tools
5. 查询网卡信息
ifconfig
这里可以看到列出了很多网卡信息,包括docker0。这里注意一下已经连到网络中的网卡。
这里要多说一下,我这个物理网卡的名字是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
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的管理页面。默认情况下输入任何密码都能进入,进入后首先按照提示修改登录密码,点击修改密码提示的字,或者从系统,控制权选项卡进入,填写自己的登录密码,点击保存并应用。
然后从网络,接口选项卡中对LAN口进行设置,要注意的地方是去掉在此接口DHCP的勾,还有物理连接中去掉桥接,然后继续点保存并应用。
这两步设置好以后就可以试着在服务等选项卡中设置订阅内容,后者尝试导入连接测试是否可以正常应用。我在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上找到突破口,这里再次感谢大家!


















校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案