写在开始

本方法仅供技术学习交流,如作他用所承受的法律责任一概与作者无关。

  近期买了个香港云服务器,加之平时科研工作离不开访问谷歌学术、GitHub、GitLab等网站,思考着能否使用香港服务器进行中转访问,省下一笔费用的同时还能够方便自己的学习工作。经过了解,SSR与V2Ray是两种比较不错的方法,有兴趣的小伙伴自行了解,这里不多赘述这两种方式的异同。


基于ShadowsocksR的代理服务部署

  Shadowsocks是clowwindy开发的自用的软件,开发的初衷只是为了让自己能够简单高效地科学上网,自己使用了很长一段时间后觉得不错才共享出来的。但clowwindy被请去喝茶后就被迫停止了更新,ShadowsocksR是后来人员维护的增强版本。


准备工作

  • 一台香港/国外的云服务器
  • 服务器安装了docker & docker-compose

部署ShadowsocksR

  部署本项目所使用的docker镜像为:winterssy/shadowsocksr
首先新建一个文件夹,在文件夹中创建shadowsocksr的配置文件config.json,注意,混淆和加密是很重要的,SSR协议通过混淆和加密技术,在用户和服务器之间建立一条安全的通道,使网络流量得以加密,不易被监测和干扰。

{
    "server": "0.0.0.0",
    "local_address": "127.0.0.1",
    "local_port": 1080,
    "port_password": {
        "1127": "设置你的密码"            # 对外的代理端口
    },
    "timeout": 300,
    "method": "rc4-md5",                 # 设置加密算法
    "protocol": "auth_aes128_md5",       # 设置协议
    "protocol_param": "",
    "obfs": "tls1.2_ticket_auth",        # 设置混淆方式
    "obfs_param": "f2258258.www.gov.hk",
    "redirect": "",
    "dns_ipv6": false,
    "fast_open": false,
    "workers": 1
}

在config.json文件的同一级目录下,创建docker-compose.yml配置文件:

version: "3.6"
services:
ssr:
    image: winterssy/shadowsocksr:latest
    container_name: ssr
    ports:
      - 1127:1127
      - 1127:1127/udp
      - 1128:1128
      - 1128:1128/udp
      - 1129:1129
      - 1129:1129/udp
    networks:
      - ssr
    volumes:
      - "./config.json:/app/config.json:ro"
    restart: unless-stopped
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "10"
networks:
  ssr:
    name: ssr
    driver: bridge

在上述两个文件的同一目录下,输入以下指令,启动shadowsocksr服务:

docker-compose up -d

启动成功后,使用以下命令查看启动日志,确保启动成功:

docker-compose logs -f --tail=50

若看到以下信息,代表启动成功:

ssr  | 2024-08-09 02:31:00 INFO     util.py:85 loading libcrypto from libcrypto.so.1.1
ssr  | 2024-08-09 02:31:00 INFO     shell.py:72 ShadowsocksR 2.6.12
ssr  | 2024-08-09 02:31:00 INFO     server.py:46 current process RLIMIT_NOFILE resource: soft 1048576 hard 1048576
ssr  | 2024-08-09 02:31:00 INFO     asyncdns.py:324 dns server: [('127.0.0.11', 53)]
ssr  | 2024-08-09 02:31:00 INFO     server.py:105 server start with protocol[auth_aes128_md5] password [b'你设置的密码'] method [rc4-md5] obfs [tls1.2_ticket_auth] obfs_param [f2258258.www.gov.hk]
ssr  | 2024-08-09 02:31:00 INFO     server.py:141 starting server at 0.0.0.0:1127

启动成功后,需要开放对应的防火墙端口,否则无法访问服务,以CentOS为例:

firewall-cmd --zone=public --add-port=1127/tcp --permanent

使用clash对shadowsocksr服务进行订阅

  大部分朋友更习惯使用clash订阅节点,这就需要将shadowsocksr节点的订阅URL转换成clash订阅URL,涉及到下面几个步骤。


