直接使用 v2xxx 的分流规则即可,比 squid 这种更简单
由于大家都知道的原因,大多数 ISP 的国外带宽往往不太理想,据说这个可以用 kcp 突破,我暂时没有国外带宽的困扰,有兴趣的可以去研究下。这篇博文提供的方法是使用 Squid 进行分流,国内直连,国外走父级代理,配合 polipo 和 ChinaDNS 效果拔群。
由于 Squid 的父级代理暂不支持 socks5, 故还需要配合 polipo 将 socks5 转换为 HTTP proxy 使用。在 Arch 下通过 packer -S squid polipo
即可安装,接下来结合我的配置文件进行分析。
由于 polipo 和 Squid 都具有缓存功能,考虑到 Squid 在用户鉴权上更为强大,作为 HTTP 前端接入比较合适,因此需要禁用 polipo 的缓存功能。
socks5 to HTTP - polipo
polipo 的配置(/etc/polipo/config
)如下:
{% gist id="billryan/718af2a3500bdf93a30e225d1e7dd725”,file="polipo_config” %}{% endgist %}
其中 socksParentProxy = "localhost:8080"
为 socks5 代理,你可以通过 ss 提供。diskCacheRoot = ""
为禁用 polipo 的缓存功能。polipo 默认监听 8123 端口,需要更改的话设定 proxyPort 即可。
Squid
作为可能开放公网接入的 Squid 服务,除了开放局域网内 IP 白名单外还需要对其他 IP 进行鉴权,推荐相对安全一点的 digest http auth
. htdigest 在 apache-tools 中,使用 packer -S apache-tools
安装。按照 Squid 上的操作来就好。我的配置文件如下:
{% gist id="billryan/718af2a3500bdf93a30e225d1e7dd725”,file="squid.conf” %}{% endgist %}
- https://gist.github.com/billryan/718af2a3500bdf93a30e225d1e7dd725#file-squid-conf-L51 利用了 polipo 父级代理
- https://gist.github.com/billryan/718af2a3500bdf93a30e225d1e7dd725#file-squid-conf-L54 利用了 ChinaDNS 提供的中国大陆的 IPv4 信息,这里是分流的关键!
- https://gist.github.com/billryan/718af2a3500bdf93a30e225d1e7dd725#file-squid-conf-L60 可以配合 nghttpx 使用,以使得 Squid 在作为二级代理时能正确获知客户端 IP 进行鉴权
- https://gist.github.com/billryan/718af2a3500bdf93a30e225d1e7dd725#file-squid-conf-L63 禁用 via, 防止 polipo 504 proxy loop
- https://gist.github.com/billryan/718af2a3500bdf93a30e225d1e7dd725#file-squid-conf-L72 为需认证用户的信息,需要自行更改
- https://gist.github.com/billryan/718af2a3500bdf93a30e225d1e7dd725#file-squid-conf-L92 对于缓存另起一进程处理,避免阻塞
最后设置开机启动,大功告成,Squid 默认开放 3128 端口,局域网内可设置 HTTP 代理为此测试。