【2022.04.21】在docker中搭建openwrt软路由系统,实现多网口以及主路由功能
前言
没搞完,不知道为啥一直重启,下次再补上这篇博客
因为大多docker搭建软路由时,实现的是旁路由单网口的拓扑
这次想要尝试下多网口搭建openwrt,以便实现主路由功能
本次使用的docker镜像:raymondwong/openwrt_r9 - Docker Image | Docker Hub
网口设置
先用ifconfig查看一下接口名称,我这里是enp2s0与enp3s0
那么将对应的网卡启动混淆模式
ip link set enp3s0 promisc on
ip link set enp2s0 promisc on
后期要关闭的话,把on改成off
为了以防万一,比如外接网卡可能在服务器重启后失效,那么还要加入开机自启动
nano /etc/init.d/iplinkset.sh
将上面的两句命令,和脚本规范开头一起复制进来
#!/bin/sh
ip link set enp3s0 promisc on
ip link set enp2s0 promisc on
ctrl+x y entel 保存退出
增加可执行权限
chmod +x /etc/init.d/iplinkset.sh
设置开机启动
update-rc.d iplinkset.sh defaults
如果想要删除这个启动项
update-rc.d -f iplinkset.sh remove
虚拟网卡
- 我们现在要基于现有的网卡创建两个
macvlan
类型的网卡,这样后面创建的容器才能有网卡进行挂载使用,并且使用独立的网卡进行数据报文的通讯。macnet1
我们作为后面openWRT容器
运行的Wan口
使用,macnet2
则是Lan口
。 - OPENWRT 使用网络说明
- wan: 192.168.1.0/24
- lan:192.168.22.0/24
macvlan模式
docker 的 macvlan 模式,这个模式通俗一点讲就是在一张物理网卡上虚拟出两个虚拟网卡,具有不同的MAC地址,可以让宿主机和docker同时接入网络并且使用不同的ip,此时 docker 可以直接和同一网络下的其他设备直接通信,相当的方便,但是这种模式有一个问题,宿主机和容器是没办法直接进行网络通信的,如宿主机ping容器的ip,尽管他们属于同一网段,但是也是ping不通的,反过来也是。因为该模式在设计的时候,为了安全禁止了宿主机与容器的直接通信,不过解决的方法其实也很简单——宿主机虽然没办法直接和容器内的 macvlan 接口通信,但是只要在宿主机上再建立一个 macvlan,然后修改路由,使数据经由该 macvlan 传输到容器内的 macvlan 即可,macvlan 之间是可以互相通信的。
创建网络
因为我现在双网口只接了一条,这条是入网的wan口,且在enp3s0上
因此在shell中输入以下命令
docker network create -d macvlan --subnet=192.168.2.0/24 --gateway=192.168.2.1 -o parent=enp3s0 macnet1
可以在可视化界面见到新建的网络
建立lan口的网络,这里我还没接上线
docker network create -d macvlan -o parent=enp2s0 macnet2
同理也是进入可视化界面验证一下
创建容器
输入以下命令
这句命令可以让现在未接入的LAN口分配地址192.168.1.254
docker run --name openwrt --restart always -d --network macnet2 --privileged -v /lib/modules:/lib/modules raymondwong/openwrt_r9:autobuild-main-x86_64 /sbin/init
输完这条命令后,可以进入192.168.1.254,默认密码password
参考链接
Docker 部署多网口 openWrt 软路由 - 「Yang'zun」PlayGround (treesir.pub)
Docker 部署的 openWrt 软路由, 并解决无法与宿主机通信问题 - 「Yang'zun」PlayGround (treesir.pub)