「tg交流群:Newlearnerの水群」
这篇文章本该在 9.23发布的,因为当时的 beat0.4.1版本存在不支持 gcm的 bug,因此文章一直鸽到现在。就在本文发表的前一天晚上作者终于编译好安装包并且发布了alpha版本,经过测试一切正常,遂完结此文。(咕咕咕~)
昨晚(9.22)无意在GitHub找到了一个支持Windows/macOS/Linux的代理工具,非常激动,鉴于目前的形式,做一个大概的分析。Linux大部分人平时用的不多,macOS有了Surge当然不必再说,强无敌(现在也有Clash x这个基于go语言的竞品,不过起步不久,功能和gui还是远远比不上的)。而Windows大部分人在用小飞机,pac模式逐渐被大家熟悉。但是,今天介绍的shuttle是可以添加规则,DIY性质的类Surge软件,可以说是Windows的一个福音。
和小飞机有何区别
小飞机使我们最初接触ss就认知的一款优秀的代理软件,其pac规则是由GWFlist而来,并且不断更新的。这个规则就造成了“非黑即白”的准则,某网站不走代理,就走直连。
而Shuttle做到了像Surge一样的规则DIY化,你可以实现小飞机没有的功能:
①建立一个防火墙,让那些烦人的广告直接被reject在墙外。
②设置自己指定的DNS用作代理环境使用,防止DNS污染。
③做到对不同软件和网页的分流,实现合理科学上网。
④建立自己的代理组,玩法多样。
篇幅有限不一一枚举,只想说Surge卖这么贵是有他的道理的,感谢Shuttle作者开源并且给出免费Releases。
下载和简介
下载安装
GitHub开源项目地址:传送门
1、打开项目的Release
2、下载安装包到本地并解压
1 2 3 4 5 6 7 8 9 |
目录结构: shuttle ├── GeoLite2-Country.mmdb ├── RespFiles/ #mock文件存放 ├── shuttle #shuttle主程序 ├── shuttle.yaml #配置文件 ├── startup.bat #启动 └── view/ #web界面目录 |
简介
以下内容来自于官方Readme
Shuttle 是基于Go实现的全平台网络代理:
- 支持
SOCKS5
、SOCKS5 over TLS
、shadowsocks
协议 - 支持规则代理:域名、IP段、GEO-IP
- 支持代理方式:直连、拒绝、代理
- 多代理服务器选择,支持分组管理。组中服务器选择方式:往返时间选择(rtt)和手动选择(select)
- 支持HTTP/HTTPS 抓包,反向代理、请求头修改、返回头修改、返回值伪造等
- 支持DNS解析方式:静态解析(static)、直连解析(direct)、代理服务器解析(remote)
结构模块:
总结:支持多种代理方式,支持正则规则。是一款和Surge非常相似的软件,目前(9.23)不支持ssr和v2ray。
规则编写和语法
Shuttle的规则是在解压好文件夹的shuttle.yaml,可以用Notepad++这样的文本编辑软件打开,编码选择UTF-8编码,否则可能出现乱码。打开后如图:
下面来分块讲解一下语法规则:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
General: # 打印log的等级,建议info或error loglevel: "info" # DNS服务器地址 dns-server: - "114.114.114.114" - "223.5.5.5" # HTTP/HTTPS监听端口 http-port: "8080" # HTTP/HTTPS代理访问控制 http-interface: "0.0.0.0" # SOCKS 代理端口 socks-port: "8081" # SOCKS 代理访问控制 socks-interface: "0.0.0.0" # 控制器服务端口(将来配置好之后打开web gui的端口) controller-port: "8082" # 控制器服务访问控制 controller-interface: "0.0.0.0" # 所有"0.0.0.0"换成本机ip"127.0.0.1"亦可。所有端口请注意不要冲突,默认配置占用8080,8081,8082三个端口。 |
1 2 3 4 5 6 7 8 9 10 |
Proxy: # SHAODWSOCKS(ss) "服务器名": ["ss", "服务器地址(域名/IP)", "端口号", "加密方式", "密码"] #SOCKS5 "服务器名": ["socks", "服务器地址(域名/IP)", "端口号"] "服务器名": ["socks", "服务器地址(域名/IP)", "端口号", "用户名", "密码"] #SOCKS5 over TLS "服务器名": ["socks-tls", "服务器地址(域名/IP)", "是否验证证书(<code>skip-verify</code>或<code>verify</code>)", "端口号"] "服务器名": ["socks-tls", "服务器地址(域名/IP)", "是否验证证书(<code>skip-verify</code>或<code>verify</code>)", "端口号", "用户名", "密码"] #注意:这里的所有节点都会添加到web gui的GLOBAL(仅Romote mode启用)中 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Proxy-Group: # Proxy代理组,其中所有的节点用来走代理规则指定的域名或者ip地址,其内容可以是几个节点或者包含几个节点的子代理组 "Proxy": ["select", "Auto", "HK", "JP", "US"] # Auto代理组(特殊的子代理组),可以判断出最优节点并且自动选择 "Auto": ["rtt", "服务器1", "服务器2", "服务器3", "服务器4", "服务器5"] # 子代理组,可以根据地区或者个人爱好自由命名 "HK": ["select", "??HK_a", "??HK_b", "??HK_c"] "JP": ["select", "??JP_a", "??JP_b", "??JP_c"] "US": ["select", "??US_a", "??US_b", "??US_c"] # nProxy组,即“noproxy”,为直连。所有带有此组的域名或者ip走直连 "nProxy": ["select", "DIRECT"] #注意:这里的所有群组都会添加到web gui的GLOBAL(仅Romote mode启用)中 ,每个群组会生成对应名称的代理栏。 # 此外补充几个语法名词: select 手动选择 rtt 本机穿过远端到达www.gstatic.com的往返时间评出最优 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Local-DNS: #- ["匹配方式", "值", "解析方式", "参数"] - ["DOMAIN", "localhost", "static", "127.0.0.1"] - ["DOMAIN-KEYWORD", "google", "remote", ""] - ["DOMAIN-SUFFIX", "baidu.com", "direct", "114.114.114.114"] # 好处在于可以为某些网页自定义DNS,有效避免DNS污染以及加快打开速度 # 一些规则名词: 匹配方式 DOMAIN-SUFFIX 域名后缀匹配 DOMAIN 域名全匹配 DOMAIN-KEYWORD 域名关键字匹配 解析方式 static 静态解析 对应的IP地址 direct 直连DNS服务器解析 DNS服务器地址 remote 让远端服务器解析 无 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
Rule: # 代理规则 - ["匹配方式","值","连接方式","备注"] # - [域名后缀匹配,域名后缀,直连,] - ["DOMAIN-SUFFIX", "gitlab.anjian.com", "DIRECT", ""] # - [域名全匹配,域名,走分组Proxy,] - ["DOMAIN", "sipt.top", "Proxy", ""] # - [域名关键字匹配,关键字,拒绝连接,] - ["DOMAIN-KEYWORD", "zjtoolbar", "REJECT", ""] # - [IP网段断匹配,IP网段,直连,] - ["IP-CIDR", "127.0.0.0/8", "DIRECT", ""] # - [GEOIP匹配,中国,走nProxy组规则,] - ["GEOIP", "CN", "nProxy", ""] # - [以上都不满足,,走Proxy组规则,] - ["FINAL", "", "Proxy", ""] # 匹配方式 DOMAIN-SUFFIX 域名后缀匹配 DOMAIN 域名全匹配 DOMAIN-KEYWORD 域名关键字匹配 IP-CIDR IP网段断匹配 GEOIP GEOIP匹配(国家代号) FINAL 以上都不满足 # 连接方式 DIRECT 直接连接目标服务器 REJECT 拒绝连接 Proxy 代理 nProxy 中国局域网内直连(走DIRECT的特殊组) |
鉴于文章的标题主打“网络代理工具”,关于抓包和反代的语法这里不一一赘述,大家感兴趣可以到官网上面看。个人觉得给定的模板里面出现大量的nProxy是在多此一举,只是为了突出这个是中国局域网概念,不如直接DIRECT来的直接点。
运行与使用
编辑好shuttle.yaml这个文件之后,我们运行下startup.bat,成功之后在浏览器地址栏输入http://localhost:8082(以controller-port: “8082“为例),如果能打开控制台页面就说明启动成功,如果打开失败可以查看shuttle.log查看原因。打开之后的web gui如下图所示:
可以看到,我们上面在配置中添加的「Proxy」和「Proxy Group」都在Global(全局模式)里面了。「Proxy」选项(自己命名的代理组)相当于小飞机的pac模式,在Rule Mode当中适用,在Proxy(select)中选择想要连接的节点。只有在选中Remote Mode时才会应用Global分栏,相当于全局。
接着点击「General」,选择Enable来开启代理,开启之后我们会在win10的网络设置-代理当中看见:
这个时候就可以愉快的上网了~如果将来改变了配置,在web gui当中点击Reload即可,我们不用的时候记得点击Shutdown。
使用过程中会发现shuttle有四种代理模式:Rule Mode(仅使用Proxy分组), Remote Mode(Global分组开启,相当于全局), Direct Mode(直连), Reject Mode(过滤)。默认Rule Mode即可。
实际体验与感受
话不多说先来跑个分吧,作为一款代理软件一定要看看资源占用率和实际的网速的。
vu日本:
美国洛杉矶:
英国伦敦:
因为站主测试机器是mac,正好和将这个windows的成绩和macOS比较了一下,结果大致相同(可去看之前测评),所以说效果还是很不错的。
再说说web gui的几个贴心小功能:
1、HTTP Records
能够像surge的dashboard一样记录你的http连接情况,访问某网站是怎么样连接的,代理还是直连等。
2、DNS Cache
可以查看由配置种设定的dns解析出相应域名的ip地址
3、关闭了web gui之后依然可以上网,不像某xx-net。
最后说几点不足:
1、在代理模式上较乱,为何不直接给出规则模式和代理模式,而要将几种Mode和分组联系在一起?
2、切换节点时偶尔出现bug,仍然使用刚刚的节点,需要点击Reload才可以更新。
3、每次Reload之后节点的顺序会变化,而不能像其他的代理软件一样根据配置来排序。
4、因为是web gui,不能像退出客户端一样及时地取消代理,在重启之后发现设置当中仍然监听了端口,需要手动关闭(点击web gui的shutdown或者去设置关),稍微不人性化。
使用了一段时间之后觉得总体来说是一款不错的windows代理软件,开启了windows规则时代。即使现在有很多不完善的地方,但是我希望开发者能够不断地优化,做出更好的软件来~欢迎大家试用
第一步就卡住了,bat启动不了,端口没有冲突
success了,但是通过Chrome看不到UI界面呀
controller-port配置是否正确?地址栏输入是否有误?shuttle是否正常运行?请给出关键描述。另外shuttle的作者可能已经弃坑,建议使用cfw。