家庭网络配置:利用 Docker 在闲置笔记本上运行 OpenWRT 作为旁路由
通过 Docker 在闲置笔记本上运行 OpenWRT 作为旁路由,充分利用旧设备,提升家庭网络的可定制性和功能性。本文详细介绍了从零开始配置 Docker 环境、创建 macvlan 网络、运行 OpenWRT 容器,并进行网络配置的全过程。无论是去广告、科学上网,还是流量监控和 VPN 服务,都可以通过旁路由轻松实现。适合有一定 Linux 基础的用户,帮助你将闲置设备变身为强大的网络工具。
过年回家总想着折腾点什么,于是就瞄上了早已退休的19年拯救者。相信很多家庭都有闲置的笔记本电脑,性能尚可却一直闲置。如果希望充分利用这些设备,可以考虑将其改造成“旁路由”(又称“透明网关”或“旁挂路由”),将某些网络功能(如去广告、流量监控、VPN 等)卸载到这台机器上进行处理。但是,这么强大的一个X86平台,重新刷一个Openwrt系统太大材小用了,已经装了Ubuntu的它还可以有更多用处(All in BOOM)。如果不想大动硬件也不想重装系统,Docker 技术可以派上用场。通过在闲置笔记本上运行一个 OpenWRT 容器,就可以以旁路由的方式接管或旁路处理局域网的流量。
本文将介绍从零开始完成一套基本环境配置,包括:
- 检查和配置网络接口
- 创建 Docker macvlan 网络
- 拉取并运行 OpenWRT 镜像
- 进入容器进行简单网络配置
1 环境与思路
1.1 闲置笔记本电脑
- 需要一台可以正常联网的笔记本(最好有以太网口)。如果只有无线网卡,需要额外注意无线网卡桥接或 macvlan 可能受限。
- 笔记本的操作系统可以是任意 Linux 发行版(Ubuntu、Debian、CentOS、Arch Linux 等),只要能安装 Docker 即可。
1.2 Docker 环境
确保 Docker 可以正常启动和拉取镜像,如果不熟悉 Docker 的安装,可以参照 Docker 官方文档 或对应发行版社区的文档。如在大陆地区,可参照此处配置镜像。
1.3 旁路由思路
- 在传统路由器(或主路由)仍然负责 DHCP、主要 NAT 功能的前提下,让 OpenWRT 容器在笔记本上“旁路”处理网络中的其他功能,比如去广告、科学上网、流量分析等。
- 所有设备可以灵活选择是否需要使用旁路由,避免爆炸的时候网络异常或是增加家中长辈的用网成本。
- 为了让笔记本上运行的 OpenWRT 容器拥有和内网同网段的 IP,需要使用
macvlan
网络模式。
2 检查并配置网络接口
2.1 查看网卡信息
在 Linux 上,首先用 ifconfig
或 ip addr
命令查看网卡信息。以下示例输出里,重点关注无线网卡 wlp0s20f3
、有线网卡 enp7s0
以及它们的 IP 地址:
|
|
|
|
当然这只是我的设备情况,每个设备的网卡名称几乎都是不同的,需要自主根据IP地址、流量信息去确定,但大多数情况下,以太网卡的名称会以“e”开头,比如“eth0”或是我的“enp***“,后文中所有的代码中,记得把enp7s0
替换成你的设备名称,你可以在此博客页面代码框的右上角点击编辑按钮后直接修改。
如果希望在有线网卡上使用 macvlan,一般会选择 enp7s0
作为 macvlan
的父接口(-o parent=enp7s0
),因为无线网卡与 macvlan 配合往往有兼容性问题。
在少数情况下,如果只有无线网卡,可能需要通过其他方案来旁路,比如 TAP/TUN 方式或者路由策略转发等,macvlan 对 Wi-Fi 不够友好。
2.2 开启混杂模式
为了确保网卡可以截获所有流量进行分析或桥接,需要设置网卡的混杂模式。可通过以下命令启用:
|
|
或者对于无线网卡,如果想在 wlp0s20f3
上开启混杂模式,也可执行:
|
|
注意:混杂模式一般只在需要检测或中转特定流量时才必需,不然可以不设。
3 创建 Docker macvlan 网络
macvlan
可以让容器拥有与物理机不同的 MAC 地址以及内网 IP,从而像独立设备一样接入到局域网中。
- 假设希望容器所在网段是
192.168.10.0/24
,网关是192.168.10.1
(主路由器或管理网关,可以在当前联网的设备上查看详细信息)。 - 使用
macvlan
驱动创建一个名为macnet
的网络,父接口是enp7s0
(以太网卡),具体命令如下:
|
|
上述命令解析:
-d macvlan
指定驱动类型为 macvlan。--subnet=192.168.10.0/24
指定容器网络的子网。--gateway=192.168.10.1
指定子网的网关地址,一般是主路由 IP。-o parent=enp7s0
指明物理机将要桥接到的网卡接口,即上一步确定的以太网接口。macnet
是给此网络取的名称。
务必确认主路由器所管理的网段是否与这里的 192.168.10.0/24
相兼容。如果家里的主路由器网段是 192.168.1.x
,则可以将旁路由容器放到同一个网段,或者通过适当的路由配置让这两个网段互通。具体做法可以根据实际网络需求进行调整。
4 拉取并运行 OpenWRT 镜像
4.1 确认系统架构
先用一些命令查看当前系统是 x86_64
、arm
、arm64
等。OpenWRT 镜像一般会按架构分得比较细,确保选对镜像才能在容器内正常运行。以 Arch Linux 下查看命令为例:
|
|
或
|
|
假设输出为 x86_64
,表示需要拉取 x86_64
架构的 OpenWRT Docker 镜像。
4.2 拉取 OpenWRT 镜像
在 Docker 仓库或阿里云镜像仓库可以查到一些第三方的 OpenWRT 镜像,例如 sulinggg/openwrt 或者其它定制镜像。这里以 registry.cn-shanghai.aliyuncs.com/suling/openwrt:x86_64
为例:
|
|
拉取成功后,可以用 docker images
命令查看是否已经下载成功。
5 启动容器
以下命令将基于之前创建的 macnet
网络,并使容器拥有特权权限(--privileged
)来访问更多系统特性:
|
|
命令解析:
--restart always
:Docker 容器异常退出或系统重启后,自动重启容器。--name openwrt
:容器名称设置为openwrt
。-d
:后台运行容器。--network macnet
:使用先前创建的macvlan
网络。--privileged
:给容器特权,可以支持更多底层操作,比如网络管理、挂载等。registry.cn-shanghai.aliyuncs.com/suling/openwrt:x86_64
:要运行的镜像名称。/sbin/init
:指定容器启动时运行的初始进程。
6 容器内网络配置
容器启动后,可以进入容器内部进行网络和服务配置。
6.1 进入容器
|
|
这会在容器内部开启一个交互式 Shell,之后可以像在普通 Linux 主机上一样进行一些 OpenWRT 的配置。
6.2 编辑 OpenWRT 网络配置
OpenWRT 容器的网络配置文件在 /etc/config/network
,和常见的 OpenWRT 路由器类似。可以使用 vim
或 vi
打开它:
|
|
可根据需求(WAN/LAN 设置、静态 IP、DHCP 等)进行修改。以一个简单的例子为参考(仅示意,需要具体修改):
|
|
这里 lan
接口与 eth0
绑定,假设要给容器 IP 设为 192.168.10.2
;网关就是 192.168.10.1
。 这里配置的容器 IP 地址就是旁路由的 IP,所有步骤成功后,将上网设备的网关地址设为这个就能使用旁路由了 。
修改完成后,重启 OpenWRT 网络服务:
|
|
6.3 验证容器网络生效
重启网络后,可以在容器内再次查看 IP 信息:
|
|
或
|
|
如果配置正确,应该能看到 eth0
或对应的网卡上有设定的 192.168.10.2
这样的 IP,并可以使用 ping
命令检测与网关或外网的连通性。
7 混杂模式服务(可选)
在机器重启后,之前设置的混杂模式会失效。如果要启动时自动启用混杂模式,可以通过以下步骤将其添加到启动参数中。
7.1 创建并配置 /etc/rc.local
首先,创建 /etc/rc.local
文件并赋予可执行权限:
|
|
然后,编辑 /etc/rc.local
文件,添加以下内容:
|
|
7.2 创建并配置 rc-local.service
接下来,创建一个 systemd 服务文件 /etc/systemd/system/rc-local.service
:
|
|
内容如下:
|
|
7.3 启用并启动服务
最后启用并启动 rc-local
服务:
|
|
8 将容器用作旁路由
- 旁路由原理:在家里现有的主路由器配置中,可以将特定设备或者某个 VLAN 的网关地址指向这个 OpenWRT 容器的 IP(如
192.168.10.2
),或者在主路由上配置静态路由,将某些流量转给 OpenWRT 做高级处理。 - 常见用途:去广告(Adblock)、VPN 客户端、代理服务器、科学上网、流量监控等等都可以在这个 OpenWRT 容器上配置。
- 确保网络互通:如果笔记本通过 Wi-Fi 上网,就要留意物理网卡与 macvlan 之间的兼容问题;也要确保主路由、笔记本与旁路由容器处于同一个网段或路由可达。
- 功耗:启动Openwrt后,没流量时整机功耗13w,有下载流量时整机功耗约20w,功耗还是比较高,看来不宜在x86设备上长期使用。
9 故障排查
- 容器无网络:检查是否将 macvlan 父接口指定为正确的有线网卡;检查容器内 IP 与主路由网段是否冲突;检查物理网卡 IP 分配是否正确。
- 冲突:如果笔记本本身也在
192.168.10.x
网段分配了 IP,而给容器也设置了同网段的 IP,可能出现地址冲突。可以通过在物理机上把网卡 IP 与容器 IP 分离到不同网段,或通过给 Dockermacvlan
指定一个子接口(ip link add
创建子接口)来避免冲突。 - 无法访问容器管理界面(LUCI):OpenWRT 默认可能没有开放或安装 Luci,如需 Web 管理界面,需要进入容器安装
luci
,并检查防火墙设置。 - 无线网卡问题:如果只有 Wi-Fi 网卡想要使用 macvlan,通常会碰到兼容性障碍,可以尝试其他方式,如 TUN/TAP,或者额外配置一块 USB 网卡用作桥接。
10 总结
通过 Docker 在闲置笔记本上运行 OpenWRT 用作旁路由,可以在保留原路由器主要功能的同时,为家庭网络增添更多可定制化的高级网络服务。从此,可以随时在容器中添加功能模块(Adblock、代理、QoS、VPN、流量统计等),灵活扩展家庭网络能力。并且 Docker 容器使用和维护都相对简单,后续升级、迁移也更方便。
如果对网络的管理和性能优化有更高的要求,可以考虑直接在笔记本上安装类似 PVE(Proxmox VE)、ESXi 或者开源虚拟化平台,然后让 OpenWRT 以虚拟机方式运行。但对于大多数轻量应用场景,Docker + macvlan 已足够轻巧易用。
如果在实际操作中遇到更多问题,欢迎在评论区留下疑问或经验。


