月下博客

一个由Go语言编写的轻量化代理工具 —— DAZE 服务端手动教程

本文最后更新于 2018年10月21日 17:12 可能会因为没有更新而失效。如已失效或需要修正,请留言!

最近又有一个逗友跟我推荐了个新的代理软件,研究了下感觉挺不错的,开发周期还不到一年,和该作者交流一番后,就打算写个教程推荐给大家了。

或许该代理软件在某些方面还比不上现有主流的成熟代理软件,但是对于 GFW 来说,DAZE 的一切都是陌生的,在 DAZE 没有发展普及开来之前,GFW是不会针对的。这些年我一直在挖掘新秀代理软件,让大家四处开花,用的代理软件各不相同,增加 GFW 的精准封锁成本。事实证明还是有点用的。


另外,我发现 Go 语言似乎成为了代理界的新秀语言,最近几年我发现的大部分代理软件都是 Go 语言编写的,看来 Gol 语言在跨平台支持方面、网络技术方面还是很占优势的,不过 GUI客户端是一个大缺点,往往需要用其他语言制作。


该文章写的是 DAZE 的服务端手动搭建教程。

DAZE Windows 客户端手动教程:DAZE 轻量化代理软件 —— Windows 客户端简单使用教程

DAZE 一键脚本:『原创』Go语言轻量化 代理工具 —— DAZE 一键安装管理脚本


其他 DAZE 教程请看:https://doub.io/tag/daze/

简单介绍

DAZE 是一个由 Go 语言编写的轻量化代理工具。即支持普通方式传输(协议+加密),也支持 HTTP 混淆方式传输(协议+加密+混淆),同时客户端还支持流量过滤模式(类似于SSR的代理规则)。

目前,DAZE 只有各平台命令行客户端,稍后我可能会写个服务端一键脚本 及 DAZE Tools 辅助客户端

项目地址:https://github.com/mohanson/daze

下载安装

点击展开 查看更多

首先建立并进入文件夹:

mkdir /usr/local/daze && cd /usr/local/daze

然后获取最新的版本号:

