群晖上用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 通常表示第一个以太网接口,也就是我们的主网卡

开启混杂模式

在正常模式下,当网卡接收到数据包时,会验证它是否属于自己。如果不是,会丢弃数据包,但在混杂模式下,则会接收所有经过网卡的数据包,包括不是发给本机的包

网上大部分用的命令是

ip link set eth0 promisc on

但应该用 ifconfig 也可以

# 设置混杂模式
ifconfig eth0 promisc

# 禁用混杂模式
ifconfig eth0 -promisc

创建 macvlan 网络

macvlan 是一种 Linux 的网络驱动,它可以让容器或虚拟机直接连接到物理网络,而不需要使用 NAT 或桥接。macvlan 会为每个容器或虚拟机分配一个独立的 MAC 地址,这样它们就可以在网络上被识别和访问

# 创建 macvlan 网络
docker network create -d macvlan \
   --subnet=192.168.0.0/24 \
   --gateway=192.168.0.1 \
   -o parent=eth0 \
   macnet

其中:

  • 192.168.0.0/24 是老苏当前局域网的网段
  • 192.168.0.1 是当前网关(也就是主路由 IP)
  • eth0 为群晖主机的网卡
  • macnet 为要创建的子网名称,可以随便取

你需要根据自己的网段进行修改。完成后,可以通过 docker network ls 查看

网络配置文件

docker 目录中新建 openwrt 及子目录

# 新建文件夹 openwrt 和 子目录
mkdir -p /volume1/docker/openwrt/data/lock

# 进入 openwrt 目录
cd /volume1/docker/openwrt

# 创建 network.conf 文件
touch network.conf

# 编辑 network.conf 文件
vi network.conf

现在的目录结构是这样的

将下面的内容写入到 network.conf

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option packet_steering '1'

config interface 'lan'
        option type 'bridge'
        option ifname 'eth0'
        option proto 'static'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option ipaddr '192.168.0.11'
        option gateway '192.168.0.1'
        option dns '8.8.8.8 114.114.114.114'

config interface 'vpn0'
        option ifname 'tun0'
        option proto 'none'

我们只要关注 lan 部分

  • ipaddr:是老苏准备分给 OpenWrtIP 地址,要和当前局域网在同一个网段
  • gateway :是主路由的 IP地址
  • dns: 老苏用了 8.8.8.8114.114.114.114

运行容器

# 启动容器
docker run -d \
   --restart always \
   --name openwrt \
   --network macnet \
   --privileged \
   --ip 192.168.0.11 \
   -v $(pwd)/network.conf:/etc/config/network \
   -v $(pwd)/data:/var \
   sulinggg/openwrt:x86_64 /sbin/init

其中:

  • -d:使容器运行在 Daemon 模式;
  • --restart always :容器退出时始终重启,使服务尽量保持始终可用;
  • --name openwrt :容器的名称;
  • --network macnet:将容器加入 macnet 网络;
  • --privileged: 容器运行在特权模式下;
  • /sbin/init:容器启动后执行的命令;

正常情况下,你可以直接跳到 运行 章节,开始访问 OpenWrt 的网页了

进入容器

这一步,是假设后续你更改了 network.conf 文件,就会需要进入容器内重新加载网络配置,而不需要重启容器,这样会更快捷

# 进入容器
docker exec -it openwrt /bin/ash

# 加载网络配置
/etc/init.d/network restart

#退出容器
exit

在这里插入图片描述

运行

这里需要特别说明的是,即便你启用了 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.html

immortalwrt/immortalwrt at openwrt-18.06-k5.4
地址:https://github.com/immortalwrt/immortalwrt/tree/openwrt-18.06-k5.4

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨浦老苏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值