如何让 Docker 下的 qBittorrent 下载绕过代理网络
解决思路:
- 将 qBittorrent 容器隔离到独立子网,分配唯一静态内网 IP,并指定 MAC 地址。
- 在代理网关(如 PassWall)中为该容器预留或分配的 IP 设置强制直连,让其所有流量绕过代理。
具体实现方法:
-
创建 macvlan 网络,为 qBittorrent 容器分配独立 IP/MAC
macvlan网络驱动允许容器直接在宿主网段拥有独立的 IP 和 MAC(像一台独立的物理主机),可被软路由区分。- 修改后的 compose 文件示例(详见下方):
networks定义macnet为 macvlan 网络,指定父接口(如 eth0)、子网和网关。qbittorrent服务中,指定macnet的独立 IP 和 MAC 地址。
-
保留 Media Bridge 用于其他 docker 间通信
- qBittorrent 除连接外网外,可能还需被本地其他容器(如 radarr/sonarr/prowlarr 等)访问,因此可将其同时接入本地 bridge 网络(media_bridge)。
-
在网关的代理插件设置中,指定此独立 IP 为“直连”
- 如配置
192.168.1.100为直连,qBittorrent 所有流量将不再走代理通道,而是直接访问公网,避免浪费代理流量。
- 如配置
TIP
如果不主动设置 MAC 地址,qBittorrent 会自动生成一个 MAC 地址,但是这个 MAC 地址是随机的,每次启动容器时都会变化,所以需要手动指定 MAC 地址。
Docker Compose 文件
networks:
macnet:
driver: macvlan
driver_opts:
parent: eth0
ipam:
config:
- subnet: 192.168.1.0/24
gateway: 192.168.1.1
media_bridge:
driver: bridge
services:
qbittorrent:
image: lscr.io/linuxserver/qbittorrent
container_name: qbittorrent
mac_address: 'FA:36:63:19:72:C2'
# 核心变更:彻底移除 ports 映射,交由 Macvlan 独立网卡接管所有端口访问
networks:
macnet:
ipv4_address: 192.168.1.100 # qB 专属的独立内网 IP,需在 PassWall 设为直连
media_bridge: # 同时接入内部桥接网络
restart: always
radarr:
image: lscr.io/linuxserver/radarr
container_name: radarr
networks:
- media_bridge
sonarr:
container_name: sonarr
networks:
- media_bridge
restart: always