使用 macvlan 为 qBittorrent 设置独立 IP

12

参考文章:https://wiki.slarker.me/synology/macvlan.html

由于馒头等PT站点对于梯子IP会识别为刷流盒子,一旦被认定为刷流盒子将会面临各种限制。为了解决这个问题,就需要将qBittorrent等下载器的Docker容器独立出来,手动指定网关为主路由,进而避免受到旁路由科学上网的影响。同时也避免了修改主机NAS网关导致的各种网络联通问题。

网络环境:

  • 主路由 IP:192.168.124.4

  • QNAP NAS IP:192.168.124.152

  • 独立的 qBittorrent IP:192.168.124.201

  • macvlan 网桥:192.168.2.102

  • ipv6 网关: 240e:***:****:****::1001

创建 macvlan 网络

目前主路由是 192.168.124.4 ,旁路由是 192.168.124.5

如果只需要 IPv4,创建 IPv4 macvlan 网络命令:

#创建一个名为 vlan 的 macvlan 网络,网关为主路由 192.168.124.4,子网为 192.168.124.0/24,eth0 为默认的网桥
docker network create -d macvlan --subnet=192.168.124.0/24 --gateway=192.168.124.4 -o parent=eth0 vlan

如果需要 IPv6,创建 IPv4 + IPv6 macvlan 网络命令:

#创建一个名为 vlan 的 macvlan 网络,IPv4 网关为主路由 192.168.124.4,IPv4 子网为 192.168.124.0/24,IPv6 网关为 240e::1,IPv6 子网为 240e::/60,eth0 为默认的网桥
docker network create -d macvlan --subnet=192.168.124.0/24 --gateway=192.168.124.4 --ipv6 --subnet=240e::/60 --gateway=240e::1 -o parent=eth0 vlan

如果需要删除创建的 macvlan 网络,可以使用下面的命令:

#vlan 为 macvlan 网络名称
docker network rm vlan

使用 docker 命令安装 qBittorrent

docker run -d \
  --name=qbittorrent \
  --net=vlan \
  --ip=192.168.124.201 \
  --ip6=240e:***:****:****::100 \ #根据实际情况修改
  -e PUID=1026 \
  -e PGID=100 \
  -e TZ=Asia/Shanghai \
  -e WEBUI_PORT=8080 \
  -p 8080:8080 \
  -p 6881:6881 \
  -p 6881:6881/udp \
  -v /share/Video/config:/config \  #根据实际情况修改
  -v /share/Video:/downloads \  #根据实际情况修改
  --restart unless-stopped \
  lscr.io/linuxserver/qbittorrent:latest

这里的 --net=vlan 参数表示使用前面创建的 macvlan 网络, --ip=192.168.124.201参数就是为 qBittorrent 设置的独立 IP,命令执行成功后,就可以用 192.168.124.201:8080 来访问 qBittorrent 了

解决宿主机与 macvlan 网络互通问题

为了安全起见,macvlan 禁止宿主机和容器直接通信。以我的NAS运行情况为例,qBittorrent 容器的 IP 为 192.168.124.201,宿主机群晖的 IP 为 192.168.124.152,那么宿主机和容器之间就无法通信。

环境分析

  • 您的网络

    • 子网:192.168.124.0/24

    • 宿主机(QNAP NAS):假设 IP 为 192.168.124.152

    • 容器 IP:192.168.124.201(qBittorrent 容器,基于 docker run)

    • 父接口:eth0(ip link show 确认)

    • 网桥接口:需创建,命名为 vlan_bridge,静态 IP 设为 192.168.124.102(适配子网)

  • 目标

    • 创建 macvlan 网桥 vlan_bridge,分配静态 IP 192.168.124.102

    • 配置路由,使宿主机访问容器(192.168.124.201)的数据通过 vlan_bridge

    • 确保与 qBittorrent 的 macvlan 网络 vlan 兼容

适配命令

#创建 macvlan 接口并配置网桥模式
ip link add vlan_bridge link eth0 type macvlan mode bridge
ip addr add 192.168.124.102/24 dev vlan_bridge
ip addr add 240e:3b1:3473:eab0::102/60 dev vlan_bridge
ip link set vlan_bridge up

#添加路由以访问容器
为容器 IP 192.168.124.201 和 IPv6 地址 240e:3b1:3473:eab0::100 添加路由
ip route add 192.168.124.201/32 dev vlan_bridge
ip -6 route add 240e:3b1:3473:eab0::100/128 dev vlan_bridge

命令说明

  • ip link add vlan_bridge link eth0 type macvlan mode bridge:

    • 创建名为 vlan_bridge 的 macvlan 接口,绑定到父接口 eth0,模式为 bridge(允许主机与容器通信)

  • ip addr add 192.168.124.102/24 dev vlan_bridge:

    • 为 vlan_bridge 分配静态 IPv4 地址 192.168.124.102,子网掩码 /24

  • ip link set vlan_bridge up:

    • 启用 vlan_bridge 接口

  • ip route add 192.168.124.201/32 dev vlan_bridge:

    • 添加路由,使宿主机访问容器 IP 192.168.124.201 的流量通过 vlan_bridge(/32 精确匹配单个 IP)

使用 systemd 管理 macvlan 服务

待续