生成SSR订阅URL

  首先是shadowsocksr节点URL的生成,由docker部署的shadowsocksr似乎不会自动生成订阅URL(也许是我没有找到)。已知的只有我们的配置信息(服务器IP、服务端口、加密方式、混淆方式等),需要借助一个工具来生成订阅URL,工具可以通过我提供的方式进行下载:

此处内容需要评论回复后(审核通过)方可阅读。

打开工具,将服务器的IP、端口、所设置的密码、加密方式、协议、混淆方式等进行填写,填写之后点击Add,就会自动生成SSR URL(如图红框),一定不要填写错了,填写错了任何一项都无效。(如果你想直接使用该工具,也是可以的,下面的内容就可以不需要再看)
生成SSR URL


将SSR订阅URL转换为clash

  Github种有现成的项目对不同的订阅方式进行转换,我推荐的是tindy2013/subconverter的项目,该项目支持绝大数种类型的订阅的转换,如下:

类型作为源类型作为目标类型参数
Clashclash
ClashRclashr
Quantumult (完整配置)quan
Quantumult X (完整配置)quanx
Loonloon
Mellowmellow
SS (SIP002)ss
SS (软件订阅/SIP008)sssub
SSDssd
SSRssr
Surfboardsurfboard
Surge 2surge&ver=2
Surge 3surge&ver=3
Surge 4surge&ver=4
Trojantrojan
V2Rayv2ray
类 TG 代理的 HTTP/Socks 链接×仅支持 &url= 调用
Mixed×mixed
Auto×auto

基于这个项目也有一些在线的转换工具,但是我觉得这些工具不安全,保不齐会把你的订阅链接保存到他们的服务器里,然后趁你不注意白嫖你的订阅服务,拉低你的体验。该项目也可以使用docker自部署。
  首先新建一个文件夹,在文件夹中创建docker-compose.yml配置文件:

version: '3.6'
services:
  subconverter:
    image: tindy2013/subconverter
    container_name: subconverter
    ports:
      - "25500:25500"

在上述文件的同一目录下,输入以下指令,启动subconverter服务:

docker-compose up -d

启动成功后,使用以下命令查看启动日志,确保启动成功:

docker-compose logs -f --tail=50

若看到以下信息,代表启动成功:

subconverter  | 2024/08/09 Fri 03:00:15.456352 [1 Thread-1][INFO] SubConverter v0.9.0-6974910 starting up..
subconverter  | \033]0;SubConverter v0.9.0-6974910\007\c
subconverter  | 2024/08/09 Fri 03:00:15.457211 [1 Thread-1][INFO] Loading preference settings...
subconverter  | 2024/08/09 Fri 03:00:15.464388 [1 Thread-1][VERB] Imported 0 item(s).
subconverter  | 2024/08/09 Fri 03:00:15.464455 [1 Thread-1][VERB] Trying to import items from snippets/emoji.toml
subconverter  | 2024/08/09 Fri 03:00:15.475904 [1 Thread-1][VERB] Imported 94 item(s).
subconverter  | 2024/08/09 Fri 03:00:15.476086 [1 Thread-1][VERB] Trying to import items from snippets/groups.toml
subconverter  | 2024/08/09 Fri 03:00:15.478458 [1 Thread-1][VERB] Imported 13 item(s).
subconverter  | 2024/08/09 Fri 03:00:15.478547 [1 Thread-1][VERB] Trying to import items from snippets/rulesets.toml
subconverter  | 2024/08/09 Fri 03:00:15.481222 [1 Thread-1][VERB] Imported 20 item(s).
subconverter  | 2024/08/09 Fri 03:00:15.481357 [1 Thread-1][VERB] Imported 0 item(s).
subconverter  | 2024/08/09 Fri 03:00:15.481416 [1 Thread-1][INFO] Load preference settings in TOML format completed.
subconverter  | 2024/08/09 Fri 03:00:15.481740 [1 Thread-1][INFO] Updating ruleset url 'rules/LocalAreaNetwork.list' with group '🎯 全球直连'.
subconverter  | 2024/08/09 Fri 03:00:15.482047 [1 Thread-1][INFO] Updating ruleset url 'rules/MSServices.list' with group 'Ⓜ️ 微软服务'.
subconverter  | 2024/08/09 Fri 03:00:15.482294 [1 Thread-1][INFO] Updating ruleset url 'rules/DivineEngine/Surge/Ruleset/Unbreak.list' with group '🎯 全球直连'.
subconverter  | 2024/08/09 Fri 03:00:15.482674 [1 Thread-1][INFO] Updating ruleset url 'rules/NobyDa/Surge/AdRule.list' with group '🛑 全球拦截'.
subconverter  | 2024/08/09 Fri 03:00:15.483193 [1 Thread-1][INFO] Updating ruleset url 'rules/DivineEngine/Surge/Ruleset/Guard/Hijacking.list' with group '🛑 全球拦截'.
subconverter  | 2024/08/09 Fri 03:00:15.483511 [1 Thread-1][INFO] Updating ruleset url 'rules/DivineEngine/Surge/Ruleset/StreamingMedia/Video/Netflix.list' with group '🎥 NETFLIX'.
subconverter  | 2024/08/09 Fri 03:00:15.483725 [1 Thread-1][INFO] Updating ruleset url 'rules/DivineEngine/Surge/Ruleset/StreamingMedia/Streaming.list' with group '🌍 国外媒体'.
subconverter  | 2024/08/09 Fri 03:00:15.483874 [1 Thread-1][INFO] Updating ruleset url 'rules/lhie1/Surge/Surge 3/Provider/Media/Bilibili.list' with group '🌏 国内媒体'.
subconverter  | 2024/08/09 Fri 03:00:15.484063 [1 Thread-1][INFO] Updating ruleset url 'rules/lhie1/Surge/Surge 3/Provider/Media/iQiyi.list' with group '🌏 国内媒体'.
subconverter  | 2024/08/09 Fri 03:00:15.484284 [1 Thread-1][INFO] Updating ruleset url 'rules/lhie1/Surge/Surge 3/Provider/Media/Letv.list' with group '🌏 国内媒体'.
subconverter  | 2024/08/09 Fri 03:00:15.484469 [1 Thread-1][INFO] Updating ruleset url 'rules/lhie1/Surge/Surge 3/Provider/Media/MOO.list' with group '🌏 国内媒体'.
subconverter  | 2024/08/09 Fri 03:00:15.484657 [1 Thread-1][INFO] Updating ruleset url 'rules/lhie1/Surge/Surge 3/Provider/Media/Tencent Video.list' with group '🌏 国内媒体'.
subconverter  | 2024/08/09 Fri 03:00:15.484846 [1 Thread-1][INFO] Updating ruleset url 'rules/lhie1/Surge/Surge 3/Provider/Media/Youku.list' with group '🌏 国内媒体'.
subconverter  | 2024/08/09 Fri 03:00:15.485017 [1 Thread-1][INFO] Updating ruleset url 'rules/DivineEngine/Surge/Ruleset/Extra/Telegram/Telegram.list' with group '📲 电报信息'.
subconverter  | 2024/08/09 Fri 03:00:15.485201 [1 Thread-1][INFO] Updating ruleset url 'rules/DivineEngine/Surge/Ruleset/Global.list' with group '🔰 节点选择'.
subconverter  | 2024/08/09 Fri 03:00:15.485407 [1 Thread-1][INFO] Updating ruleset url 'rules/DivineEngine/Surge/Ruleset/Extra/Apple/Apple.list' with group '🍎 苹果服务'.
subconverter  | 2024/08/09 Fri 03:00:15.485646 [1 Thread-1][INFO] Updating ruleset url 'rules/DivineEngine/Surge/Ruleset/China.list' with group '🎯 全球直连'.
subconverter  | 2024/08/09 Fri 03:00:15.485835 [1 Thread-1][INFO] Updating ruleset url 'rules/NobyDa/Surge/Download.list' with group '🎯 全球直连'.
subconverter  | 2024/08/09 Fri 03:00:15.486037 [1 Thread-1][INFO] Adding rule 'GEOIP,CN,🎯 全球直连'.
subconverter  | 2024/08/09 Fri 03:00:15.486114 [1 Thread-1][INFO] Adding rule 'FINAL,🐟 漏网之鱼'.
subconverter  | 2024/08/09 Fri 03:00:15.486205 [1 Thread-1][INFO] Startup completed. Serving HTTP @ http://0.0.0.0:25500

