我发现我的电脑上,大多数流量都是 http/https 流量,对于不使用 http/https 协议的软件,基本都能在客户端设置里面代理地址,比如邮件客户端、BT 类下载工具都有提供一个设置代理的选项,因此这一类软件根据自己需要配置即可。
日常办公中,需要代理的情况原因主要有两个,一个是请求地址被墙的必须用到代理,另外一个是请求的地址没有被墙,但是下载速度奇慢无比需要代理服务器加速,主要是各种包管理器用到的软件源。其他理由可能包括匿名性的需求,这个对我而言不是要紧。
网上有很多成熟的客户端,但是考虑到如果一个软件的配置文件行数多到足够我重新写一个新的小工具,为什么不自己写一个呢,当然使用 Go 编写的。
事实上,我没花多少时间就写了一个 Go 版本的 demo ,使用 nftable 配置转发所有 80/443 端口的流量到指定端口,然后分析请求,对于 http 是明文请求获取 Host 字段就是主机名,https 请求自己解析扩展信息 SNI 也可以获取到主机名。
后来觉得 Go 占用资源而且我又开始学习 Rust 了,就用 Rust 重新编写了这个程序,算是我的第一个 Rust 作品。因为电脑上的所有网页请求都需要经过这个程序,所以在各种方方面面我都想着能简单就简单,用最少的资源完成我需求。
分流策略比较简单,基于哈希表将每个主机名分割成不同的部分,比如 example.com 这个域名会以com ⇒ example ⇒ null
这种格式存储,对于域名下面的所有子域名也都会命中策略。
因为是自用的工具,维护一套完整的代理列表不太现实,所以就网络上找了个网址列表,自己转换一下导入进去。不过分流策略的准确性直接影响到上网冲浪的体验,写死的分流策略不怎么好用,我都是遇到网络错误,然后现场把主机名添加进去,在切换回工作现场,再试一次。
简单说就是我创建了一个命名管道,然后每次遇到需要临时代理的主机名,就打开终端:
echo "example.com" > /named-pipe-path
目前我这个程序已经用来有一年多了,基本满足日常工作过程中特殊的网络需求,近半年来没有出现过任何崩溃的情况。
具体的用法的介绍可以查看项目 README.md。
同时我目前在深圳寻找一份工作,欢迎大佬点评简历:/t/933572
1
molezznet 2023-04-18 22:51:49 +08:00 1
“维护一套完整的代理列表不太现实,所以就网络上找了个网址列表,自己转换一下导入进去。” 嗯 这个能直接读取一个 onling 的 list 不, 这样多终端方便些 hahahaha
|
2
SenLief 2023-04-19 07:24:24 +08:00 via iPhone
这不就是 clash 这类 dns 分流策略吗? dns 污染主要是 ip 吧,你这好像没解决这个问题啊。如果是域名解析,那就简单多了。
|
3
bigtan 2023-04-19 08:09:14 +08:00
我用的另外一套方案 完全按照 IP 来分流. ss-rust 的 acl 默认全部走代理,用 17mon 的国内 ip 段走直连.缺点是 ipv6 不好搞.
|
4
star7th 2023-04-19 10:16:42 +08:00
看了 N 久才明白标题怎么回事,设置个 http 代理跟 dns 污染有什么关系。原来就只是简单的域名在服务端解析。
建议好好练习表达能力 |
5
tswc 2023-04-21 18:53:51 +08:00
star 表示支持
|
6
FrankAdler 2023-04-22 23:52:26 +08:00
v2ray 、xray 、sing-box 、clash 等一大堆已有的东西都能达到这类效果啊,配合 geosite 、geoip 、自定义规则,为什么要重复造轮子呢
|
7
l619534951 2023-10-28 14:03:48 +08:00
其实 sing-box 和 clash 都很好用,配置文件没几行,支持全系统
|