群晖上用Docker安装OpenWrt
什么是 OpenWrt ?
OpenWrt是一款基于Linux系统的开源路由器操作系统,可以将普通的PC或嵌入式设备转变成为一个功能强大的路由器。
老苏对没玩过的东西总是比较好奇,准备用 Docker 搭建一个 OpenWrt 来研究研究。
网上管这种玩法叫旁路路由,但是老苏不确定自己能否实现这样的效果,第一阶段的目标只要跑起来就行了,剩下的可以慢慢学习。
安装
在群晖上以 Docker 方式安装。
为避免模式切换带来的困扰,本次安装全程采用命令行方式,请用 SSH 客户端登录到群晖,但老苏尽量避免了进入容器内的操作
网络环境说明
开始前先简单说明下老苏局域网的网络环境
IP |
说明 |
|---|---|
192.168.0.1 |
主路由 IP |
192.168.0.11 |
准备分配给 OpenWrt 容器的 IP |
192.168.0.197 |
群晖 IP |
查看网卡信息
登录到群晖上,执行 ifconfig 命令,显示当前网络配置信息

其中,docker0 是 一个虚拟网桥,它用来为 Docker 的容器提供网络连接服务,而 docker-xx则是各个容器的网络接口
往下拉,还会看到其他的网络接口,而 eth0 通常表示第一个以太网接口,也就是我们的主网卡

开启混杂模式
在正常模式下,当网卡接收到数据包时,会验证它是否属于自己。如果不是,会丢弃数据包,但在混杂模式下,则会接收所有经过网卡的数据包,包括不是发给本机的包
网上大部分用的命令是
1 | ip link set eth0 promisc on |
但应该用 ifconfig 也可以
1 | # 设置混杂模式 |
创建 macvlan 网络
macvlan 是一种 Linux 的网络驱动,它可以让容器或虚拟机直接连接到物理网络,而不需要使用 NAT 或桥接。macvlan 会为每个容器或虚拟机分配一个独立的 MAC 地址,这样它们就可以在网络上被识别和访问
1 | # 创建 macvlan 网络 |

其中:
192.168.0.0/24是老苏当前局域网的网段192.168.0.1是当前网关(也就是主路由IP)eth0为群晖主机的网卡macnet为要创建的子网名称,可以随便取
你需要根据自己的网段进行修改。完成后,可以通过 docker network ls 查看

网络配置文件
在 docker 目录中新建 openwrt 及子目录
1 | # 新建文件夹 openwrt 和 子目录 |
现在的目录结构是这样的

将下面的内容写入到 network.conf
1 | config interface 'loopback' |
我们只要关注 lan 部分
ipaddr:是老苏准备分给OpenWrt的IP地址,要和当前局域网在同一个网段gateway:是主路由的IP地址dns: 老苏用了8.8.8.8和114.114.114.114
运行容器
1 | # 启动容器 |
其中:
-d:使容器运行在Daemon模式;--restart always:容器退出时始终重启,使服务尽量保持始终可用;--name openwrt:容器的名称;--network macnet:将容器加入macnet网络;--privileged: 容器运行在特权模式下;/sbin/init:容器启动后执行的命令;
正常情况下,你可以直接跳到 运行 章节,开始访问 OpenWrt 的网页了
进入容器
这一步,是假设后续你更改了 network.conf 文件,就会需要进入容器内重新加载网络配置,而不需要重启容器,这样会更快捷
1 | # 进入容器 |

运行
这里需要特别说明的是,即便你启用了
tailscale子网路由,从远程访问http://192.168.0.11也是无法打开登录界面的,需要在局域网登录后,在Web管理页面取消只允许内网访问才行
现在在浏览器中输入 http://192.168.0.11 ,就能看到登录界面
默认用户:
root,密码为空

登录成功后的主界面

首先当然是设置密码

默认情况下,是开启了 Dropbear 实例的

所以你可以用 SSH 客户端登录到 OpenWrt,账号密码和 Web 是一样的

接下来,就是慢慢学习了,如果有时间的话 😂
参考文档
SuLingGG/OpenWrt-Docker: Build OpenWrt Docker Images For Raspberry Pi 1~4 (Daily Update)
地址:https://github.com/SuLingGG/OpenWrt-Docker在Docker 中运行 OpenWrt 旁路网关 | 美丽应用
地址:https://mlapp.cn/376.htmlimmortalwrt/immortalwrt at openwrt-18.06-k5.4
地址:https://github.com/immortalwrt/immortalwrt/tree/openwrt-18.06-k5.4