分享自用代理工具 - glider - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nadoo
V2EX    分享发现

分享自用代理工具 - glider

  •  4
     
  •   nadoo 2017 年 7 月 13 日 11045 次点击
    这是一个创建于 3107 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一直是在 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 

    项目地址

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

    58 条回复    2025-11-24 11:37:35 +08:00
    Showfom
        1
    Showfom  
    PRO
       2017 年 7 月 13 日 via iPhone
    支持一下
    coolcfan
        2
    coolcfan  
       2017 年 7 月 14 日
    点进来就猜是用 go 写的,打开 github 果然是用 go 写的……
    我都不知道怎么猜的……
    nadoo
        3
    nadoo  
    OP
       2017 年 7 月 14 日 via iPhone
    @coolcfan go 比较适合做这方面
    xx998
        4
    xx998  
       2017 年 7 月 14 日 via Android
    mark ~
    支持一下,或许以后会用到。
    ashfinal
        5
    ashfinal  
       2017 年 7 月 14 日
    支持一下
    ericFork
        6
    ericFork  
       2017 年 7 月 14 日
    https://github.com/ginuerzh/gost

    ...是致敬,还是重复造轮?
    nadoo
        7
    nadoo  
    OP
       2017 年 7 月 14 日 via iPhone   1
    @ericFork 目的有所不同,我找了不少程序,包括 ghost,但都不满足需求。我只是为了自己上网,所以有 dns 之类的功能,多个远程代理支持轮叫或备用方式(因为买的 ss 服务有十几个服务器可选),另外代码也简单了不少,顺便是学习程序和协议了。
    nadoo
        8
    nadoo  
    OP
       2017 年 7 月 14 日 via iPhone
    中间参考了 gost、go-shadowsocks2 部分代码,明天我把它们加入 readme
    v1024
        9
    v1024  
       2017 年 7 月 14 日 via iPhone
    你不说自己写的我还以为是 gost 改名了
    kmahyyg
        10
    kmahyyg  
       2017 年 7 月 14 日 via Android
    有 ssr 支持吗?
    wwqgtxx
        11
    wwqgtxx  
       2017 年 7 月 14 日
    其实我倒是希望有个纯 UDP 的 haproxy,这样就可以方便的在路由上配置多服务器了
    顺便问一下,你的 glider 支持 socks5 udp 模式么
    evlos
        12
    evlos  
       2017 年 7 月 14 日 via iPhone
    赞,以后应该开发时会用到
    SoulGem
        13
    SoulGem  
       2017 年 7 月 14 日
    支持
    ZeoKarl
        14
    ZeoKarl  
       2017 年 7 月 14 日
    随手就是一个 Star
    nadoo
        15
    nadoo  
    OP
       2017 年 7 月 14 日 via iPhone
    @v1024 其实就只参考了 gost 的命令行参数方式,它代码有点复杂,懒得看.... -l 监听,-f 转发,感觉比给每种协议一个参数简单不少
    nadoo
        16
    nadoo  
    OP
       2017 年 7 月 14 日 via iPhone
    @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
        17
    nadoo  
    OP
       2017 年 7 月 14 日
    @kmahyyg 采用的 go 的那个包,似乎不支持.
    nadoo
        18
    nadoo  
    OP
       2017 年 7 月 14 日
    @nieyujiang 谢谢!
    wwqgtxx
        19
    wwqgtxx  
       2017 年 7 月 14 日
    @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
        20
    latelan  
       2017 年 7 月 14 日
    学习了
    ckzx
        21
    ckzx  
       2017 年 7 月 14 日
    这个 https 是同理加吗?
    nadoo
        22
    nadoo  
    OP
       2017 年 7 月 14 日
    @ckzx glider 支持的是 http 代理,支持普通 http 和 http connect 方式,connect 方式就可以支持在上面跑 https.
    nadoo
        23
    nadoo  
    OP
       2017 年 7 月 14 日
    @wwqgtxx 我有空研究下 udp over tcp 的支持
    designer
        24
    designer  
       2017 年 7 月 14 日 via iPhone
    资持!
    nadoo
        25
    nadoo  
    OP
       2017 年 7 月 14 日
    @wwqgtxx 可以问下你主要是什么应用要用到 udp 协议呢?我感觉我的场景里面,tcp 能够解决一切问题。。。
    wwqgtxx
        26
    wwqgtxx  
       2017 年 7 月 14 日 via iPhone
    @nadoo 其实作为我自己写的程序,也是 tcp 就够了,但是实际上还是有很多程序需要用 udp 比如 dns/ntp/quic/skype 之类的,以及各种网络游戏,在这个情况下如果不支持 udp 代理就很蛋疼了
    nadoo
        27
    nadoo  
    OP
       2017 年 7 月 14 日
    @wwqgtxx dns 我会用到,因为 dnsmasq 配合 gfwlist,上级代理只支持 udp 的,所以我简单加了个 dnstun 的解决方案。
    其它的我暂时没用到,我考虑一下,这是学习的好机会。-_-!
    nadoo
        28
    nadoo  
    OP
       2017 年 7 月 15 日
    0.1.1 版本,修复了几个重要 bug:
    - 代理周期性检查造成打开文件过多(defer 放在 for 循环里面的低级错误)
    - 多代理高可用模式不生效

    https://github.com/nadoo/glider/releases
    nadoo
        29
    nadoo  
    OP
       2017 年 7 月 18 日
    v0.2.0,添加了简单配置文件的支持:
    https://github.com/nadoo/glider/releases

    基础的可以了,后面可以安心增加功能了
    niuoh
        30
    niuoh  
       2017 年 7 月 19 日
    分享一个好用的 http 代理 ip-chi.net
    felixonmars
        31
    felixonmars  
       2017 年 7 月 21 日
    nadoo
        32
    nadoo  
    OP
       2017 年 7 月 21 日
    @felixonmars 感谢!你在用 glider 吗? 因为 github issue 里有人提出需要配置文件的功能,就在 v0.2.0 加上了,很简单地利用了 go 标准的 flag 包,把配置文件的内容当成命令行参数来解析,这样基本不增加额外依赖,可执行文件大小基本不受影响。可惜 go 的标准包不支持参数的简写,所以顶楼里面的-l、-f 之类的参数,都改成全称-listen, -forward 了,用的时候要注意。
    felixonmars
        33
    felixonmars  
       2017 年 7 月 21 日
    @nadoo 嗯,我在用,已经都在用全称了 :P
    nadoo
        34
    nadoo  
    OP
       2017 年 7 月 21 日
    @felixonmars 因为没试过给发行版打包,如果需要标准化一些东西,例如默认配置文件放在 /etc/glider.conf 之类的,可以指出,我配合修改;
    felixonmars
        35
    felixonmars  
       2017 年 7 月 21 日
    @nadoo 可以给一个标准的 glider.conf.example 我来装 :P 不过我现在是用了 /etc/glider 这个目录来做多配置……
    nadoo
        36
    nadoo  
    OP
       2017 年 7 月 22 日
    @felixonmars 嗯,我看到你打包的文件了,比我的专业多了. :P
    nadoo
        37
    nadoo  
    OP
       2017 年 7 月 22 日
    原本想要把 glider 做成特定针对国内上网环境的工具,集成 gfwlist 更新、策略 dns 转发、策略代理转发、ipset 自动维护、iptables 自动维护等功能,这样在 linux 网关上就可以不依赖 dnsmasq 了.

    现在这种形势,可能还是保持 glider 简单、通用更好一些,后面的功能计划还需要慎重考虑;
    nadoo
        38
    nadoo  
    OP
       2017 年 7 月 30 日
    更新 0.3 版本,支持根据目的地设置代理策略(rulefile):
    https://github.com/nadoo/glider/releases

    配置文件样例:
    https://github.com/nadoo/glider/tree/master/examples
    nadoo
        39
    nadoo  
    OP
       2017 年 7 月 30 日
    @felixonmars 我之前发布的 0.3 binary 有点问题,透明代理(redir)无法正常工作,另外 examples 文件夹下的部分配置文件有小 bug,想着没有什么人看到,重新上传了二进制文件。 刚点了一下,没想到 archlinux 的仓库已经更新了,可能需要再次替换更新一下,给你添麻烦了。 谢谢!
    nadoo
        40
    nadoo  
    OP
       2017 年 7 月 30 日
    @felixonmars 不对,还是看错了,你是昨天更新的 0.2.1,嗯,那个版本没有什么明显 bug.
    felixonmars
        41
    felixonmars  
       2017 年 7 月 31 日
    我是用代码直接编译的,没有用直接提供的 binary 哈,0.3 版本是重新 tag 了还是只是重新编译了?
    nadoo
        42
    nadoo  
    OP
       2017 年 7 月 31 日
    @felixonmars 重发 binary 的时候重新 tag 过,目前 github 上那个 tag 和 binary 都是对的.
    felixonmars
        43
    felixonmars  
       2017 年 7 月 31 日
    好的,那我打的应该是修正后的 :)
    nadoo
        44
    nadoo  
    OP
       2017 年 8 月 23 日
    发一个编译好的开发中的版本,添加了一个"list"。

    打开 rule 文件,在 forward 行加入你的代理服务器信息并取消行首注释(删除#),然后可以在浏览器中把 ip:8443 作为全局代理, 实现默认直连,list 中的网站使用上级代理;(类似浏览器 pac 的能力,在 glider 中实现了)
    https://github.com/nadoo/glider/files/1245821/glider-0.4alpha.zip

    有兴趣的同学可以先试一下
    Tink
        46
    Tink  
    PRO
       2018 年 4 月 19 日
    我想问下楼主这个和 gost 在性能上优势大否?
    defunct9
        48
    defunct9  
       2018 年 5 月 8 日
    @nadoo 请教楼主
    我有两个 dns server , 一个带 AD 过滤,一个不带。
    所以想架一个服务器,根据 client 来源 ip 不同来分发到后端不同的 DNS server
    仔细看了半天文档,理论应该可以实现。

    但是怎么配置呢?
    yuchenr
        50
    yuchenr  
       2018 年 7 月 11 日
    我来挖个坟。
    简单食用了下,负载均衡对比 gost 多了 ha,并且支持 AEAD 算法。
    另外是否支持 simple-obfs ?
    johnkiller
        53
    johnkiller  
       2019 年 1 月 8 日
    太良心了,正好找到这里,比 gost 好用,感谢作者,也感谢 gost 作者!
    johnkiller
        54
    johnkiller  
       2019 年 3 月 14 日
    作者你好,我用 glider 有好几个月了 ,发现一个现象,就是随着流量请求的增大,glider 占用内存几乎是 200-400m 的样子了,而且似乎不会被释放掉。。。但是 github 同类开源软件 goproxy 内存占用几乎稳定在 30m 一下(流量很大也是),但是功能不如 glider 强大,现在已经离不开 glider 了,如果可以希望作者能优化一下(感激

    题外话:
    我发现用 sstap 连接 glider 的代理 udp 端口一直都是我设置的端口。
    类似:
    >> 服务器绑定在 172.16.*.*:1080.
    johnkiller
        55
    johnkiller  
       2019 年 3 月 14 日
    @johnkiller 一下点了回复了,继续上一楼
    用 goproxy 代理的时候每次连接 udp 端口都是随机的,而不是固定我给的 1080,会不会是这个原因
    >> 服务器绑定在 172.16.*.*:62961.
    foxconndmd
        57
    foxconndmd  
       2021 年 3 月 12 日
    支持远程转发吗?即可通过代理链将本地端口映射到远程服务器上。
    funnypc
        58
    funnypc  
       2025 年 11 月 24 日
    @nadoo 烦请指导一下

    8442:local <- udp2raw -> remote:8443 ,udp2raw 承载 wireguard 正常

    想让此链路以 socks5 监听承载数据,发现无论是 gost 还是 glider 都无法建立稳定连接
    下面的方式都不行,或者 curl 提示错误,或者开始传输后中断
    curl: (18) transfer closed with outstanding read data remaining
    curl: (28) SSL connection timeout


    使用 gost:
    /usr/local/bin/gost -L socks5://:1052?udp=true -F socks5://127.0.0.1:8442?udp=true
    /usr/local/bin/gost -L socks5://:8443?udp=true


    /usr/local/bin/gost -L socks5://:1052?udp=true -F kcp://127.0.0.1:8442?c=/etc/gost/kcp.json
    /usr/local/bin/gost -L socks5://:8443?udp=true

    kcp.json 中 mtu=1200

    使用 glider
    glider -listen socks5://:1052 -forward socks5://127.0.0.1:8442
    glider -listen socks5://:8443

    glider -listen "kcp://:8443?crypt=none&mtu=1200"
    glider -listen socks5://:1052 -forward "kcp://127.0.0.1:8442?crypt=none&mtu=1200"

    glider -listen smux://:8443
    glider -listen socks5://:1052 -forward smux://127.0.0.1:8442
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4092 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 05:20 PVG 13:20 LAX 21:20 JFK 00:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86