撸了个转换 socks 代理的小工具,有点点像 proxifier, proxycap 的小工具,让不支持的代理可以使用代理访问网络。

2014-12-20 16:15:15 +08:00
 pagxir
原理是这样:
多数软件都会执行域名解析。在系统执行域名解析时,悄悄的将解释出的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
9746 次点击
所在节点    分享创造
21 条回复
gv0900
2014-12-20 16:44:02 +08:00
我是小白来学习了
ifwangs
2014-12-20 16:50:40 +08:00
学习下
LazyZhu
2014-12-20 16:55:26 +08:00
协议没有哦
tony1016
2014-12-22 10:26:32 +08:00
不错,继续努力
mwylaoma
2015-04-02 10:40:55 +08:00
能否编译一下给我?我这边没有编译的环境
pagxir
2015-04-02 12:15:23 +08:00
mwylaoma
2015-04-02 13:13:50 +08:00
@pagxir 谢谢
mwylaoma
2015-04-02 13:33:38 +08:00
@pagxir 我这边会提示出错,
domain go.baidu.com 2d00007f
domain li.baidu.com 2e00007f
translate blacklist
antigfw: 6060808 20
nameserver: 127.0.0.1:53 210.21.196.6:53
nsttl not supported yet!
relay server socks5://127.0.0.1:1080

password (
user 'u
get target address failure!
dynamic-range: 127.0.0.1 127.255.255.255
bind tcp port failure: port=80
Assertion failed: err == 0, file txrelay.cpp, line 1053

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
pagxir
2015-04-02 13:43:31 +08:00
80端口被占用,或者需要系统管理员身份才能绑定这个端口。你是什么系统的?
LazyZhu
2015-04-15 13:19:19 +08:00
@pagxir 监听端口可否改成自定义?
pagxir
2015-04-15 13:25:33 +08:00
@LazyZhu 修改这个文件 dnstxrelay.conf 就可以了,增加删除端口都可以。如果不是给浏览器用的话,直接把里面的 80 / 443 端口删除。
LazyZhu
2015-04-15 13:28:31 +08:00
@pagxir 不看源码的话,配置文件完全看不懂。
pagxir
2015-04-15 13:30:00 +08:00
并且由两个特殊的后缀 .int 和 .ext
.int 是域名强转换操作, 比如www.163.com.int 将 返回 转换后 www.163.com 的地址,访问www.163.com.int 就相当于通过 代理连接 www.163.com, 同理 8.8.8.8.int会自动通过代理链接到 8.8.8.8

.ext 则会直接返回没有转换的地址,而直接忽略配置文件。比如 www.google.com.ext 会返回google的没经过代理的地址。
pagxir
2015-04-15 13:31:54 +08:00
@LazyZhu
删掉配置文件众的这两行:

listen 80 dynamic ns-ttl 60
listen 443 dynamic ns-ttl 60
LazyZhu
2015-04-15 23:58:15 +08:00
LazyZhu
2015-04-16 00:09:22 +08:00
@pagxir
匹配到的fakedn是否是通过代理进行DNS查询的?
pagxir
2015-04-16 10:15:23 +08:00
@LazyZhu 不是的,是直接配置文件加载的。只有fakeip才是通过DNS查询返回的结果。

openwrt可以修改一下:
dynamic-range 127.0.0.12 127.255.255.255

dynamic-range 100.61.0.12 100.61.255.255

同时增加回环IP,执行命令:
ip addr add 100.61.0.1/10 dev lo scope global

同时你可以用iptables把端口转发一下。
pagxir
2015-04-16 10:33:42 +08:00
@LazyZhu 已经增加了个类似的功能,但是不依赖与fakeip.
LazyZhu
2015-04-16 15:02:44 +08:00
@pagxir
无法理解你的回复,参数的作用能不能写个使用说明?
pagxir
2015-04-16 16:01:38 +08:00
默认的配置文件中,所有被转换的域名生成的地址都是127.0.x.x (范围在dynamic-range 127.0.0.12 127.255.255.255 中)。所以,当这个程序运行在openwrt中当作dns中继的时候,其他设备将这个openwrt当作路由器时,进行域名解析时候收到的被转换的域名是127.0.x.x, 会被设备当作是本地回环地址,而无法路由出去。

而修改成 dynamic-range 100.61.0.12 100.61.255.255, 设备就会自然的将发包给openwrt进路由。

这一行的功能是:
ip addr add 100.61.0.1/10 dev lo scope global
将这个网段的捕获给回环设备,从而交给txrelay处理,这样txrelay就可以成功的将域名的访问透明的转换为socks5的代理方法连接。

之所以用iptables的原因是因为可能默认的80/443端口可能被其他进程用到,所以可以把
100.61.0.1/10 的这个网段的80/443转发成其他端口,让rxrelay在其他端口上监听。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/155329

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX