飞牛NAS Docker 搭建旁路由,实现全屋智能分流
家里设备越来越多,想要实现全屋网络的智能分流和 DNS 优化,但又不想刷路由器固件?今天教大家用 NAS 上的 Docker 搭建一个旁路由,零成本、不影响主路由,任何设备只需改一下网关就能享受智能分流。
本文以飞牛NAS为例,其他支持 Docker 的 NAS(群晖、威联通等)或 Linux 主机同样适用。

什么是旁路由?
简单来说,旁路由不替代你的主路由器,而是作为网络中的一个辅助网关。设备把网关指向旁路由后,所有流量经过它进行智能分流和 DNS 解析,再转发出去。
优势:
不影响主路由,部署失败随时回退
Docker 容器化管理,升级维护方便
局域网设备按需接入,灵活可控
网络拓扑:

需要智能分流的设备,把网关和 DNS 指向 192.168.0.200 即可。
准备工作
飞牛NAS(或任意 Linux 主机),已安装 Docker
SSH 工具(Windows 用户推荐 Terminal 或 PuTTY)
确认你的局域网网段(本文以 192.168.0.0/24 为例)
确认 NAS 的网卡名称
查看网卡名称
SSH 登录 NAS 后执行:
ip link show
找到你的物理网卡名称,常见的如 eth0、enp1s0、enp1s0-ovs 等。本文使用 enp1s0-ovs。
第一步:创建 Macvlan 网络
Macvlan 可以让 Docker 容器拥有独立的局域网 IP,就像一台真实的物理设备。
sudo docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=enp1s0-ovs macvlan_net
参数说明:
参数 含义 -d macvlan 使用 macvlan 网络驱动 --subnet 你的局域网网段,需与主路由一致 --gateway 主路由器 IP 地址 -o parent 绑定的物理网卡名称(改成你自己的) macvlan_net 自定义的网络名称
验证是否创建成功:
sudo docker network ls

能看到 macvlan_net 就 OK 了。
第二步:创建配置目录
mkdir -p /vol1/1000/docker/mihomo/config
路径可以自定义,这里以我的飞牛NAS的存储路径为例。
第三步:编写配置文件
创建核心配置文件:
cat > /vol1/1000/docker/mihomo/config/config.yaml << 'EOF' # 端口设置 port: 7890 socks-port: 7891 redir-port: 7892 mixed-port: 7893 # 允许局域网设备连接(旁路由必须开启) allow-lan: true bind-address: "*" # 运行模式 mode: rule log-level: info # 管理面板(监听所有地址,局域网可访问) external-controller: '0.0.0.0:9090' secret: '' # TUN 模式(透明网关核心) tun: enable: true stack: system auto-route: true auto-detect-interface: true # DNS 设置 dns: enable: true listen: 0.0.0.0:53 enhanced-mode: fake-ip fake-ip-range: 198.18.0.1/16 default-nameserver: - 223.5.5.5 - 119.29.29.29 nameserver: - https://doh.pub/dns-query - https://dns.alidns.com/dns-query fallback: - https://cloudflare-dns.com/dns-query - 1.1.1.1 fallback-filter: geoip: true geoip-code: CN # 在下方填入你的服务配置 proxies: [] proxy-groups: [] rules: - MATCH,DIRECT EOF
关键配置:
allow-lan + bind-address:允许局域网设备通过旁路由转发流量
TUN 模式:透明接管所有流量,设备无需单独配置
DNS 分流:国内域名走国内 DNS(阿里、腾讯),境外域名走 Cloudflare DNS,提升解析速度和准确性
fake-ip:高性能 DNS 模式,减少解析延迟
提示:如果你有现成的配置链接,可以直接用 curl 下载配置文件,然后再手动补上 tun、dns、allow-lan 等旁路由必需项。
第四步:启动容器
sudo docker run -d --name mihomo --restart always --network macvlan_net --ip 192.168.0.200 --cap-add NET_ADMIN --device /dev/net/tun -v /vol1/1000/docker/mihomo/config:/root/.config/mihomo metacubex/mihomo:latest
参数说明:
参数 含义 --network macvlan_net 使用之前创建的 macvlan 网络 --ip 192.168.0.200 给旁路由分配固定 IP(避开已使用的 IP) --cap-add NET_ADMIN 授予网络管理权限(TUN 模式必需) --device /dev/net/tun 映射 TUN 设备 --restart always 开机自动启动 -v ... 挂载配置目录
第五步:验证部署
1. 查看容器状态
sudo docker ps
确认容器状态为 Up。
2. 检查日志
sudo docker logs mihomo --tail 20
正常启动应看到类似输出:
level=info msg="HTTP proxy listening at: [::]:7890" level=info msg="DNS server(UDP) listening at: [::]:53" level=info msg="RESTful API listening at: [::]:9090" level=info msg="[TUN] Tun adapter listening at: Meta..."

如果所有服务都在监听,说明旁路由已就绪。
3. 测试连通性
在电脑上 ping 旁路由 IP:
ping 192.168.0.200
能通就没问题。
管理面板
部署完成后,浏览器访问第三方管理面板:
https://metacubex.github.io/metacubexd
后端地址填写:http://192.168.0.200:9090
在面板中可以:
查看实时流量和连接
切换线路和分流策略
测试线路延迟
查看日志
使用配置链接
如果你有现成的配置文件链接,可以直接下载:
curl -sL '你的配置链接' > /vol1/1000/docker/mihomo/config/config.yaml
下载后需要手动修改以下几项以适配旁路由:
# 必须改为 true allow-lan: true # 必须监听所有地址 external-controller: '0.0.0.0:9090' # 添加 bind-address bind-address: "*"
并在配置中补充 tun 和 dns 部分(参考第三步的配置)。
修改完成后重启容器:
sudo docker restart mihomo
总结
整个部署只需要 6 条命令:
docker network create — 创建 macvlan 网络
mkdir — 创建配置目录
cat > config.yaml — 写入配置文件
docker run — 启动旁路由容器
验证日志和连通性
设备修改网关接入
旁路由方案的好处在于对主网络零侵入,不满意随时停掉容器,一切恢复原样。配合 NAS 的 Docker 管理能力,维护起来也非常省心。

芬芬芳
校验提示文案
芬芬芳
校验提示文案