本文介绍在多网口设备上基于docker部署openwrt主路由,OpenWrt是一个基于Linux的嵌入式操作系统的开源项目,主要用于嵌入式设备上路由网络流量。使用docker相对于虚拟机方案性能损耗更低。使用docker也是all in one方案的一个不错的选择。
本方案在一个Linux多网络主机上使用docker部署openwrt主路由,教程中使用的系统为Debian12系统(因为debian11的系统无法识别我的I226-V网卡)
建议开启系统代理,方便拉取镜像,毕竟国内的网络环境拉取镜像,更新系统的速度感人。或者使用国内软件源和docker仓库。
① 安装docker:
curl -sSL https://get.docker.com/ | sh
② 开启网卡的混杂模式:
ip link set enp1s0 promisc on
ip link set enp2s0 promisc on
注:这里的 enp1s0
和 enp2s0
都是系统检测到的网络接口,对应了实际的网口。这里以双网口为例,一个用于openwrt的 wan 口,一个用于openwrt的 lan 口。可以使用 ifconfig
或 ip addr
命令查看本机的网络接口。
⚠ 如果使用docker部署openwrt,对于多网口设备建议也使用双网口来部署openwrt,因为使用多网卡,即使openwrt将多个网口桥接也只有一个网口能够正常通讯,原因未知。(如将两个网口桥接为lan口,并在lan口开启DHCP,wan口正常连接互联网,也只有一个lan口能正常访问互联网,另一个lan口甚至不能访问同局域网内的设备)
PS:混杂模式是指一台机器的网卡能够接收所有经过它的数据流,而不论其目的地址是否是它。 一般计算机网卡都工作在非混杂模式下,此时网卡只接受来自网络端口的目的地址指向自己的数据。 当网卡工作在混杂模式下时,网卡将来自接口的所有数据都捕获并交给相应的驱动程序。如果不开启混杂模式,docker容器就不能通过这个网口,正常收发数据。
③ docker创建macvlan网络:
docker network create -d macvlan -o parent=enp1s0 macnetwan
docker network create -d macvlan -o parent=enp2s0 macnetlan
使用 parent 参数指定要绑定的网口,最后是为网络命名。可以使用 docker network ls
查看所有的docker网络,使用 docker network rm 网络名
删除某个网络。
④ 启动容器:
docker run --name openwrt \
--restart always \
-d --network macnetlan \
--privileged sulinggg/openwrt:x86_64 /sbin/init
这里使用了 --network
参数将这个容器放到了网络 macnetlan 上,对于openwrt系统,第一个绑定的网口将命令为eth0,默认作为lan口。这里使用了x86_64架构的openwrt镜像,其他CPU架构的应拉取其他镜像。详见:sulinggg/openwrt - Docker Image | Docker Hub
⑤ 将wan口添加进openwrt容器:
docker network connect macnetwan openwrt
⑥ 进入容器修改配置:
docker exec -it openwrt bash
进入容器后修改配置文件:
vim /etc/config/network
这里使用了vim命令编辑配置文件,打开配置文件后编辑lan口的配置信息(找到config interface 'lan'这一段),修改静态ip,网关等配置信息,如:
option ipaddr '192.168.2.1'
option netmask '255.255.255.0'
option gateway '192.168.2.1'
基本只需要修改这三项即可,这里是给了lan口一个固定ip:192.168.2.1,这是openwrt lan的ip
修改完成后,保存配置文件,然后执行如下命令使配置文件生效:
/etc/init.d/network restart
⑦ 将另一个设备使用网线接入刚刚配置的lan口,给设备一个静态ip,比如:192.168.2.100,然后浏览器访问 192.168.2.1 即可打开openwrt的管理界面。一般地,默认的登录密码为:password
⑧ 主路由配置简介:openwrt基本配置入门01——主路由与旁路由基本配置
捐赠通道,感谢!🦀🦀