SpechtLite

简介

Specht 是 zhuhaow 写的一款开源的基于 Network Extension 的 Mac 版代理。Specht 有两个版本,其中 Specht是基于 Network Extension 的。可以自动设置代理,可以转发所有的 TCP 流,包括所有不支持代理的软件。但 Specht 需要有开发者帐号并且申请 Network Extension 自己编译使用,因此作者又提供了 SpechtLite,单方面代理功能和 Surge for Mac 相当,能自定义黑白域名和ip名单,支持http、https、shadowsocks、sock5等代理方式。

如果你还在使用 shadowsocksX 或 shadowsocksX-R,不妨尝试下功能更丰富的 SpechtLite ,这里是下载地址说明配置模板

配置文件

我使用的是上面配置模板链接中的配置,下载之后把几个配置文件放入~/.SpechtLite中,修改之后在SpechtLite菜单中点击reload config,别忘了还要点击Set as system log设置为系统代理。

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
- id: adapter1
# 类型为HTTP代理服务器.
type: HTTP
host: http.proxy
port: 3128
auth: true
username: proxy_username
password: proxy_password
- id: adapter2
# 类型为HTTP代理,但是使用SSL进行加密。
type: SHTTP
host: http.proxy.connect.via.https
port: 3128
auth: true
username: proxy_username
password: proxy_password
- id: adapter3
# 类型为shadowsocks服务器。
type: ss
host: http.proxy.connect.via.https
port: 3128
# 当前支持的加密方法有: AES-128-CFB, AES-192-CFB, AES-256-CFB, chacha20, salsa20, rc4-md5
method: AES-128-CFB
password: ss_password
- id: adapter4
type: socks5
host: socks5.server
port: 3128

如果你只想使用其中的shadowsocks配置,请参考adapter3host处填写服务器ip、port处填写端口、method参考注释填写加密方法、password处填写ss密码,然后把其他三个adapter项删掉,其他代理方法同理,下面的speed测速项也要对应修改有的adapter项。

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
37
38
39
40
41
42
43
44
45
46
47
48
rule:
- type: iplist
# 被污染的 host IP 地址
file: ~/.SpechtLite/pollutedip
# 我们要使用的adapter的id。
adapter: proxy
- type: list
# 直接连接给定的list文件中的正则表达式匹配域名信息(不包括IP)。
file: ~/.SpechtLite/directlist
adapter: direct
- type: iplist
# 直接连接基于给定的list文件中的ip范围。
file: ~/.SpechtLite/directiprange
adapter: direct
- type: list
# 代理连接给定的list文件中的正则表达式匹配域名信息(不包括IP)。
file: ~/.SpechtLite/proxylist
adapter: proxy
- type: iplist
# 连接基于给定的list文件中的ip范围。
file: ~/.SpechtLite/proxyiprange
adapter: proxy
- type: list
# 拒绝连接给定的list文件中的正则表达式匹配域名信息(不包括IP)。
file: ~/.SpechtLite/rejectlist
adapter: reject
- type: iplist
# 拒绝连接基于给定的list文件中的ip范围。
file: ~/.SpechtLite/rejectiprange
adapter: reject
- type: country
# ISO 国家代码
# 基于目标服务器的国家信息
country: CN
# 这条规则是否匹配到符合这个国家的IP信息。
match: true
adapter: direct
- type: country
# 当无法找到对应IP的地理位置信息时会返回“--”,这通常意味着这是一个内网IP。
country: --
match: true
adapter: direct
- type: DNSFail
# 当DNS解析失败时匹配。
adapter: proxy
- type: all
# 匹配所有的请求,建议为direct,需要走代理的网站写在proxylist中。
adapter: proxy

要修改规则的话可以直接去上面的路径修改,例如要走代理的域名按照下面正则的方式添加到~/.SpechtLite/proxylist

list规则中的file是一组正则表达式,例如:

1
2
3
\.cn
zhihu\.com
google

其中第二行 和 Surge 配置文件中DOMAIN-SUFFIX相似,第三行和 Surge 配置文件中DOMAIN-KEYWORD相似。

  • 注意如果 Reload config 时出错,请检查每项间隔有没有多余空格

你也可以一个ss服务器一个项,这样就很像Surge for Mac了。

添加测速

如果你想实现自动选择最优线路,可以像我下面配置

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
- id: adapter1
type: ss
host: (ss 服务器地址)
port: (ss 端口)
method: (密码类型)
password: (ss 密码)
- id: adapter2
type: ss
host: (ss 服务器地址)
port: (ss 端口)
method: (密码类型)
password: (ss 密码)
- id: adapter3
type: ss
host: (ss 服务器地址)
port: (ss 端口)
method: (密码类型)
password: (ss 密码)
- id: proxy
type: SPEED
adapters:
- id: adapter1
# Delay in milliseconds.
delay: 0
- id: adapter2
# Delay in milliseconds.
delay: 0
- id: adapter3
# Delay in milliseconds.
delay: 0

然后下面要走代理的 rule 项的 adapter 参数写 proxy 即可。

Chrome

Chrome 需要安装 SwitchOmega 插件后选择系统代理使用。

hosts

至于要用到 hosts 的话,你可以考虑走 hosts 的网站放进 directlist 中,再在 hosts 文件中添加配置。例如苹果服务可以通过 AppleDNS 配置进 hosts 中,然后在 directlist 中添加相应 Keyword。

吐槽

还有这个应用的Log文件不太准,一开始配置的时候就被坑了…像上图应该是ShadowsocksAdapter的这里却显示DirectAdapter,但是直连的话我是看不了Youtube的,真是迷呀。

iTerm 2

~/.zshrc中加入下面代码

1
2
3
4
5
6
7
8
9
10
11
12
13
# where proxy
proxy () {
export http_proxy="http://127.0.0.1:1086" # http代理地址
export https_proxy="http://127.0.0.1:1086" # https代理地址
echo "HTTP Proxy on"
}
# where noproxy
noproxy () {
unset http_proxy
unset https_proxy
echo "HTTP Proxy off"
}

如果你想使用 SpechtLite 代理,可以把端口改成 SpechtLite 默认端口9090,修改后source ~/.zshrc就能使用了。

如果是终端.app的话需要自己复制export语句来使用代理。

其他选择

  1. ShadowsocksX
  2. ShadowsocksX-R