转载来源:悟空的日常

摘要

本文针对企业及个人级网络部署场景,详细阐述基于 Docker Compose 架构,在 Arm64/x86-64 架构群晖 NAS、Armbian-arm64 嵌入式系统中部署 QWRT 旁路由的标准化实施流程。文中涵盖前置资源准备、底层系统配置、网络模式选型、分架构配置文件编写及核心参数调优要点,为 QWRT 旁路由的标准化部署提供可落地的技术参考。

一、前置资源与环境准备

1.1 Docker 离线包获取

针对无公网或内网隔离部署场景,可从官方维护仓库获取适配多架构的 Docker 离线包,满足离线环境下的容器引擎部署需求:

Docker 离线包构建项目及下载地址:https://github.com/wukongdaily/DockerTarBuilder/releases

1.2 基础系统环境配置

执行专属配置命令,完成芝麻开门配置,命令如下:

echo 0xDEADBEEF > /etc/config/google_fu_mode

1.3 宿主机网卡信息查询

QWRT 旁路由部署依赖宿主机物理网卡的精准映射,通过以下命令查询宿主机网卡名称(如 eth0、end0、enp1s0、enp1s0-ovs 等),为后续 macvlan 网络驱动配置提供依据:

ip link show

二、部署架构与核心技术选型

本次部署采用Docker Compose作为容器编排工具,实现 QWRT 容器的标准化部署与生命周期管理;网络层选用macvlan 网络模式,使 QWRT 容器获得与宿主机同网段的独立网络接口,满足旁路由的网络转发与路由策略部署需求;容器运行层面开启特权模式(privileged: true),赋予容器对宿主机网络栈的完整操作权限,保障 QWRT 路由功能的正常运行。

所有部署场景均采用/sbin/init作为容器启动命令,初始化容器内的系统服务栈,满足 QWRT 作为轻量级路由系统的服务运行要求。

三、分架构 Docker Compose 标准化配置

3.1 Arm64 架构群晖 NAS(代表机型:DS220J)

适配 ARMv8/64 位架构群晖设备的配置文件,镜像选用官方 Arm64 专属版本,核心需替换parent(网卡名称)、subnet(宿主机网段)、gateway(网段网关)三个核心参数,配置如下:

services:
  qwrt:
    image: coolsnowwolf/qwrt:arm64-latest
    container_name: qwrt
    privileged: true
    command: /sbin/init
    networks:
      - qwrt_macnet
        
networks:
  qwrt_macnet:
    name: qwrt_macnet
    driver: macvlan
    driver_opts:
      parent: eth0 # 替换为宿主机实际物理网卡名称
    ipam:
      config:
        - subnet: 192.168.66.0/24 # 替换为群晖NAS所在的局域网网段
          gateway: 192.168.66.1    # 替换为局域网网关地址

3.2 x86-64 架构群晖 NAS(代表机型:DS1821+)

适配 x86_64/AMD64 架构群晖设备,仅容器镜像为 x86-64 专属版本,其余网络配置、参数替换规则与 Arm64 架构保持一致,配置如下:

services:
  qwrt:
    image: coolsnowwolf/qwrt:amd64-latest
    container_name: qwrt
    privileged: true
    command: /sbin/init
    networks:
      - qwrt_macnet       
        
networks:
  qwrt_macnet:
    name: qwrt_macnet
    driver: macvlan
    driver_opts:
      parent: eth0 # 替换为宿主机实际物理网卡名称
    ipam:
      config:
        - subnet: 192.168.66.0/24 # 替换为群晖NAS所在的局域网网段
          gateway: 192.168.66.1    # 替换为局域网网关地址

3.3 Armbian-arm64 嵌入式系统

适配基于 Arm64 架构的 Armbian 嵌入式系统,镜像与 Arm64 架构群晖保持一致,默认网卡占位符为 enp0s1,需按实际查询结果替换,配置如下:

services:
  qwrt:
    image: coolsnowwolf/qwrt:arm64-latest
    container_name: qwrt
    privileged: true
    command: /sbin/init
    networks:
      - qwrt_macnet
        
networks:
  qwrt_macnet:
    name: qwrt_macnet
    driver: macvlan
    driver_opts:
      parent: enp0s1 # 替换为Armbian系统实际物理网卡名称
    ipam:
      config:
        - subnet: 192.168.66.0/24 # 替换为Armbian设备所在的局域网网段
          gateway: 192.168.66.1    # 替换为局域网网关地址

四、部署关键参数与实施规范

  1. 特权模式开启privileged: true为必配项,QWRT 作为路由系统需对网络接口、路由表、iptables 等核心网络组件进行操作,无特权模式将导致功能缺失;

  2. macvlan 网络参数parent参数必须映射至宿主机物理网卡,不可使用桥接网卡或虚拟网卡,否则会导致网络转发异常;

  3. 网段与网关一致性subnetgateway需严格匹配宿主机所在局域网的网络规划,掩码采用 / 24(255.255.255.0)为通用配置,可根据实际网络规划调整;

  4. 容器命名规范:固定container_name: qwrt便于后续容器的运维管理与网络策略映射;

  5. 镜像版本选择:采用latest标签获取最新稳定版镜像,生产环境可替换为具体版本号实现版本固化。

五、后续运维与操作建议

  1. 部署完成后,可通过docker compose up -d命令启动容器,通过docker logs qwrt查看容器初始化日志,排查启动异常;

  2. 旁路由部署完成后,需在局域网设备中手动配置网关为 QWRT 容器的 IP 地址,实现流量经 QWRT 转发;

  3. 如需修改 QWRT 配置,可通过docker exec -it qwrt /bin/bash进入容器内部进行操作,保持容器与宿主机的解耦性;

  4. 离线环境下部署时,需先将 QWRT 镜像导入宿主机,再执行 Docker Compose 部署命令,避免镜像拉取失败。

结语

本方案基于 Docker 容器化技术,实现了 QWRT 旁路由在群晖、Armbian 多平台、多架构的标准化部署,相比传统物理机部署,具备环境隔离、部署高效、运维便捷的优势。

在实际部署中,需严格遵循网络规划规范,精准配置核心参数,即可实现 QWRT 旁路由的快速落地,满足局域网路由策略定制、网络转发优化等业务需求。