分享自用代理工具 - glider

2017-07-13 22:31:47 +08:00
 nadoo

一直是在 linux 软路由上做透明代理使用,最近整理了一下,放在 github 上,分享给大家,或许有人用得着.

之前看到 v2 有人找以下几类工具,用 glider 可以轻松实现:

socks5 转 http
glider -l http://:8080 -f socks5://127.0.0.1:1080 -v
dns: udp 转 tcp
glider -l dnstun://:53=114.114.114.114:53 -v

这样可以在本地生成一个 dns 服务,可以 nslookup www.baidu.com 127.0.0.1 测试

glider -l dnstun://:53=8.8.8.8:53 -f ss://method:pass@server1:port1 -v

当然,一般是为了在国外解析,只要加上-f 参数,指定转发代理,就会通过转发代理去请求 8.8.8.8,作用你懂的...我一般用来配合 dnsmasq

同一个端口提供 http 和 socks5 代理服务
glider -l :8443 -f ss://method:pass@server1:port1 -v

如果需要就可以加上-f 参数转发到远端服务器

多个远端服务器,代理链(一个-f,逗号,分隔)
glider  -l redir://:1081 -l dnstun://:53=8.8.8.8:53 -f ss://method:pass@server1:port1,ss://method:pass@server2:port2

这样可以先通过 server1 做跳板,再连接 server2 进行转发

多个远端服务器,轮叫或高可用模式
glider  -l :8443 -f ss://method:pass@server1:port1 -f ss://method:pass@server2:port2 -s rr
glider  -l :8443 -f ss://method:pass@server1:port1 -f ss://method:pass@server2:port2 -s ha

项目地址

能力有限,代码水平也不高,期待大家指正...

9090 次点击
所在节点    分享发现
57 条回复
Showfom
2017-07-13 23:44:46 +08:00
支持一下
coolcfan
2017-07-14 00:54:11 +08:00
点进来就猜是用 go 写的,打开 github 果然是用 go 写的……
我都不知道怎么猜的……
nadoo
2017-07-14 01:07:27 +08:00
@coolcfan go 比较适合做这方面
xx998
2017-07-14 01:08:29 +08:00
mark ~
支持一下,或许以后会用到。
ashfinal
2017-07-14 01:56:08 +08:00
支持一下
ericFork
2017-07-14 02:53:38 +08:00
https://github.com/ginuerzh/gost

...是致敬,还是重复造轮?
nadoo
2017-07-14 03:11:30 +08:00
@ericFork 目的有所不同,我找了不少程序,包括 ghost,但都不满足需求。我只是为了自己上网,所以有 dns 之类的功能,多个远程代理支持轮叫或备用方式(因为买的 ss 服务有十几个服务器可选),另外代码也简单了不少,顺便是学习程序和协议了。
nadoo
2017-07-14 03:14:40 +08:00
中间参考了 gost、go-shadowsocks2 部分代码,明天我把它们加入 readme
v1024
2017-07-14 08:14:20 +08:00
你不说自己写的我还以为是 gost 改名了
kmahyyg
2017-07-14 09:10:10 +08:00
有 ssr 支持吗?
wwqgtxx
2017-07-14 10:09:18 +08:00
其实我倒是希望有个纯 UDP 的 haproxy,这样就可以方便的在路由上配置多服务器了
顺便问一下,你的 glider 支持 socks5 udp 模式么
evlos
2017-07-14 10:24:39 +08:00
赞,以后应该开发时会用到
SoulGem
2017-07-14 10:33:44 +08:00
支持
nieyujiang
2017-07-14 10:43:26 +08:00
随手就是一个 Star
nadoo
2017-07-14 10:57:29 +08:00
@v1024 其实就只参考了 gost 的命令行参数方式,它代码有点复杂,懒得看.... -l 监听,-f 转发,感觉比给每种协议一个参数简单不少
nadoo
2017-07-14 11:06:29 +08:00
@wwqgtxx 我正好相反,我是尽量只用 tcp,因为之前买的 ss 服务感觉 udp 经常断流,所以我专门加了个 dnstun,把 udp 的 dns 请求转到 tcp 里面发出去,好走 ss 的 tcp 通道在远程解析。

我也是找了一些 dns udp 转 tcp 的代码,发现都对 dns 协议做了解析,或者利用了第三方完整的 dns 库,加上后程序要大好几兆。看了下 dns 的 rfc,发现 udp 和 tcp 的 dns 只是有几个字节不同,所以干脆自己写转换,见 dnstun.go

类似的还有 http 代理,http 协议看起来简单,要做一个完善的代理真是有些复杂,我开始试过直接使用 net/http,或者第三方的 goproxy,但加进来后程序起码大了 3M,所以还是自己实现了简单的 http 代理,绕过了一些问题,但估计还是有 bug,对我来说,应急够了,也顺便学习了下代理的工作方式...

我先看看大家需要 udp 模式的多不多...
nadoo
2017-07-14 11:32:47 +08:00
@kmahyyg 采用的 go 的那个包,似乎不支持.
nadoo
2017-07-14 11:33:23 +08:00
@nieyujiang 谢谢!
wwqgtxx
2017-07-14 11:42:18 +08:00
@nadoo 其实我也是不理解为什么原版的 SS 协议中的 UDP 转发部分一定要单独走 UDP 通道,这样很容易被干扰,直接放在 TCP 中封装一下,然后在服务器端解封不是很好么?
我这里用多服务 SS 倒是有另一个需求就是如下图:
........................................................|-->虚拟机 2 的 ss-server->校园网->|
主机 ss-tap->虚拟机 2 的 haproxy--|....................................................... |->校园网出口网关->互联网
........................................................|->虚拟机 1 的 ss-server->校园网-> |
这样实现校园网的网速叠加,由于校园网需要登录验证,所以这个地方没办法用 openwrt/lede 的多 WAN 口叠加功能
我上网找了一圈也没找到几个好用的支持 UDP 转发的 socks5 服务器程序(就算支持,经过 haproxy 反代之后基本上就瘫掉了),所以只好用 SS 协议了。这里 SS 协议中的 udp 代理部分又成了一个麻烦事,haproxy 不支持 UDP 反代,找遍了 github 也没找到能支持均衡代理 udp 的好用的程序,所以最后只能单独开了一个 ss-server 专门跑 udp,这样虽然 udp 无法实现网速叠加,起码能用了。而直接用 haproxy 往后端 SS-SERVER 好处是可以充分叠加网速,缺点是用 round-banlace 模式会导致 ss-server 反复报 replace IV 的错误,所以不管怎么实现都是个蛋疼的事,找不到什么好用的办法
latelan
2017-07-14 14:53:03 +08:00
学习了

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

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

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

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

© 2021 V2EX