## 背景 1. OpenWrt+OpenClash网关规则模式; 2. 国际节点运营商禁止BT下载,每次检测封控1小时; 3. 使用qBittorent,进行P2P文件下载与分享; 4. qBittorent宿主机Synology,许多自建服务需要访问国际网络; 5. 无独立物理或虚拟化设备单独分配给qBittorent。 ## 需求 在不分离qBittorent和Synology的情况下,实现对qBittroent的流量过滤,禁止其因访问国际网络导致的全局国际网络封控 ## 解决思路 Synology以及社区提供了spk套件直接安装qBittorent,但这不利于使用OpenWrt对Synology上的流量进行区分管控。 将qBittorent服务部署到docker上,为qBittorent容器指定与Synology的同网段IP,在openwrt网关中对qBittorent的IP进行限制,保证qBittorent在下载分享时,不触国际网络运营商的封控规则。 对Docker容器分配物理网络IP,涉及到docker中macvlan网络模型 ``` macvlan:允许容器直接连接到物理网络,每个容器拥有自己的 MAC 地址和 IP 地址,使其能够直接与物理网络中的其他设备通信。 ``` ## 措施 1、启用Open Switch  2、启用SSH  3、利用终端登录SSH以及切换root账户权限,这里就不再演示,请自行百度 4、查看当前网络状况 ``` ifconfig ``` 找到带有目前群晖IP的接口,这里是ovs_eht0,以自身实际情况为准  5、创建docker macvlan网络,名称为macv ```bash docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.254 -o parent=ovs_eth0 macv ``` ```bash ip link add macvlan2 link ovs_eth0 type macvlan mode bridge ip addr add 192.168.31.244 dev macvlan2 ip link set macvlan2 up ip route add 192.168.31.245 dev macvlan2 ip route add 192.168.31.250 dev macvlan2 ``` 为macvlan2分配地址192.168.31.244后启用,把宿主机(31.250)、容器(31.244)加入macvlan2,实现宿主机与macvlan下qBittorent容器的通信。此步主要用于实现三方软件或容器对qbittorent的调用与监测(如NAS-Tool等)。 6、创建qBittorent容器服务 root账户下拉取镜像,并使用docker-cli命令,启用服务 ```bash docker run --name=qbittorrent \ --privileged=true \ --network=macv \ --hostname=qbittorrent \ --ip=192.168.31.245 \ -e PUID=0 \ -e PGID=0 \ -e GIDLIST=0 \ -e WEBUI_PORT=8080 \ -e TZ="Asia/Shanghai" \ -v /volume1/docker/qbittorrent/config:/config \ -v /volume1/Download:/downloads \ -v /volume2/Comic/ExHentai:/Exhentai \ --restart=always \ linuxserver/qbittorrent ```  随后在OpenWrt的OpenClash路由规则中,将192.168.31.245纳入直连,即可在避免国际节点运营商封控的同时,确保局域网中全局国际网络访问。 ``` SRC-IP-CIDR,192.168.31.245/32,DIRECT #匹配数据发起IP(直连) ``` 自此问题解决! --- ## 后记 目前遇到了个问题,宿主机可以ping通qBittorent地址,但是在qBittorent容器内无法ping通宿主机。 起因是qBittorent调用Jackett插件时,报如下错误  ``` Jackett: connection error getting indexer list! Right-click this row and select 'Open description page' to open help. Configuration file: '/config/qBittorrent/nova3/engines/jackett.json' Search: '泰坦尼克号' ``` 怀疑是qBittorent无法正确与Jackeet容器通信导致。 qBittorent使用Docker MacVlan网络(macv,192.168.31.245/24),IP地址192.168.31.245,端口号8080; Jackett使用Docker Bridge网络(app-network,172.20.0.0/16),IP地址172.20.0.12,端口号9117。 两者使用同一台宿主机,都接入了macvlan2网络 Jackett.py插件文件中,api正确,Jackett地址为: 192.168.31.250:9117 Jackett容器正常运行,Windows上运行相同qBittorent版本,调用Jackett插件成功。 故确定为容器与宿主机通信问题。 目前解决方案——将Jackett容器也纳入macv网络中,分配与宿主机同网段IP地址。 Loading... ## 背景 1. OpenWrt+OpenClash网关规则模式; 2. 国际节点运营商禁止BT下载,每次检测封控1小时; 3. 使用qBittorent,进行P2P文件下载与分享; 4. qBittorent宿主机Synology,许多自建服务需要访问国际网络; 5. 无独立物理或虚拟化设备单独分配给qBittorent。 ## 需求 在不分离qBittorent和Synology的情况下,实现对qBittroent的流量过滤,禁止其因访问国际网络导致的全局国际网络封控 ## 解决思路 Synology以及社区提供了spk套件直接安装qBittorent,但这不利于使用OpenWrt对Synology上的流量进行区分管控。 将qBittorent服务部署到docker上,为qBittorent容器指定与Synology的同网段IP,在openwrt网关中对qBittorent的IP进行限制,保证qBittorent在下载分享时,不触国际网络运营商的封控规则。 对Docker容器分配物理网络IP,涉及到docker中macvlan网络模型 ``` macvlan:允许容器直接连接到物理网络,每个容器拥有自己的 MAC 地址和 IP 地址,使其能够直接与物理网络中的其他设备通信。 ``` ## 措施 1、启用Open Switch  2、启用SSH  3、利用终端登录SSH以及切换root账户权限,这里就不再演示,请自行百度 4、查看当前网络状况 ``` ifconfig ``` 找到带有目前群晖IP的接口,这里是ovs_eht0,以自身实际情况为准  5、创建docker macvlan网络,名称为macv ```bash docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.254 -o parent=ovs_eth0 macv ``` ```bash ip link add macvlan2 link ovs_eth0 type macvlan mode bridge ip addr add 192.168.31.244 dev macvlan2 ip link set macvlan2 up ip route add 192.168.31.245 dev macvlan2 ip route add 192.168.31.250 dev macvlan2 ``` 为macvlan2分配地址192.168.31.244后启用,把宿主机(31.250)、容器(31.244)加入macvlan2,实现宿主机与macvlan下qBittorent容器的通信。此步主要用于实现三方软件或容器对qbittorent的调用与监测(如NAS-Tool等)。 6、创建qBittorent容器服务 root账户下拉取镜像,并使用docker-cli命令,启用服务 ```bash docker run --name=qbittorrent \ --privileged=true \ --network=macv \ --hostname=qbittorrent \ --ip=192.168.31.245 \ -e PUID=0 \ -e PGID=0 \ -e GIDLIST=0 \ -e WEBUI_PORT=8080 \ -e TZ="Asia/Shanghai" \ -v /volume1/docker/qbittorrent/config:/config \ -v /volume1/Download:/downloads \ -v /volume2/Comic/ExHentai:/Exhentai \ --restart=always \ linuxserver/qbittorrent ```  随后在OpenWrt的OpenClash路由规则中,将192.168.31.245纳入直连,即可在避免国际节点运营商封控的同时,确保局域网中全局国际网络访问。 ``` SRC-IP-CIDR,192.168.31.245/32,DIRECT #匹配数据发起IP(直连) ``` 自此问题解决! --- ## 后记 目前遇到了个问题,宿主机可以ping通qBittorent地址,但是在qBittorent容器内无法ping通宿主机。 起因是qBittorent调用Jackett插件时,报如下错误  ``` Jackett: connection error getting indexer list! Right-click this row and select 'Open description page' to open help. Configuration file: '/config/qBittorrent/nova3/engines/jackett.json' Search: '泰坦尼克号' ``` 怀疑是qBittorent无法正确与Jackeet容器通信导致。 qBittorent使用Docker MacVlan网络(macv,192.168.31.245/24),IP地址192.168.31.245,端口号8080; Jackett使用Docker Bridge网络(app-network,172.20.0.0/16),IP地址172.20.0.12,端口号9117。 两者使用同一台宿主机,都接入了macvlan2网络 Jackett.py插件文件中,api正确,Jackett地址为: 192.168.31.250:9117 Jackett容器正常运行,Windows上运行相同qBittorent版本,调用Jackett插件成功。 故确定为容器与宿主机通信问题。 目前解决方案——将Jackett容器也纳入macv网络中,分配与宿主机同网段IP地址。 最后修改:2024 年 06 月 16 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