群晖上用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