原理是这样:
多数软件都会执行域名解析。在系统执行域名解析时,悄悄的将解释出的IP替换掉(通常替换成 127.0.x.x的一个本地回环IP)。那么,软件直接接的就不是目标IP, 而是替换后的IP,该IP被替换之后,会自动把域名还原回来,并通过socks代理真正的连接到目标真正IP地址。这样,只需要软件执行域名解析,就会被默默的通过代理链接服务器,从而把不支持服务器变成支持。
从上面的原理,看到,这个方法缺点很明显,就是如果软件没有使用域名,而是使用IP(跳过域名解析这一步骤)直接连接。
实现的代码见这里:
https://github.com/pagxir/libtx 代码可以在FreeBSD/linux/win32上执行,但是只有linux/win32下,功能能正常使用。
编译很简单, 不需要依赖于额外的库,直接 checkout 执行 make即可,如果需要编译win32的版本,可以在linux 环境下安装 mingw32 来进行交叉编译,执行 checkbuild.sh就可以。
编译完成之后,生成 txrelay.exe (win32执行文件), txrelay (linux执行文件)。
默认的配置文件: dnstxrelay.conf,
1、将里面的 translate white-list 替换为 translate black-list
2、将里面的 nameserver 127.0.0.1:53 172.24.63.162:53 替换成 nameserver 127.0.0.1:53 <your-real-dns-server-ip>:53, 然后把你电脑的主dns设置为 127.0.0.1。
3、修改 relay socks5://127.0.0.1:8080 这一行设置为你的代理的IP地址和端口(不要写域名), 如果是你代理服务器是 https类型 则将 socks5 替换为https,如果socks4则以此类推。目前不支持代理认证。配置文件仅作参考。
修改完成之后, 执行txrelay -f dnstxrelay.conf, 软件就会自动侦听80/443端口,如果你的代理服务器能访问youtube的话,这个时候,你IE浏览器设置成步需要代理应该可以访问youtube的了。
你可以可以试试 nslookup
www.facebook.com, 如果解析出来的IP地址是127.0.0.x 说明dns开始正常工作的了。
注意linux下因为需要绑定tcp/80 tcp/443 udp/53端,所以需要root权限。
如果有更新,请看这里:
http://www.shifenwa.com/archives/16
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/155329
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.