前言:
为啥会有这个教程,是因为朋友前两天,问我他的qb怎么调整都无法链接到憨憨的tracker,还有两个站点也无法正常链接站点的tracker,我说你在那个地区 他说江苏,我忽然想起来江浙沪的网络可能比较严苛,所以才想到了一个很久很久以前的方案,当然因为特殊原因,他的网络不能梯,所以才有了今天的方案,也共享给有相似的小伙伴使用。
此方案使用的是sniproxy 正向代理,加stunnel加密,加修改hosts实现,本来我是不打算加入stuneel的,但是发现只是sniproxy并不能正常通讯,所以加了stunnel加密。
注意此方案需要一个其他地区的vps,国内国外都可以,可以在现有VPS搭建,也可以新购入,会产生额外费用,大家如果不想额外花钱的,就不需要往下看了,也可以和小伙伴合购。
这里我推荐一个我用的VPS,顺便赚点推广费 我这里用的服务器推广链接https://yuyunkj.com/aff/TBVSNBOB
这里我选的是:
共享300Mbps 足够我们用了,不过是电信的宽带给100G防御,如果大内网的用户,还可以顺带做一个端口穿透,一机多用。
购买地址:https://yuyunkj.com/cart?fid=3&gid=44
教程:
这里我使用的是Ubuntu22,系统使用docker搭建sniproxy和stunnel。
这里使用的sniproxy和stunnel,是多年前我制作的镜像,年代有点久远,但是不影响我们使用。
我们先配置stunnel,因为stunnel 是需要证书加密的,所以我们先生成个证书给stunnel。
创建根证书CA:
# 创建一个 CA 的私钥 openssl genrsa -out ca.key 4096 # 创建一个自签名的 CA 证书(有效期 10 年) openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt # 填写 CA 证书信息(Common Name 可以为 "服务器域名")
ca.key
是 CA 的私钥(不要泄露)。ca.crt
是 CA 的公钥证书,供客户端验证使用。
创建服务器证书:
服务端密钥
openssl genrsa -out server.key 2048
服务端的证书签名请求(CSR)
openssl req -new -key server.key -out server.csr
注意Common Name (CN)要写域名,或者服务端IP图我就不放了和根过程一样。
使用 CA 签署服务端证书:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256
合并证书为PEM:
cat server.crt server.key > server.pem
到此,服务端的证书我们就准备好了。
创建stunnel配置文件:
这里因为都是容器跑的,所以我们找一个路径存放stunnel的证书和配置文件,教程以/appdata/stunnel为例,其他存放地区的,请自行修改。
client = no [http] accept = 1880 connect = sniproxy:80 cert = /etc/stunnel/cert/server.pem [https] accept = 1443 connect = sniproxy:443 cert = /etc/stunnel/cert/server.pem
配置文件这里,不需要过多解释,accept可以根据自身情况修改,因为1880和1443是对外端口,也就是给客户端链接用的,其他默认即可。
在配置docker之前,检查一下路径,是否是如下结构。
创建docker-compose.yaml
因为sniproxy,我直接内部写好了配置文件,是所有请求都允许的,所以这里就不需要去映射配置文件,直接用即可。
services: sniproxy: container_name: sniproxy image: rsg2019/sniproxy environment: - "TZ=Asia/Shanghai" restart: always stunnel: image: rsg2019/stunnel container_name: "stunnel" restart: always ports: - "1880:1880" - "1443:1443" volumes: - "/appdata/stunnel:/etc/stunnel" environment: - "TZ=Asia/Shanghai"
直接docker compose up -d 执行就可以跑起来了,注意因为服务器是在国内,所以可能会来不下docker镜像,这个可以去百度找个代理或者国内的镜像仓库,本站会员这里提供我的docker仓库,希望大家不要公开 小服务器撑不住。
本站会员:
此处内容需要权限查看
会员免费查看到此,服务端的配置内容就结束了,下面我们来处理客户端,在处理客户端的时候,我们需要把我们生成的证书下载到客户端,只要ca.crt,可以用scp命令或者winscp等工具拷贝下来,如果不会可以百度这个是基操。
因为我们用的不是受信任CA发布的证书,所以我们客户端需要使用ca.crt来验证,如果是受信任证书可以不用这么操作。
配置客户端stunnel:
这里客户端使用的也是docker在启动docker之前,我们也要向服务端那样,创建一个stunnel配置文件,以及服务端获取到的ca.crt,这里客户机的存放路径为/appdata/stunnel其他路径的请自行替换。
配置文件:
client = yes [http] accept = 0.0.0.0:80 connect = 服务端ip或者域名:1880 CAfile = /etc/stunnel/cert/ca.crt [https] accept = 0.0.0.0:443 connect = 服务端ip或者域名:1443 CAfile = /etc/stunnel/cert/ca.crt
注意红色区域是我们需要修改的地方,要修改为你服务端的ip或者域名都可
在启动前,请将服务端下载的ca.crt证书放在/appdata/stunnel/cert
创建docker-compose.yaml:
services: stunnel: image: rsg2019/stunnel container_name: "stunnel" restart: always volumes: - "/appdata/stunnel:/etc/stunnel" environment: - "TZ=Asia/Shanghai"
如果拉不下来镜像,可以使用代理或者国内镜像,本站会员可以用服务端同样方法获取。
到此客户端配置完成,我们来说说如何用在qbittorrent上。
严格来说这个方法,可以用在任何下载工具上,这里只是我常用qb所以就用qb演示了,这里我使用的方法是修改qbittorrent的容器内部的hosts。
我们先拷贝出来容器内部的hosts,以免对容器有影响,可以使用命令拷贝
docker cp qbittorrent:/etc/hosts ./
命令红色的地方qbittorrent是容器的名字,这个要根据你的容器名字进行修改, 红色的./是容器内部文件拷贝到当前操作文件夹。
我们修改一下从容器内部拷贝出来的hosts,然后在映射到容器内部。
这里注意,192.168.10.111是运行stunnel的ip 后面是不能正常访问的PT站点的tracker,这里江苏地区是最近两条不能正常访问的两个站点的tracker。
修改完成后,我们把修改好的hosts按照下面的映射方式,重新映射回到qb的容器内。
我们在去PT下载一个种子回来测试一下,看看能不能获取到tracker。
结尾:
这个只是一个解决办法,面对江浙沪国强的盾的一个无奈之举,又梯子的小伙伴,也可以通过梯子来解决这个问题,或者等pt维护人员出解决方案都可,我这也是出一个解决方法,希望对大家有用,如有问题或者可以申请qq群与我交流