new_ver=$(wget --no-check-certificate -qO- -t1 -T3 https://api.github.com/repos/mohanson/daze/releases| grep "tag_name"| head -n 1| awk -F ":" '{print $2}'| sed 's//"//g;s/,//g;s/ //g') && echo ${new_ver}

执行完后会显示获取的最新版本号,比如 2018.10.15 这样的格式,如果返回是空或者其他错误的内容,那么就代表获取失败。如果获取失败,请去 Github 获取最新的版本号,例如 2018.10.15 ,然后执行 new_ver=2018.10.15 (自己替换版本号) 即可继续下面的步骤。

if [[ $(uname -m) == "x86_64" ]]; then bit='amd64';else bit='386';fi && [[ ! -z ${bit} ]] && wget -N --no-check-certificate "https://github.com/mohanson/daze/releases/download/${new_ver}/daze_linux_${bit}"
# 自动判断系统位数并下载服务端

mv "daze_linux_${bit}" daze
# 重命名服务端

chmod +x daze
# 赋予服务端执行权限

参数介绍

点击展开 查看更多

  -dns string
    	 (default "8.8.8.8:53")
# -dns 服务端解析域名用的DNS,默认:8.8.8.8:53
# 示例:-dns "8.8.8.8:53"

  -e string
    	engine {ashe, asheshadow} (default "ashe")
# -e 服务端加密方式,用于定义是否使用 HTTP 混淆,默认:ashe
# ashe 代表仅加密,asheshadow 代表加密+HTTP混淆,默认:ashe
# asheshadow 需要搭配 -m 参数使用。
# 当你使用 ashe 加密时,在外界看来你是 TCP流量访问国外服务器,当你使用 asheshadow 加密时,在外界看来你是 HTTP流量访问国外服务器。
# 因为作者把加密方式和混淆方式都写到一个参数了,我也不知道到底该叫这个参数什么名字。。。
# 示例:-e "ashe"

  -k string
    	cipher (default "daze")
# -k 服务端密码,默认:daze(不建议默认)
# 示例:-k "doubi233"

  -l string
    	listen address (default "0.0.0.0:51958")
# -l 服务端监听地址:端口,默认:0.0.0.0:51958
# 0.0.0.0 代表监听网卡上绑定的所有 IPv4+IPv6 地址(我没测试过是否支持 IPv6)。
# 51958 代表监听端口,也就是客户端要填写的代理端口。
# 示例:-l "0.0.0.0:80"

  -m string
    	 (default "http://httpbin.org")
# -m 服务端混淆地址,默认:http://httpbin.org
# 混淆地址必须是 http:// 的,说是混淆,实际上就是个 HTTP 反向代理。
# 只有当加密为 asheshadow 时,此参数才有效。
# 如果你客户端服务器地址写的是 IP,那么在外界看来你就是在访问 http://ip:端口
# 如果你客户端服务器地址写的是 域名(A记录指向服务器IP),那么在外界看来你就是在访问 http://域名:端口
# 示例:-m "http://kernel.ubuntu.com/~kernel-ppa/mainline/"

启动参数示例

对于老手来说,看了上面的启动参数介绍,就基本知道怎么用了,但是对于新手来说,还需要用示例指导一下。

普通方式启动示例

点击展开 查看更多

当你要使用普通方式时,即加密方式:ashe (仅加密,不混淆),那么启动命令如下:

nohup ./daze server -l "0.0.0.0:80" -k "doubi233" -e "ashe" > /tmp/daze.log 2>&1 &

# 使用此命令启动后,你的代理账号即为:
# 代理端口:80
# 代理密码:doubi233
# 加密方式:ashe
# 混淆地址:无
# 日志文件:/tmp/daze.log

混淆方式启动示例

点击展开 查看更多

当你要使用 HTTP 混淆方式时,即加密方式:asheshadow (加密+HTTP混淆),那么启动命令如下:

nohup ./daze server -l "0.0.0.0:80" -k "doubi233" -e "asheshadow" -m "http://kernel.ubuntu.com/~kernel-ppa/mainline/" > /tmp/daze.log 2>&1 &

# 使用此命令启动后,你的代理账号即为:
# 代理端口:80
# 代理密码:doubi233
# 加密方式:asheshadow
# 混淆地址:http://kernel.ubuntu.com/~kernel-ppa/mainline/
# 日志文件:/tmp/daze.log

# 这时候,当你访问 http://ip:80 时,就能看到混淆地址网页的内容了。
# 混淆地址,我写的仅为示例,请不要无脑跟着做,都用这个地址的话,也就没有混淆意义了。
# 如果你有域名,那么域名 A 记录指向你的服务器 IP,然后客户端处服务器地址填写域名,则伪装成访问 http://域名/ 的流量了。

停止

kill -9 $(ps -ef|grep "daze"|grep -v grep|awk '{print $2}')

查看日志

# 实时查看日志
tail -f /tmp/daze.log
# 查看完整日志
cat /tmp/daze.log

其他说明

启动失败,提示端口被占用

点击展开 查看更多

很多服务器因为不够纯净,往往会自带一些 HTTP 服务程序(Apache、Nginx),他们默认都会占用 80 端口,所以遇到端口被占用的问题,你需要停止这些 HTTP 服务的进程,或者卸载它们。

先通过 netstat -lntp 确认是哪个进程占用了 80 端口。

# 例如输出如下:
# apache 在 CentOS 系统中又叫做 httpd。
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      14233/apache
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1555/sshd       
tcp6       0      0 :::22                   :::*                    LISTEN      1555/sshd

# 找到占用 80 端口的进程 PID:14233,终止进程。
kill -9 14233

# 并取消该程序服务的开机启动,根据程序名不同,下面的 apache 可以改成相应的程序名。
# CentOS 系统:
chkconfig --del apache
# Debian / Ubuntu 系统:
update-rc.d -f apache remove

如果教程哪里写的有错误或者不够严谨,请在下面评论区告诉我~

转载请超链接注明:月下博客 » 一个由Go语言编写的轻量化代理工具 —— DAZE 服务端手动教程
责任声明:本站一切资源仅用作交流学习,请勿用作商业或违法行为!如造成任何后果,本站概不负责!