Docker 部署 OpenWRT 教程:简单易用
OpenWRT,一个基于 Linux 的开源路由器操作系统,以其高度的可定制性和强大的功能,深受广大网络爱好者的喜爱。它不仅能让你的路由器摆脱厂商固件的限制,还能让你拥有更多高级功能,比如流量控制、VPN 服务器、Adblock 等。
然而,直接在路由器上刷入 OpenWRT 存在一定的风险,例如硬件兼容性问题、刷机失败导致变砖等。为了避免这些风险,同时享受 OpenWRT 的强大功能,我们可以利用 Docker 技术,在容器中运行 OpenWRT,从而实现零风险、易部署的体验。
本教程将详细介绍如何使用 Docker 部署 OpenWRT,让你轻松搭建一个功能强大的软路由,摆脱硬件限制,体验 OpenWRT 的魅力。
一、 为什么选择 Docker 部署 OpenWRT?
在深入教程之前,让我们先了解一下 Docker 部署 OpenWRT 的优势:
- 零风险部署: Docker 容器是隔离的,不会影响宿主机的操作系统。即使 OpenWRT 容器出现问题,也不会影响你的宿主机运行,避免了直接刷机带来的硬件风险。
- 易于管理: 使用 Docker Compose 可以轻松管理和配置 OpenWRT 容器,包括网络设置、端口映射、存储卷等,所有配置都集中在一个文件中,方便备份和迁移。
- 灵活性: Docker 容器可以在任何支持 Docker 的平台上运行,包括 Linux、Windows 和 macOS。这意味着你可以在各种设备上体验 OpenWRT,例如电脑、服务器、甚至是 NAS 设备。
- 资源隔离: Docker 容器可以限制 CPU、内存等资源的使用,避免 OpenWRT 占用过多资源,影响宿主机的性能。
- 快速部署和更新: 通过 Docker Hub 拉取 OpenWRT 镜像,可以快速部署 OpenWRT 容器。更新 OpenWRT 版本也非常简单,只需拉取新的镜像并重新启动容器即可。
- 多 OpenWRT 实例: 可以在同一台宿主机上运行多个 OpenWRT 实例,每个实例拥有独立的网络配置和功能,满足不同的网络需求。
- 试验性环境: 可以轻松创建 OpenWRT 容器作为试验性环境,测试各种配置和插件,而无需担心影响实际使用的路由器。
二、 准备工作
在开始部署之前,请确保你已经满足以下条件:
- 安装 Docker: 你的操作系统需要安装 Docker。 Docker 官方网站提供了详细的安装指南,请根据你的操作系统选择合适的安装方式:https://docs.docker.com/get-docker/
- 安装 Docker Compose (可选): 虽然可以直接使用 Docker 命令运行 OpenWRT 容器,但使用 Docker Compose 可以更方便地管理和配置容器。 Docker Compose 通常会随 Docker 一起安装,如果没有,可以参考 Docker 官方文档进行安装:https://docs.docker.com/compose/install/
- 网络环境: 你需要了解你的网络环境,包括网关地址、DNS 服务器等。
三、 部署步骤
下面我们将详细介绍如何使用 Docker 部署 OpenWRT。
步骤 1:拉取 OpenWRT 镜像
首先,我们需要从 Docker Hub 拉取 OpenWRT 镜像。 Docker Hub 是一个 Docker 镜像的公共仓库,里面包含了各种各样的镜像。
在终端中执行以下命令:
bash
docker pull jerrykuku/openwrt-lean:latest
这条命令会从 Docker Hub 下载 jerrykuku/openwrt-lean:latest
镜像。 jerrykuku/openwrt-lean
是镜像的名称, latest
是标签,表示下载最新版本的镜像。
你可以根据自己的需求选择其他 OpenWRT 镜像,例如:
jerrykuku/openwrt-lean:x86_64-generic
:适用于 x86_64 架构的设备。jerrykuku/openwrt-lean:armv7l
:适用于 ARMv7l 架构的设备,例如树莓派。
步骤 2:创建 Docker Compose 文件 (可选)
为了更方便地管理 OpenWRT 容器,我们可以创建一个 Docker Compose 文件。 Docker Compose 文件是一个 YAML 文件,用于定义 Docker 容器的配置,包括镜像、端口映射、存储卷、网络设置等。
创建一个名为 docker-compose.yml
的文件,并添加以下内容:
yaml
version: "3.8"
services:
openwrt:
image: jerrykuku/openwrt-lean:latest
container_name: openwrt
hostname: OpenWRT
privileged: true # 必须,OpenWRT 需要访问硬件资源
network_mode: "host" # 必须,使用 host 网络模式
# ports: # host网络模式不需要端口映射
# - "80:80" # OpenWRT Web 管理界面
# - "22:22" # SSH 访问
environment:
- TZ=Asia/Shanghai # 设置时区
- PASSWORD=password # 设置 Web 管理界面的密码
restart: always
代码解释:
version: "3.8"
:指定 Docker Compose 文件的版本。services:
:定义服务列表。openwrt:
:定义名为openwrt
的服务。image: jerrykuku/openwrt-lean:latest
:指定使用的镜像。container_name: openwrt
:指定容器的名称。hostname: OpenWRT
:指定容器的主机名。privileged: true
:非常重要,必须设置为true
。OpenWRT 需要访问宿主机的硬件资源,例如网络接口,才能正常工作。network_mode: "host"
:非常重要,必须设置为host
。使用host
网络模式,OpenWRT 容器将直接使用宿主机的网络,无需进行端口映射,简化了网络配置。ports:
:由于使用了host
网络模式,因此不需要进行端口映射。如果使用其他网络模式,例如bridge
,则需要进行端口映射,将容器内的端口映射到宿主机的端口。environment:
:设置环境变量。TZ=Asia/Shanghai
:设置时区为上海。PASSWORD=password
:设置 Web 管理界面的密码。请务必修改为自己的密码。
restart: always
:设置容器在退出时自动重启。
步骤 3:启动 OpenWRT 容器
在包含 docker-compose.yml
文件的目录下,执行以下命令:
bash
docker-compose up -d
这条命令会启动 OpenWRT 容器,并将其在后台运行。
如果不想使用 Docker Compose,可以直接使用 Docker 命令启动容器:
bash
docker run -d --name openwrt --hostname OpenWRT --privileged --network=host -e TZ=Asia/Shanghai -e PASSWORD=password jerrykuku/openwrt-lean:latest
步骤 4:访问 OpenWRT Web 管理界面
在浏览器中输入宿主机的 IP 地址,即可访问 OpenWRT Web 管理界面。 默认端口是 80。
使用之前设置的密码登录。
步骤 5:配置 OpenWRT (重要)
登录 OpenWRT Web 管理界面后,你需要进行一些基本的配置,才能让 OpenWRT 正常工作。
- 配置网络接口: 这是最重要的一步。你需要配置 OpenWRT 的网络接口,才能让它连接到你的网络。由于使用了
host
网络模式,OpenWRT 将直接使用宿主机的网络接口。你需要根据你的网络环境配置 LAN 口和 WAN 口。 一般来说,你需要将LAN口设置为你的内网IP地址,并设置一个与你现有路由器不同网段的IP地址,避免冲突。 WAN口通常不需要配置,因为OpenWRT容器是作为旁路由运行的。 - 配置 DNS: 在 “网络” -> “接口” -> “LAN” -> “高级设置” 中,配置 DNS 服务器。 可以使用公共 DNS 服务器,例如 Google DNS (8.8.8.8, 8.8.4.4) 或 Cloudflare DNS (1.1.1.1, 1.0.0.1)。
- 配置防火墙: OpenWRT 默认启用了防火墙,你需要根据你的需求配置防火墙规则。
- 安装插件: OpenWRT 拥有丰富的插件库,你可以根据自己的需求安装各种插件,例如 Adblock、VPN 服务器、流量控制等。
步骤 6:将宿主机设置为 OpenWRT 的网关 (重要)
为了让网络流量经过 OpenWRT 容器,你需要将宿主机设置为 OpenWRT 的网关。
具体操作方法取决于你的网络环境和需求。 例如,你可以将宿主机的 IP 地址设置为局域网内其他设备的网关。 也可以在你的主路由器上设置静态路由,将特定的流量转发到宿主机的 IP 地址。
四、 常见问题及解决方案
- 无法访问 OpenWRT Web 管理界面:
- 确保 OpenWRT 容器已经启动。
- 检查宿主机的防火墙是否阻止了对 80 端口的访问。
- 确认你的浏览器没有缓存旧的 IP 地址。
- OpenWRT 无法连接到网络:
- 检查 OpenWRT 的网络接口配置是否正确。
- 确认宿主机的网络连接是否正常。
- 检查 DNS 设置是否正确。
- CPU 占用率高:
- 尝试限制 OpenWRT 容器的 CPU 使用率。
- 检查是否有插件占用过多 CPU 资源。
- 内存占用率高:
- 尝试限制 OpenWRT 容器的内存使用率。
- 检查是否有插件占用过多内存资源。
- 如何更新 OpenWRT 版本:
- 拉取新的 OpenWRT 镜像:
docker pull jerrykuku/openwrt-lean:latest
(或其他你需要的镜像) - 停止并删除旧的容器:
docker stop openwrt && docker rm openwrt
(或使用 Docker Compose:docker-compose down
) - 使用新的镜像重新启动容器:
docker run -d ...
(或使用 Docker Compose:docker-compose up -d
)
- 拉取新的 OpenWRT 镜像:
五、 总结
通过本教程,你已经学会了如何使用 Docker 部署 OpenWRT。 Docker 部署 OpenWRT 具有零风险、易部署、灵活性强等优势,让你能够轻松搭建一个功能强大的软路由,体验 OpenWRT 的魅力。
希望本教程对你有所帮助。 祝你使用愉快!
六、 高级用法 (可选)
- 使用 OpenWRT 作为 VPN 服务器: 可以在 OpenWRT 上安装 VPN 服务器,例如 OpenVPN 或 WireGuard,以便安全地访问你的家庭网络。
- 使用 OpenWRT 进行流量控制: 可以使用 OpenWRT 的流量控制功能,限制不同设备的带宽使用,确保关键应用的流畅运行。
- 使用 OpenWRT 进行广告拦截: 可以安装 Adblock 插件,拦截广告,提升上网体验。
- 使用 OpenWRT 作为 DNS 服务器: 可以配置 OpenWRT 作为本地 DNS 服务器,加速域名解析,并可以添加自定义的 DNS 记录。
这些高级用法需要一定的 Linux 和网络知识,你可以参考 OpenWRT 的官方文档或其他相关资料进行学习。 祝你玩得开心!