上述关于Rules的提示是subconvert自动生成的默认代理规则,日常使用的话够用了,本文仅使用默认的代理规则,如果你需要客制化自己的代理规则,可以参考subconverter使用手册进行客制化。

若看到以下信息,启动成功后,需要开放防火墙端口,否则无法访问服务,以CentOS为例:

firewall-cmd --zone=public --add-port=25500/tcp --permanent

然后打开浏览器,在浏览器中输入:

http://<服务器的IP>:25500//sub?target=clash&url=<SSR的订阅URL>

即可转换成clash订阅,以下是成功转换后的订阅信息结果节选:

port: 7890
socks-port: 7891
allow-lan: true
mode: Rule
log-level: info
external-controller: :9090
proxies:
  - {name: 你的服务器IP:1127, server: 你的服务器IP, port: 1127, type: ssr, cipher: rc4-md5, password: 你设置的密码, protocol: auth_aes128_md5, obfs: tls1.2_ticket_auth, protocol-param: "", obfs-param: f2258258.www.gov.hk}

clash订阅URL

将该链接复制至clash的Profiles中,点击Download,即可成功订阅。
clash订阅
订阅成功后,可以检查订阅节点的有效性,有效则会显示与节点的延迟,如果显示红色的Timeout,则需要检查配置过程是否存在问题。
检查节点有效性
点击Proxies,选择Rule模式,避免国内的路由也走代理,减少服务器压力。
选择Rule模式
打开浏览器,输入一个平时无法直连的网页,如果这些网页能正常打开,并且显示走代理了,说明部署成功了。
网页走代理服务器


基于V2Ray的代理服务部署

  V2Ray是一个网络代理工具,通过使用特定的中转服务器完成数据传输,支持HTTP(只支持传入)、Socks、Shadowsocks、Trojan、VMess、VLESS等内容传输协议,每个内容传输协议可单独设置传输载体,如TCP、mKCP、QUIC、gPRC、WebSocket等。V2Ray有更完善的协议,其使用了新的自行研发的 VMess 协议,改正了Shadowsocks一些已有的缺点,更难被检测到,网络性能也更好。

之后再更新这一部分...


写在最后

  近些年来,GFW越来越强大,已经能够通过各种高级手段识别出Shadowsocks代理的流量特征,也有大量的研究分析如何识别Shadowsocks的流量特征,这里放几篇文章供大家阅读:Shadowsocks是如何被检测和封锁的使用主动探测方法识别Shadowsocks服务Shadowsocks对检测和封锁的探究。V2Ray流量特征也变得越来越透明,不断有失效的消息发出:猜测V2Ray流量被GFW所精准识别最近威力加强了,纯自用搭建的也被墙了...  如果被GFW探测到,轻则封端口、封IP,如果进行了非法的业务,是要承担法律责任的。

本文提供的方法仅供技术学习交流,除非有特殊的正当需求,否则请勿尝试,如作他用所承受的法律责任一概与作者无关。身为中国公民,有义务遵守中国的法律法规,网络不是非法之地,千万不要触碰法律的红线。

最后修改:2024 年 08 月 09 日
如果觉得我的文章对你有用,请随意赞赏