讨论:支持多个规则来源和/或GeoIP
Opened this issue · 12 comments
实现从多个来源添加规则,并/或支持GeoIP
基于 #2671 (comment) 的进一步考虑
需要解决的内容
- GeoIP数据库解析
- 制定程序本体与PAC间的接口标准
- 一个符合上述标准的PAC
- 实现多规则设定界面
待确定的问题
配置应该以什么格式传递给PAC?IP规则应当采用什么记法?(使用CIDR记法,单独传入,不和GFWList混合)- GFWList似乎没有形成完整的标准?
- 应该支持哪些规则来源?
- GeoIP
- GFWList-base64
- GFWList-纯文本
UI草案
+------------------------------------------+---+---+
| 系统代理设置 | _ | x |
+------------------------------------------+---+---+
| [ ] 关 |
| [ ] 全局 |
| [.] PAC |
| [.] 本机PAC [C:\pac.txt ] |
| [ ] 在线PAC [http://example.com/pac.txt ] |
| [ ] GFWList规则 |
| |
| +------------+------------------------------+ |
| | 类型 | 值 | |
| +------------+----------------------------+-+ |
| | GFWList | http://example.com/gfwlist |*| |
| | 文本规则 | C:\rule.txt |*| |
| | 文本规则 | http://example.com/rule |*| |
| | GeoIP直连 | CN |-| |
| | GeoIP代理 | LAN | | |
| |> | <| | |
| | | | | |
| +------------+----------------------------+-+ |
| [添加] [删除] [复制] [上移] [下移] |
| |
| +-规则设置----------------------------------+ |
| | 类型 [ GeoIP |#] | |
| | 地区 [ RU |#] | |
| +-------------------------------------------+ |
| |
| 默认 [.] 直连 [ ] 代理 |
| 在线规则自动更新 [ 1年 |#] |
| |
+--------------------------------------------------+
GFWList 还有非常非常多的域名没有添加进去,很多小站被墙了,这里面都没有。
所以 ss 要想很好的翻墙,就只能选择全局模式了,但是那样的话,访问国内网站又会变得很慢,唉
程序本体与PAC间的接口标准,草案:
const __PROXY__: string; // proxy provided by shadowsocks-windows
const __RULES__: string[]; // Legacy, GFWList rules
interface CIDRList {
v4: string[], // IPv4 CIDR ordered
v6: string[] // IPv6 CIDR .......
}
const __RULESET_V1__: {
version: 1,
cidr: { // GeoIP
black: CIDRList,
white: CIDRList
},
gfwlist: string[] // GFWList rules
}
先征求意见。
接口标准草案
考虑到GeoIP规则应该可以和GFWList规则混合排序,以及可以有多个GFWList规则,采用以下标准:
declare const __RULES__: string[];
declare const __USERRULES__: string[];
declare const __PROXY__: string;
declare type RuleGroup = CIDRRule | GFWListRule;
interface CIDRRule {
type: 'cidr';
rules: string[];
whitelist: boolean;
}
interface GFWListRule {
type: 'gfwlist';
rules: string[];
}
interface RuleSetV1 {
version: 1;
rules: RuleGroup[];
}
declare const __RULESET_V1__: RuleSetV1;
用GeoIP比PAC好。
用GeoIP比PAC好。
准备全都要
希望shadowsocks-windows、shadowsocks-qt5和shadowsocks-libev可以支持GeoIP,跨平台使用比较方便。
希望shadowsocks-windows、shadowsocks-qt5和shadowsocks-libev可以支持GeoIP,跨平台使用比较方便。
据我所知,shadowsocks-qt5停止开发了,而且它自身并没有负责路由的组件。shadowsocks-libev,包括其他命令行版本似乎也没有路由功能,也谈不上GeoIP。
shadowsocks-windows的路由功能是由系统代理(以及PAC,代理自动配置脚本)实现,换PAC脚本之后可以比较简单地使用GeoIP。
@celeron533 考虑在PACServer.SendResponse()里面先把规则和代理地址一起发送,然后用SendFile发送硬盘上没有包含规则的PAC脚本,这样不用监听PAC脚本的变化,也可以把规则和脚本拆开,方便用户维护。
考虑改用v2ray规则,在代理服务器内进行路由,同时用v2ray的geosite数据库代替gfwlist。换句话说路由部分的设计向v2ray靠拢。
问题:
- 代理服务器需要支持直连和拒绝连接,在这之前需要不少的整理重构
- geosite数据库需要protobuf或者自己重新编译
- 是否需要类似adblock的规则订阅
- 显然我们需要新的窗口,在v4.x还是v5实现,WinForm还是WPF?
If you guys really want to add GeoIP
feature, you should avoid DNS poisoning first or add a feature that allows domains in a specific list to skip the DNS resolution process like V2Ray does.