others-ssr自定义规则
科学上网
前篇
代理规则说明
首先先明白 代理规则 是干什么的,和PAC(系统代理模式)是什么区别:
ShadowsocksR目前分两种规则方式,那就是 系统代理模式(PAC、全局,主要解释PAC) 和 代理规则 。
PAC规则 是根据PAC文件中的黑白地址名单来判断那些网站走代理。也就是判断 流量是否进入客户端。
当你要访问的网站满足 PAC里的设置,那么浏览器就会向代理服务器也就是客户端发送网站请求数据,这时候我们才进入了ShadowsocksR客户端,接下来我们就进入了代理规则判断环节。
代理规则 是根据IP判断,按选择的规则来判断进入 客户端的流量是直连还是走代理。
当你访问 XXX 网站,然后是全局或者满足PAC条件(不满足条件就直接直连访问了,也不会有接下来的代理规则判断了)从而访问 XXX网站的请求数据流量进入了客户端,然后客户端会根据 XXX网站的IP来判断,如下:
- 绕过局域网:当IP属于局域网内的,那么SSR客户端就会让流量直连,反之则会让流量走代理(发送到SSR服务端)。
- 绕过局域网和大陆:当IP属于大陆内或局域网的,那么SSR客户端就会让流量直连,反之则会让流量走代理(发送到SSR服务端)。
- 绕过局域网和非大陆:当IP属于大陆外(非大陆IP都算大陆外)或局域网的,那么SSR客户端就会让流量直连,反之则会让流量走代理(发送到SSR服务端)。
- 用户自定义:在 GFWList 的基础上, 插入用户自定义的规则, 这里可以通过 user-rule.txt, user.rule 文件自定义规则. 参考: [使用自定义规则 user-rule.txt](#使用自定义规则 user-rule.txt), [使用自定义规则 user.rule](#使用自定义规则 user.rule)
- 全局:无论什么情况都直接走代理。
这两种判断方式是相互配合使用的,先用系统代理模式来判断是否让数据进入SSR客户端,再用代理规则来判断进入SSR客户端的数据是直连还是走代理。
举个栗子:
假设系统代理模式为 PAC,那么访问 www.google.com ,浏览器在PAC文件中匹配这个域名,并发现这个域名按PAC规则应走代理,所以 浏览器就会发送 访问网页数据到 P**AC中的代理服务器(默认如127.0.0.1:1080)**,于是SSR客户端就收到了 访问谷歌的数据,而这时候就该用 代理规则 判断了。
代理规则为:绕过局域网,则判断 www.google.com 域名的IP是否是局域网IP,然而不是局域网IP,于是走代理。
代理规则为:绕过局域网和大陆,则判断 www.google.com 域名的IP是否是局域网IP 或 大陆IP,然而不是局域网IP或大陆IP,于是走代理。
代理规则为:绕过局域网和非大陆,则判断 www.google.com 域名的IP是否是局域网IP 或 非大陆IP,然而是非大陆IP,于是不走代理,直连。
代理规则为:用户自定义,通过 GFWList 规则判断 www.google.com 是需要走代理的,用户可以在自定义规则中, 禁止/开启 这个域名走代理.
代理规则为:全局,不判断 www.google.com 域名的IP,直接走代理。
user-rule.txt 与 user.rule 的区别
user-rule.txt
是用于 GFWList 的自定义规则,参考user.rule
是用于代理规则的,Wiki
user-rule.txt 用于这个阶段
一般使用与 浏览器访问网页时起作用, 先经过 user-rule.txt 规则, 再经过 user.rule 规则, 最后在决定是否走 代理服务器.
对于其他 app 通过 socks5/http 连接到 ssr 就无效. 所以使用 user.rule 会更直接有效, 应为 user.rule 链路比较靠口, 更靠近 代理服务器.
user.rule 用于这个阶段
这个可以使其他 app 通过 socks5/http 连接到 ssr, 让后在通过自定义规则决定是否走 代理服务器.
这个使用的比较多, 因为其他 app 都是通过 Proxifier 使用 socks5 连接到 srr 客户端, 进而访问其他外网.
使用自定义规则 user-rule.txt
参考: ShadowsocksR Windows端 PAC模式&代理規則 - https://blog.yosheng.tw/shadowsocksr-windows-pac
选择代理规则为自定义. 代理规则 -> 用户自定义.
编辑 user-rule.txt. PAC -> 编辑 GFWList 的用户规则
( 也可以打开 ssr 根目录, 找到 user-rule.txt )
添加一个规则, 如
youtube.com
域名及其子域名都 不走代理服务器1
@@.youtube.com
重新加载 user-rule.txt. PAC -> 更新 PAC为 GFWList. done.
执行这个操作后, 会把 user-rule.txt 的内容自动添加到 pac.txt 中. (也就是说直接改 pac.txt 是无效的, 每次都会根据 GFWList 和 user-rule.txt 重新生成)
测试. 打开 https://www.youtube.com/ 会发现已经打不开了.
再次测试, 把
@@.youtube.com
干掉, 重新加载 user-rule.txt. 就可以打开了.
user-rule.txt 匹配规则
- ShadowsocksR Windows端 PAC模式&代理規則 - https://blog.yosheng.tw/shadowsocksr-windows-pac
注意末尾不要忘记 ^ 符号,意思是要么在这个符号的地方结束,要么后面跟着?,/等符号。
自定义代理规则的设置语法与GFWlist相同,语法规则如下:
- 通配符支持。比如
*.example.com/*
实际书写时可省略*
, 如.example.com/
, 和*.example.com/*
效果一样 - 正则表达式支持。以
\
开始和结束, 如\[\w]+:\/\/example.com\
- 例外规则
@@
,如@@*.example.com/*
满足@@
后规则的地址不使用代理 - 匹配地址开始和结尾
|
,如|http://example.com
、example.com|
分别表示以http://example.com
开始和以example.com
结束的地址 ||
标记,如||example.com
则http://example.com
、https://example.com
、ftp://example.com
等地址均满足条件- 注释
!
。 如!我是注释
更多user-rule.txt语法规则,可以参考AdBlockPlus过滤规则https://adblockplus.org/en/filter-cheatsheet
使用自定义规则 user.rule
参考: ShadowsocksR 客户端中的 [代理规则 – 用户自定义] 功能使用教程 - https://doubibackup.com/3we1qxzj-7.html
选择代理规则为自定义. 代理规则 -> 用户自定义.
编辑 user.rule. (ssr 根目录下)
添加一个规则, 如
cip.cc
域名及其子域名都 代理服务器1
.cip.cc remoteproxy
重新启动 ssr 才能重新加载到 user.rule.
或者把 代理规则 切到其他再切回 用户自定义, 也可以重新加载 user.rule. done!
测试. 使用命令行 curl 一下其出口 ip 都是走了 代理服务器
1
2
3
4
5
6$ curl cip.cc
IP : 38.39.230.140
地址 : 美国 美国
数据二 : 美国 | 华盛顿Cogent通信公司
数据三 : 美国 | 科进
URL : http://www.cip.cc/38.39.230.140再次测试, 把
.cip.cc remoteproxy
修改为.cip.cc direct
, 让其 不走代理服务器. 重启 ssr 再次 curl 一下1
2
3
4
5
6
7$ curl cip.cc
IP : 14.155.114.141
地址 : 中国 广东 深圳
运营商 : 电信
数据二 : 广东省深圳市 | 电信
数据三 : 中国广东深圳 | 电信
URL : http://www.cip.cc/14.155.114.141
user.rule 匹配规则
注释
以**#号开始的一行为注释内容,注意:#号的前面不得有空格**,例如:
1 | # 我是注释,我会被忽略,一行的行首字符必须是#号才行。 |
基本规则
规则文件内,除了空行和注释,其它的每行都是一条规则,规则之间有先后次序之分。若出现相同的规则,那么后一条规则可覆盖前一条规则。
规则分两类:
规则匹配结果类型
规则匹配结果类型有 四种:remoteproxy、localproxy、direct、reject。均可用于两类规则。
四种结果的含义:
- remoteproxy:经过SSR服务器连接(走代理)
- localproxy:经过本地代理连接,或没有配置本地代理时使用直连连接(本地代理指的是:选项设置 - 二级(前置)代理)
- direct:直连连接(直连,不走代理)
- reject:拒绝连接(可用于屏蔽广告,当然前提是用系统代理规则:全局模式,否则只有进入SSR客户端的广告才会被过滤)
域名规则
1 | 格式:hostname rule # 域名 规则 |
hostname 格式支持三种写法:
1 | 直接写完整域名,如 b.com ,此时不匹配 a.b.com 这类子域名。 |
域名规则还有一种特殊的规则 rule 写法,作用类似于修改 hosts 文件, 自定义本机的 dns 解析.
1 | a.com 127.0.0.1 |
这种规则相当于给 指定域名 (a.com) 或 一组子域名 (.b.com) 一个相应的IP,但不直接指定最终结果。
最终结果将由IP段规则决定,比如接下来的IP规则判断中,127.0.0.1 规则判断结果是直连,那么将使用此规则所指定的IP来连接。
IP段规则
1 | 格式:ip1 ip2 rule # IP段起始 IP段结尾 规则 |
利用这个规则可以编写基于黑名单或白名单的IP规则,例如在规则文件内先写:
1 | :: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff remoteproxy0.0.0.0 255.255.255.255 remoteproxy 1.0.1.0 1.0.1.255 localproxy......(等等其他规则) |
前两行这样意味着所有的IP(第一行是IPv6全部IP段,第二行是IPv4全部IP段)默认走代理,然后利用后一规则覆盖前一规则来设置不走代理的IP,所以这就是白名单规则。
反过来如果所有IP设置为 localproxy,那么就是黑名单规则:
1 | :: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff localproxy0.0.0.0 255.255.255.255 localproxy 1.0.1.0 1.0.1.255 remoteproxy......(等等其他规则) |
规则匹配次序
当你访问 www.google.com ,浏览器配置全局模式(或者PAC模式,但谷歌被墙,PAC判断为走代理),然后浏览器会把谷歌网址的访问请求发给 SSR 客户端,然后:
1 | ┏━ SSR客户端 代理规则选择:用户自定义(你已经配置好了规则),然后 SSR客户端 会去代理规则中匹配 域名: |
全网也只有 SSR的WIKI才有这个教程,所以我参考WIKI的内容,因为原版WIKI就很详细了,所以我只是在原版内容的基础上做了一点补充。
因为SSR项目已删除,所以我就引用了SSRR fork的WIKI:https://github.com/shadowsocksrr/shadowsocks-rss/wiki/C%23-Proxy-Rule
PAC 规则
Shadowsocks手动 添加和编辑 PAC中的网址规则 - https://doubibackup.com/3we1qxzj-6.html
规则定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23=== 通配符支持 => *
*.example.com/ 代表 http://example.com http://233.example.com https://233.example.com https://666.example.com/233.mp4 全部走代理。
同时"*"可省略,.example.com/ 与 *.example.com/ 效果是一样的
=== 正则表达式支持
以 \ 开始和结束,\[\w]+:\/\/example.com\
=== 例外规则 => @@
@@*.example.com/ 表示"@@"后面的网址规则(*.example.com)不走代理
如:@@www.baidu.com 表示 www.baidu.com 不走代理
=== 匹配地址开始和结尾规则 => |
|http://example.com、example.com| 分别表示 以http://example.com开始 和 以example.com结束 的地址
如:|http://233.com ,代表 http://233.com 开头的网址才会走代理,即 https://233.com http://1.233.com 都不会走代理
如:233.com|,代表 233.com 结尾的网站才会走代理,即 http://233.com https://233.com http://1.233.com 都会走带了,而 http://233.com/index.html 不会走代理。
=== 全匹配规则 => ||
||example.com 则代表 http://example.com、https://example.com、ftp://example.com 等协议的地址全部走代理
如:||233.com ,即 http://233.com、https://233.com、ftp://233.com 等地址全都走代理
=== 注释规则 => !
!我是注释233
!我也是注释666