ShadowsocksR PC客户端在 4.6.0 版本中添加了一个代理规则选项 [用户自定义],说实话我一直没注意到,还是一个逗比在网站问我这个功能的作用是什么时,我才突然发现这个功能,就特地去了解了一下,然后写个简单的使用教程。
首先先明白 代理规则 是干什么的,和PAC(系统代理模式)是什么区别:
点击展开 查看更多
ShadowsocksR目前分两种规则方式,那就是 系统代理模式(PAC、全局,主要解释PAC) 和 代理规则 。
PAC规则 是根据PAC文件中的黑白地址名单来判断那些网站走代理。也就是判断 流量是否进入客户端。
当你要访问的网站满足 PAC里的设置,那么浏览器就会向代理服务器也就是客户端发送网站请求数据,这时候我们才进入了ShadowsocksR客户端,接下来我们就进入了代理规则判断环节。
代理规则 是根据IP判断,按选择的规则来判断进入 客户端的流量是直连还是走代理。
当你访问 XXX 网站,然后是全局或者满足PAC条件(不满足条件就直接直连访问了,也不会有接下来的代理规则判断了)从而访问 XXX网站的请求数据流量进入了客户端,然后客户端会根据 XXX网站的IP来判断,如下:
- 绕过局域网:当IP属于局域网内的,那么SSR客户端就会让流量直连,反之则会让流量走代理(发送到SSR服务端)。
- 绕过局域网和大陆:当IP属于大陆内或局域网的,那么SSR客户端就会让流量直连,反之则会让流量走代理(发送到SSR服务端)。
- 绕过局域网和非大陆:当IP属于大陆外(非大陆IP都算大陆外)或局域网的,那么SSR客户端就会让流量直连,反之则会让流量走代理(发送到SSR服务端)。
- 全局:无论什么情况都直接走代理。
这两种判断方式是相互配合使用的,先用系统代理模式来判断是否让数据进入SSR客户端,再用代理规则来判断进入SSR客户端的数据是直连还是走代理。
举个栗子:假设系统代理模式为 PAC,那么访问 www.google.com ,浏览器在PAC文件中匹配这个域名,并发现这个域名按PAC规则应走代理,所以 浏览器就会发送 访问网页数据到 PAC中的代理服务器(默认如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,于是不走代理,直连。
代理规则为:全局,不判断 www.google.com 域名的IP,直接走代理。
你们大概能明白了吗?不明白可以评论区问我。
代理规则中的 用户自定义,就是可以让你自定义什么域名或IP 走代理还是直连,比PAC更方便添加/编辑规则,以后完全可以抛弃 PAC,而改用 用户自定义 代理规则(系统代理模式选择全局,浏览器扩展也设置 127.0.0.1 1080(默认端口))。
实际上 SSR 安卓客户端中的 ACL 和 代理规则 - 用户自定义 是一样的。
接下来讲解代理规则格式等内容。
文件位置
代理规则 - 用户自定义 的规则文件是 ShadowsocksR.exe 客户端同目录下的 user.rule 文件(如果没有就自己新建)。
注意:每次修改规则文件后,都需要 重启SSR客户端 才能应用最新规则。
提供一个Github上面找到的 ACL(PC客户端 规则文件,带去广告):https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/gfwlist-user.rule
如果不满意,可以去 Github 搜索 ACL,应该会搜到类似的文件!
你们可以边参考这个规则,边理解下面的解释,当然最好自己动手多测试几次。
当然你也可以直接下载这个现成的规则文件到ShadowsocksR客户端同目录下,并重命名为 user.rule 文件名拿来用。
文件格式
注释
以#号开始的一行为注释内容,注意:#号的前面不得有空格,例如:
# 我是注释,我会被忽略,一行的行首字符必须是#号才行。
基本规则
规则文件内,除了空行和注释,其它的每行都是一条规则,规则之间有先后次序之分。若出现相同的规则,那么后一条规则可覆盖前一条规则。
规则分两类:
规则匹配结果类型
规则匹配结果类型有 四种:remoteproxy、localproxy、direct、reject。均可用于两类规则。
四种结果的含义:
remoteproxy:经过SSR服务器连接(走代理)
localproxy:经过本地代理连接,或没有配置本地代理时使用直连连接(本地代理指的是:选项设置 - 二级(前置)代理)
direct:直连连接(直连,不走代理)
reject:拒绝连接(可用于屏蔽广告,当然前提是用系统代理规则:全局模式,否则只有进入SSR客户端的广告才会被过滤)
域名规则
点击展开 查看更多
格式:
hostname rule
# 域名 规则
hostname 格式支持三种写法:
直接写完整域名,如 b.com ,此时不匹配 a.b.com 这类子域名。
# 配置[b.com remoteproxy],即代表只有 b.com 走代理。
带通配符的域名,如 *.b.com ,此时不匹配 b.com,但能匹配 a.b.com 这类子域名。
# 配置[*.b.com remoteproxy],即代表只有 b.com 的子域名走代理,b.com 将继续往下面判断,如果下面没有 b.com 的规则,那么就走代理。
全部匹配的域名,比如.b.com,用于匹配 b.com 及 a.b.com 这类子域名的 ,任何末尾为 b.com 的域名均匹配。
# 配置[.b.com remoteproxy],即代表 b.com 以及其所有子域名例如 a.b.com 都走代理。
注意:b.com 与 .b.com 是会相互覆盖的(后写的有效),如果你需要 b.com 和它的子域名走不同的规则,那么分别写 b.com 和 *.b.com 两条规则即可。
域名规则还有一种特殊的规则 rule 写法,例如(不过一般用不上,忽略即可):
a.com 127.0.0.1
.b.com 123.123.123.123
这种规则相当于给 指定域名 (a.com) 或 一组子域名 (.b.com) 一个相应的IP,但不直接指定最终结果。
最终结果将由IP段规则决定,比如接下来的IP规则判断中,127.0.0.1 规则判断结果是直连,那么将使用此规则所指定的IP来连接。
IP段规则
点击展开 查看更多
格式:
ip1 ip2 rule
# IP段起始 IP段结尾 规则
# 如果只要控制一个IP,那么 ip1 和 ip2 写一样就行,例如:
# 1.0.1.1 1.0.1.1 remoteproxy
# 1.0.1.1 走代理
注意:ip2 必须大于或等于 ip1 ,此规则应用于包含 ip1、ip2 及它们之间的所有IP。如果两条不同的IP规则发生IP重叠,那么重叠的那部分以 后一条规则为准
利用这个规则可以编写基于黑名单或白名单的IP规则,例如在规则文件内先写:
:: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff remoteproxy
0.0.0.0 255.255.255.255 remoteproxy
1.0.1.0 1.0.1.255 localproxy
......(等等其他规则)
# 解释:
# 如果你访问的IP是 1.0.1.5 ,那么第二行规则判断该IP走代理,第四行规则判断该IP走直连(或者说二级代理)。
# 如果你访问的IP是 1.0.2.5 ,那么第二行规则判断该IP走代理,第四行规则判断该IP走代理(因为没有在IP段规则范围内)。
前两行这样意味着所有的IP(第一行是IPv6全部IP段,第二行是IPv4全部IP段)默认走代理,然后利用后一规则覆盖前一规则来设置不走代理的IP,所以这就是白名单规则。
反过来如果所有IP设置为 localproxy,那么就是黑名单规则:
:: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff localproxy
0.0.0.0 255.255.255.255 localproxy
1.0.1.0 1.0.1.255 remoteproxy
......(等等其他规则)
# 解释:
# 如果你访问的IP是 1.0.1.5 ,那么第二行规则判断该IP直连(或者说二级代理),第四行规则判断该IP走代理。
# 如果你访问的IP是 1.0.2.5 ,那么第二行规则判断该IP直连(或者说二级代理),第四行规则判断该IP继续走直连(或者说二级代理)。
规则匹配次序
当你访问 www.google.com ,浏览器配置全局模式(或者PAC模式,但谷歌被墙,PAC判断为走代理),然后浏览器会把谷歌网址的访问请求发给 SSR 客户端,然后:
┏━ SSR客户端 代理规则选择:用户自定义(你已经配置好了规则),然后 SSR客户端 会去代理规则中匹配 域名:
┃
┗┳━ 如果匹配域名规则 返回结果为直连,那么就直连不走代理(将不再继续 IP判断)。
┃
┣━ 如果匹配域名规则 返回结果为走代理,那么就直接走代理(将不再继续 IP判断)。
┃
┗━ 如果匹配域名规则 没有返回结果(就是没找到相应规则),那么就会去 SSR服务端 请求域名的 DNS解析,得到 IP 后,再继续匹配 IP规则:
┃
┗┳━ 如果匹配IP规则 返回结果为直连,那么就直连不走代理。
┃
┣━ 如果匹配IP规则 返回结果为走代理,那么就直接走代理。
┃
┗━ 如果匹配IP规则 没有返回规则(没有找到相应规则),那么就直接走代理。所以,空的 user.rule 文件等于全局模式(所有域名/IP走代理)。
全网也只有 SSR的WIKI才有这个教程,所以我参考WIKI的内容,因为原版WIKI就很详细了,所以我只是在原版内容的基础上做了一点补充。
因为SSR项目已删除,所以我就引用了SSRR fork的WIKI:https://github.com/shadowsocksrr/shadowsocks-rss/wiki/C%23-Proxy-Rule
转载请超链接注明:逗比根据地 » ShadowsocksR PC客户端中的 [代理规则 – 用户自定义] 功能使用教程
责任声明:本站一切资源仅用作交流学习,请勿用作商业或违法行为!如造成任何后果,本站概不负责!
一直在使用pac模式,以前在别的网站也见到说这种模式其实已经挺落后了,完全可以用全局模式加上浏览器安装扩展的方式实现自动代理切换。
可是这类代理扩展我看到判断依据也是gfwlist那个文件啊……那么就跟我的pac gfwlist是一回事了吧。
既然都说PAC比较落后 效率比较低,那么我也考虑尝用全局代理+代理规则来上网,但是我的代理规则已经选择绕过局域网+大陆了,那么大陆的IP肯定会直连不走代理了吧?怎么我打开好多网内网站就会无法打开呢……这样的话我还是用回PAC模式比较舒服呢,毕竟可以做到准确判断啊,被墙的都走代理,国内网站全部是直连。
而且提示 检测到您当前处于非安全网络环境 不代表淘宝知道你在用 SSR,毕竟如果淘宝都能精准检测到你是SSR代理,那么GFW是在划水?
SSR 属于匿名代理,不会爆露你的IP地址。
可能会因为汇率什么导致价格差异,或者说邮费什么的。
反正淘宝是无法分辨你是否用了SSR代理,因为你走代理和不走代理 对于淘宝来说的唯一区别就是IP不一样。
pac是系统代理判断是否走shadowsocks,是第一层判断;
而代理规则是shadowsocks判断是否走ss服务器,是第二层判断?
---
而这样又会产生一个问题,那就是shadowsocks如何判断域名是国外还是国内,如果paclist里某个网址被墙,但是却是非国外网站,那么这时候,shadowsocks就不会让它走代理服务器(如果选了“绕过局域网和大陆”)。
所以我想问的是,既然pac列表应该比后者更准确,那么代理规则无脑选全局,应该没问题,那么其它选项存在的意义在哪里呢?
先说第一个问题:
你的判断正确。
第二个问题:
SSR代理规则中的 绕过局域网和大陆、绕过局域网和非大陆 均是依靠 SSR客户端目录下的 chn_ip.txt 文件内的中国IP段。
我测试了下,当我选择 PAC模式+绕过局域网和非大陆 访问谷歌时,SSR客户端的服务器链接统计窗口出现了短暂的数据波动,这意味着判断步骤为:
第三个问题: 首先是,PAC列表也是他人维护的,只有别人提交才会增加被墙的域名,效率比较低,所以一些有特殊需求的人会选择用 绕过大陆或者绕过非大陆。
另外,当你将某个软件的代理设置设置为走 SSR 代理(SOCKS5 127.0.0.1 1080),那么你可以通过代理规则来控制哪些IP走代理,哪些不走。
举个例子:
你将 IDM(多线程下载软件) 设置走了 SSR 的代理,而代理规则选择 绕过局域网和大陆,那么当你下载国内文件时将不会走代理,当你下载国外文件时,将自动走代理。
.google.com direct
,但是改了之后反而无法访问谷歌,原因是google网站被解析为ipv6地址(日志:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 172.217.160.68:443)。所以不知道该怎么办啊@[email protected],本机其它地方都优先解析ipv6地址的。PAC 用于控制什么流量数据进入SSR客户端,而代理规则用于控制进入SSR客户端的流量数据是走代理还是直连,代理规则选择全局代表所有进入SSR客户端的流量数据都走代理。
浏览器没有用代理管理扩展时,他会去读取系统代理设置来获取代理信息,而SSR客户端的全局模式就是设置系统代理设置而已,如果你用了代理管理扩展,那么扩展就直接跳过读取系统代理设置的步骤直接访问SSR客户端了,所以再选择 全局模式 只是多此一举。
当你设置设置系统代理模式为 全局模式时,电脑内其他软件凡是Web应用(软件内内嵌网页,就像 QQ的验证消息窗口 LOL的客户端首页 steam的内置浏览器),都会读取系统代理设置并走代理。
你只要设置系统代理模式为 直连模式,那么除非你设置软件走代理(SOCKS5 127.0.0.1 1080)否则他们就不会走代理,而浏览器扩展指向了 127.0.0.1 1080 ,浏览器就会直接走代理。
直连+扩展SwitchyOmega 时,代理规则是起作用的,但是要取决于你扩展怎么配置,如果你扩展配置了GFWList,那么扩展会通过 GFWList 判断网站是否走代理,如果是谷歌网站,那么走代理进入SSR客户端,然后借着由 代理规则 判断是否走代理。
无论通过什么方式让软件或者浏览器走SSR代理,代理规则都会起作用的,无非是看你的代理规则配置是什么(如果是用了扩展,那么扩展配置也会影响结果,例如扩展里判断谷歌直连,那么就没代理规则的事情了)。
我平时都是 直连模式+扩展,由扩展判断是否走代理,SSR客户端的代理规则则是全局(不做判断,进入SSR客户端的数据全部都走代理)。
你如果选择 [绕过大陆],那么SSR客户端判断目标IP 符合国内IP规则,那么就会 直连
如果你选择 [绕过非大陆],那么SSR客户端判断目标IP 不符合国内IP规则,那么就会 走代理。
二、我不知道你 user.rule 文件里到底是怎么写的规则。
三、你要使用自己定义的用户规则,那么需要选择 代理规则 - 用户自定义 。
另外修改规则后,需要重启SSR客户端生效。
绕过局域网和大陆虽然能保证低维护成本和高准确率,但是会导致一些没必要或者不能走代理的海外网站也走代理,比如 你去海外IDC购买VPS,如果你挂代理很有可能被判断为 欺诈,然后付钱了IDC拒绝开通VPS,然后撕逼半天巴拉巴拉的。
每个人都有每个人的需求,所以破娃才会添加 自定义规则 的选项,让每个人可以按照自己的想法去 定制适合自己使用的代理规则。
判断问题不能用你的主观意向思考其他人的想法,每个人都有每个人的想法。
你自己看一下你的BT/PT下载软件中是否有 代理相关设置,只要不是选择的 [使用系统代理设置] 选项就行。
本地hosts的优先级我没测试过,应该是优于本地hosts文件的,具体自行测试。
同时浏览器还需要安装扩展(SwitchyOmega)辅助,才能实现不同网站使用不同代理服务器。
当然如果几千条规则数量,则没什么影响,但是如果几万条,可能会有轻微的延迟感(就是会多等一会),当然具体的影响程度取决于设备性能。
当你系统代理规则为 全局模式 的时候,所有网站流量请求都会进入SSR客户端,然后SSR客户端通过你设置的 代理规则 来判断进入SSR客户端的数据是 走代理 还是直连。