在穿墙时让 Chrome 的 DNS 查询也走 socks5 代理
作者:郑凯
先说结果,就是如果用的 PAC,把所有 SOCKS
替换成 SOCKS5
就可以了,例如下面这个 pac 让所有访问都走代理
function FindProxyForURL() {
return "SOCKS5 127.0.0.1:7777";
}
再细说下自己的穿墙过程,一开始是 HTTP proxy 和 Tor 很简单的穿,自从知道了 PAC & SSH 的组合后逐渐开始走火入魔——特别是在会用 autossh 自动重接之后。
到现在,我的 rc.local
里会在 Ubuntu 虚拟机启动后,连上所有我常用的远程主机,其中有若干台还额外带着 -L
或 -R
参数。SSH 是用来防范所有监听,而不仅仅是 GFW 的,我认为所有 phpMyAdmin 之类的 web 管理工具(包括我的这个新版 blog 的后台)都应该是仅限 127.0.0.1
来访问,这应该比没有 SSL 的 Cookie 要安全得多,你不用担心办公室局域网或者机房的网管出于私人爱好而嗅探到什么。
PAC 文件本身也是个非常美妙的东西,用 JS 脚本做配置文件实在太舒服了,因为 JS 的语言规范超越了所有软件和时间的限制。还有就是就像 Livid 说的
FoxyProxy 很强大,但是有一些问题很麻烦: FoxyProxy 的配置貌似没办法在多台机器之间转移,太多的鼠标操作(这或许不算是个问题, 但是如果能够通过编辑一个文件来实现同样的功能的话会好很多,因为纯文本文件很容易被编辑和复制,并且也很容易放进版本控制系统)。
对于 DNS 走代理的问题,FireFox 的 about:config 有 network.proxy.socks_remote_dns 参数,但 Chrome 下一直没找到什么好的方法,后来想到在 Ubuntu 里再装个 Privoxy,但偏偏 Privoxy 在处理 chunk 的时候有 BUG,而 Chrome 又说 SOCKS5 DNS 的问题已经被 fixed,最终在一篇帖子的回复里注意到那个关键的 5
字