0x00 前言
关于标题
我这人没啥想象力,想不到什么好的标题,见到忘年大佬的博客那篇教程的标题还是挺不错的就拿来用了,希望dalao不要见怪。
为了区分,我在这篇文章标题的开头加了“【Rbit】”
关于这篇文章
说实话,我一开始没打算写这篇 blog 的,但经过两天辛辛苦苦的摸索,觉得不把这详细的经历和遇到的坑写下来实在对不起自己这两天花费的时间,同时也希望我这篇记录能帮到各位遇到相同问题的朋友。
由于我是小白,文章也会是小白向,我会尽量把大大小小的问题都写出来。
参考资料
0x01 过程
因为我自己经历一遍下来,感觉整个过程分为几大块,那我就以分块的方式给大家讲清楚
01.CloudFlare 部分
需要准备的材料有
- 一个域名(example.com)
- 域名管理控制台
先在 CloudFlare 注册账号什么的就不用多说了。注册后,把域名绑定到 CloudFlare,这一步需要在 域名管理控制台 里面把域名的 DNS 设置成 CloudFlare 提供的 DNS 地址。(域名在阿里云买的就在阿里云、腾讯云买的就在腾讯云,以此类推。不知道自己的域名是在哪个域名商买的可以查 whois )
如果 DNS 修改不成功的话,可以查看下是不是开启了“禁止信息修改”的选项(因为我自己就是,后来才发现的)
绑定好域名后,给你的域名添加一条解析
1.按照教程里说的,要注意点亮那朵橙色的云(我添加时默认是已经点亮的)
2.前面写上 nginx
02.goflyway 部分
需要准备的材料有
- 被墙机器的shell(假如 ssh 都连接不上的话在服务商那里应该会有提供能连接上的终端,比如我 vultr 的机子如下图
- 另外的临时梯子(以防上面这个终端出现什么奇奇怪怪的问题)
首先下载安装 GO,这部分就直接搬运忘年大佬博客里的内容了
CentOS7:
yum -y install supervisor wget git
Debian9:
apt -y install supervisor wget git
下载 GO
wget https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz tar -xzvf go1.12.5.linux-amd64.tar.gz -C /usr/bin
导入环境变量:
CentOS7导入环境变量
echo "export PATH=$PATH:/usr/bin/go/bin" >> ~/.bash_profile source ~/.bash_profile
Debian9导入环境变量
echo "export PATH=$PATH:/usr/bin/go/bin" >> ~/.profile source ~/.profile
Goflyway 的服务端和客户端都是同一个文件,所以这里我使用交叉编译,同时把 Linux 和 Windows 的二进制文件编译出来:
mkdir goflywaybuild && export GOPATH=$PWD/goflywaybuild go get github.com/mitchellh/gox go get -u -d github.com/coyove/goflyway/cmd/goflyway cd $GOPATH/bin ./gox -os "windows linux" -arch amd64 $GOPATH/src/github.com/coyove/goflyway/cmd/goflyway
如果只需要编译 Linux 平台的:
mkdir goflyway && export GOPATH=$PWD/goflyway go get -u github.com/coyove/goflyway/cmd/goflyway cp goflyway/bin/goflyway /usr/bin rm -rf goflyway && rm go1.12.5.linux-amd64.tar.gz
(
我本人在执行
“ go get -u github.com/coyove/goflyway/cmd/goflyway
”
这一步中,出现了各种奇奇怪怪的问题,比如:
1.明明是 root 用户却出现了 permission denied:go
2.执行命令行出现一长串英文且文件夹内并没有如预期中出现 bin
文件夹
受限于这个终端没有错误的染色和无法上翻查看输出内容,就算是有心解决问题也不知道是哪里出错。这个时候就只能用临时的扶墙助手来 ssh 连接 shell 了。
)
03.Supervisor 部分
需要准备的材料有
- nano(或者 vim)
以下也是搬运
接下来新建 Supervisor 的配置文件, 将程序放到后台运行并进行守护
CentOS7新建配置文件的路径:
nano /etc/supervisord.d/goflyway.ini
Debian9新建配置文件的路径:
nano /etc/supervisor/conf.d/goflyway.conf
配置文件内容通用:
[supervisord] nodaemon=false [program:goflyway] priority=1 directory=/usr/bin command=/usr/bin/goflyway -l=":8080" -k="YourPassword"
注意:
1. 使用 Goflyway 套 CF,服务端监听的端口只能是 CF 支持的,具体支持的端口号可以查看 CF 的介绍:https://support.cloudflare.com/hc/en-us/articles/200169156-Which-ports-will-Cloudflare-work-with
2. -k
后面是你的密码,务必设置一个复杂的
最后启动 Supervisor 即可完成服务端的部署
CentOS7:
systemctl restart supervisord systemctl enable supervisord
Dbian9:
systemctl restart supervisor systemctl enable supervisor
(注意,区别在于结尾的 ‘d’)
04.客户端 部分
a.Windows 客户端
以下为搬运
接着我们来配置客户端,因为 Goflyway 程序没有 GUI,想要使用的话得一直开着 CMD 或者 PowerShell,这样不太方便,所以这里我们可以借助 WinSw,将 Goflyway 创建为服务放在后台运行并实现开机自启。
WinSw 下载地址:
https://github.com/kohsuke/winsw/releases
XP 系统下 .Net2
版本,其他系统下 .Net4
的即可:
现在你应该将之前编译的 Windows 平台下的 Goflyway 二进制文件以及 WinSw 放在同一个目录下,并且新建一个和 WinSw 同名的 .xml
文件:
打开 xml 文件,在文件内写入如下配置:
注:
1.12315
是本地监听的 HTTP/Socks5
端口
2.-up="cf://nginx.xxx.com:8080"
,其中 8080
端口一定要和之前服务端上配置的端口一致。
现在打开 PowerShell ,进入到 WinSw 所在的目录,执行如下图所示的命令即可将 Goflyway 安装为服务:
客户端的配置到这里就全部完成了。
以 Chrome 为例,安装 SwitchyOmega
插件,添加 Socks5 代理:
即可正常使用
b.Linux 客户端
照常来说,客户端这边我重新 go get
编译一下就可以了,但也许是因为墙的原因一直不成功(没有任何回显,猜测是超时)
于是我灵机一动,由于 Goflyway 服务端和客户端是相同的,且现在情况是客户端服务端均为 Linux 系统,所以我可以把机子里面那个下载来用。由于是 ip 被 ban,ssh 都连接不上 sftp 也同样,正巧我那个服务器挂着个网站,于是我就把 Goflyway 复制了一份放在了网站的目录下,并写了个 download.html
<!DOCTYPE html>
<a href="goflyway" download="goflyway">下载Goflyway</a>
(在手机上用临时扶墙工具连接 ssh 写的,很不方便,能少写就少写)
通过浏览器下载下来,放到 /usr/bin
目录下,由于权限和其他应用不同,我就仿照其他应用的权限修改了一下
sudo chmod 755 goflyway
需要用时,通过命令
goflyway -l="1080" -k=YourPassword -up="cf://nginx.example.com:8080"
- 1.
-l
设置本地监听的端口 - 2.
-k
你在服务端设置的密码 - 3.
-up
只需要修改example.com
为你的域名即可(其中8080
端口一定要和服务端配置一样)
c.Mac 客户端
由于本人没有 Mac 电脑,无法尝试,欢迎大家尝试过后反馈补充,我会添加上来