Docker部署OpenWrt实现旁路由上网的详细步骤以及排雷点
一、起因
前两年玩AIO和黑群的时候,折腾Docker部署OpenWrt做旁路由,从来没有成功过,后来通过用虚拟机安装实现了旁路由的功能,所以也就没在细查问题。包括家里的白群上,也是用虚拟机安装了OpenWrt而不是用Docker。
前两天心血来潮,玩了下飞牛nas的系统,测试Docker的时候,突然想起了几年前绕过去的这个坑,决定再尝试尝试,一番折腾之后成功了,于是写下来做个备忘。
二、过程
1、准备固件,docker版本的一般是xxx.tar.gz文件,假设叫wrt.tar.gz吧。
2、开启设备网卡混杂模式,ssh里输入命令:
ip link set eth0 promisc on
这里是第一个坑,eth0一般是linux下第一个网卡的名字,我用vm装的飞牛,敲了这个命令,结果提示eth0不存在!见鬼了的,明明是可以上网的?ifconfig查看了下,飞牛里这块网卡的名字是ens33。。。行吧,于是命令变成
ip link set ens33 promisc on
OK,搞定。接下来设置网络
3、创建一个名为openwrt的macvlan
docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.254 -o parent=ens33 openwrt
这一步,是整个安装过程中最大的坑,回想下,当年没有搞定,就是这里出了问题,网上搜教程搜攻略,大多数是复制粘贴的一句:
docker network create -d macvlan –subnet=10.0.0.0/24 –gateway=10.0.0.1 -o parent=eth0 openwrt
先不说这一句命令错误百出,里边的子网、网关值也鲜有解释说明,照抄的话,基本上抄一个死一个。首先subnet的值,必须是现实中网络环境所处网段,大多数家庭用户通过路由器自动获取ip上网的话,ipv4地址一般都是192.168.0.x,网关是192.168.0.1,那么这里的subnet值就要写成“192.168.0.0/24”,gateway值为“192.168.0.1”。我这里网段是192.168.0.0,但是网关是254。其次,parent=eth0这里,也要按照实际情况修改,比如我这里的网卡就不是eth0而是ens33
4、加载镜像,创建并启动容器
docker import wrt.tar.gz myopenwrtdocker run --restart=always --name=openwrt -d --network=openwrt --privileged myopenwrt /sbin/init
5、进入openwrt容器的bash
docker exec -it openwrt sh
6、修改OpenWrt的管理ip地址
nano /etc/config/network
找到interface为“lan”的代码段,找到option ipaddr ,修改后边引号里的ip地址为你需要的值,例如'192.168.0.188',然后保存退出。
7、重启OpenWrt网络
/etc/init.d/network restart
8、浏览器里输入刚才设置的ip地址,用默认用户名密码登录后根据自己的情况进行设置,然后将其他上网设备的网关改为OpenWrt的ip地址,OK,完成。
三、结束
本次部署一次成功,也解决了之前的问题,把回想起来的两个坑做个说明备忘,也希望能帮到有缘人。