Pages

Saturday, 18 November 2017

用Gost搭建HTTPS代理

这里推荐一个简单的搭建方法。

准备一个域名,比如yourdomain.com,并解析到VPS的ip.
申请免费证书
可用此文的方法:
http://briteming.blogspot.com/2017/06/lets-encryptsslcertbot.html 
证书文件/私匙文件的路径,待用。

搭建:
wget https://github.com/ginuerzh/gost/releases/download/v2.5/gost_2.5_linux_amd64.tar.gz
tar zxvf gost_2.5_linux_amd64.tar.gz 
chmod 755 /root/gost_2.5_linux_amd64/gost
Gost可以搭建多种类型的代理,这里只是用其一个功能:
/root/gost_2.5_linux_amd64/gost -L="http2://:6443?cert=/path/to/my/cert/file&key=/path/to/my/key/file" &
不过此命令容易退出,我们可以利用daemonize让此命令运行在后台:
cd ~
daemonize -c . /root/gost_2.5_linux_amd64/gost -L="http2://:6443?cert=/etc/letsencrypt/live/mydomain.com/fullchain.pem&key=/etc/letsencrypt/live/mydomain.com/privkey.pem" 
修改命令中的证书文件/私匙文件的路径为实际路径,端口6443亦可修改。
一般NAT VPS不提供443端口,好在便宜,低成本科学上网。
注意:此命令/root/gost_2.5_linux_amd64/gost -L="http2://:6443?cert=/etc/letsencrypt/live/mydomain.com/fullchain.pem&key=/etc/letsencrypt/live/mydomain.com/privkey.pem" 无法在systemd中运行
另外,上面的http2替换为http+tls也是ok的,这是另一种协议:
daemonize -c . /root/gost_2.5_linux_amd64/gost -L="http+tls://:6444?cert=/etc/letsencrypt/live/mydomain.com/fullchain.pem&key=/etc/letsencrypt/live/mydomain.com/privkey.pem" 

根据https://briteming.blogspot.com/2018/07/linux-vps.html,我们可以创建gost(http2协议)的启动脚本,让gost随vps的启动而自动运行。
nano /etc/init.d/gost_http2
内容为:
#!/bin/bash

### BEGIN INIT INFO
# Provides: gost_http2
# Required-Start: $remote_fs $local_fs
# Required-Stop: $remote_fs $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: use gost to cross gfw
# Description: try it
### END INIT INFO

daemonize -c . /root/gost_2.5_linux_amd64/gost -L="http2://:6443?cert=/etc/letsencrypt/live/gost.mydomain.com/fullchain.pem&key=/etc/letsencrypt/live/gost.mydomain.com/privkey.pem
"

exit 0 


然后运行:
chmod 755 /etc/init.d/gost_http2
/etc/init.d/gost_http2 start
update-rc.d gost_http2 defaults
(这是debian/ubuntu下的命令。如果是centos,则为
chkconfig gost_http2 on )

我们还可以创建gost(http+tls协议)的启动脚本,让gost(http+tls协议)随vps的启动而自动运行。
nano /etc/init.d/gost_http_tls
内容为:
#!/bin/bash

### BEGIN INIT INFO
# Provides: gost_http_tls
# Required-Start: $remote_fs $local_fs
# Required-Stop: $remote_fs $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: use gost to cross gfw
# Description: try it
### END INIT INFO

daemonize -c . /root/gost_2.5_linux_amd64/gost -L="http+tls://:6444?cert=/etc/letsencrypt/live/gost.mydomain.com/fullchain.pem&key=/etc/letsencrypt/live/gost.mydomain.com/privkey.pem"

exit 0


然后运行:
chmod 755 /etc/init.d/gost_http_tls
/etc/init.d/gost_http_tls start
update-rc.d gost_http_tls defaults
(这是debian/ubuntu下的命令。如果是centos,则为
chkconfig gost_http_tls on )

服务器端就搭建好了。

注:启动脚本的名称不能设为gost_http+tls,启动脚本的名称中不能使用“+”号。所以我就把gost_http+tls改为了gost_http_tls。

然后在客户机上,安装chrome,并安装chrome的插件switchyomega
(https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif)
安装chrome的插件switchyomega后,点击chrome的右上角的switchyomega图标,然后点击“选项”-“新建情景模式”-“情景模式名称”取名为gost proxy(名称可以随便取)-点击“创建”- “代理协议”选择https,"代理服务器"栏填写你所绑定的域名yourdomain.com,“代理端口”填写6443-点击“应用选项”。
然后在chrome中,即可翻墙。

参见https://github.com/ginuerzh/gost#gost---go-simple-tunnel
相关帖子:http://briteming.blogspot.com/2015/05/gost.html
----------------------------------------------------

用 gost 设置 HTTPS 服务

gost 是一个非常强的代理服务,它可以设置成 HTTPS 代理,然后把你的服务伪装成一个Web服务器,我感觉这比其它的流量伪装更好,也更隐蔽。这也是这里强烈推荐的一个方式
为了更为的隐蔽,你需要一个域名,然后使用 Let's Encrypt 来签 一个证书。使用 Let's Encrypt 证书你需要在服务器上安装一个 certbot,点击 certbot 这个链接,你可以选择你的服务器,操作系统,然后就跟着指令走吧。
接下来,你需要申请一个证书(我们使用standalone的方式,然后,你需要输入你的电子邮件和你的域名):
$ sudo certbot certonly --standalone
证书默认生成在 /etc/letsencrypt/live/ 目录下,这个证书90天后就过期了,所以,需要使用一个 cron job 来定期更新(稍后给出)
接下来就是启动 gost 服务了,我们这里还是使用 Docker 的方式建立 gost 服务器。
#!/bin/bash

## 下面的四个参数需要改成你的
DOMAIN="YOU.DOMAIN.NAME"
USER="username"
PASS="password"
PORT=443

BIND_IP=0.0.0.0
CERT_DIR=/etc/letsencrypt
CERT=${CERT_DIR}/live/${DOMAIN}/fullchain.pem
KEY=${CERT_DIR}/live/${DOMAIN}/privkey.pem
sudo docker run -d --name gost \
    -v ${CERT_DIR}:${CERT_DIR}:ro \
    --net=host ginuerzh/gost \
    -L "http2://${USER}:${PASS}@${BIND_IP}:${PORT}?cert=${CERT}&key=${KEY}&probe_resist=code:404"
上面这个脚本,你需要配置:域名(DOMAIN), 用户名 (USER), 密码 (PASS) 和 端口号(PORT) 这几个变量。
关于 gost 的参数, 你可以参看其文档:Gost Wiki,上面我设置一个参数 probe_resist=code:404 意思是,如果服务器被探测,或是用浏览器来访问,返回404错误,也可以返回一个网页(如:probe_resist=file:/path/to/file.txt 或其它网站 probe_resist=web:example.com/page.html
如无意外,你的服务就启起来了。接下来就是证书的自动化更新。
可以使用命令 crontab -e 来编辑定时任务:
0 0 1 * * /usr/bin/certbot renew --force-renewal
5 0 1 * * /usr/bin/docker restart gost

这样,服务器就配置完成了。客户端请移动后面的客户端章节。
----------

简单记录下 Socks5 proxy(或者http proxy) Over TLS隧道的建立(代理服务器程序gost的新功能)

1. 首先你需要购买一个域名;

2. 证书的获取:
Linux 下可以用 Certbot,acme.sh 等工具来从 Let’s Encrypt 获取证书;
Windows 下推荐用 Caddy 来获取证书,推荐把域名服务器临时设为 Cloudflare 的,然后通过 API 让 Caddy 自动获取证书,API 设置为环境变量,Caddyfile 简单设置为:
mydomain.com:443
root E:WWW
gzip
log ../access.log
tls {
dns cloudflare
}

然后直接运行一下 Caddy.exe 就行了,证书储存在 用户名/.caddy 目录下。

3. 创建服务端:
这里就要用到强大的 Gost 了,各类隧道创建方式:
gost -L="http://user:password@:25" -L="http2://user:password@:143?cert=cert.pem&key=key.pem" -L="socks+tls://user:password@:587?cert=cert.pem&key=key.pem" -L="http+tls://user:password@:465?cert=cert.pem&key=key.pem"

这么一行就依次创建了:一个监听在 25 端口的支持 http-connect 的代理,一个加密的http2代理,一个 Socks Over TLS 代理(目前 Surge 支持)和一个 https 代理,user:password 是用户名/密码.

from https://www.quakemachinex.com/blog/?p=244
-----------

简单记录下 Socks5 Over TLS, HTTPS and HTTP2 隧道代理的建立

1. 首先你需要购买一个域名;
2. 证书的获取:
Linux 下可以用 Certbot 等工具来从 Let’s Encrypt 获取证书;
Windows 下推荐用 Caddy 来获取证书,推荐把域名服务器临时设为 Cloudflare 的,然后通过 API 让 Caddy 自动获取证书,API 设置为环境变量,Caddyfile 简单设置为:
mydomain.com:443
root E:WWW
gzip
log ../access.log
tls {
dns cloudflare
}

然后直接运行一下 Caddy.exe 就行了,证书储存在 用户名/.caddy 目录下。
3. 创建服务端:
这里就要用到强大的 Gost 了,各类隧道创建方式:
gost -L="http://user:password@:25" -L="http2://user:password@:143?cert=cert.pem&key=key.pem" -L="socks+tls://user:password@:587?cert=cert.pem&key=key.pem" -L="http+tls://user:password@:465?cert=cert.pem&key=key.pem" -logtostderr -v 5
这么一行就依次创建了:一个监听在 25 端口的支持 http-connect 的代理,一个加密的 http2 代理,一个 Socks Over TLS 代理(目前 Surge 支持)和一个 https 代理,user:password 是用户名密码,cert 和 key 分别是上面域名的数字证书的公匙和私匙。
4. 客户端:
http,https 和 socks5 隧道,Chrome 浏览器(或者通过 SwitchyOmeda 扩展)都直接支持,Socks5 over TLS 目前只看到 Surge 直接支持,http2 没看到直接支持的。不过我们可以转换成普通的 http/socks5 代理来用(远程通讯依然是 TLS 或者 HTTP2 加密的),例如:
#转换 https 为 http,监听在本地 7575 端口
gost -L=http://0.0.0.0:7575 -F=http+tls://user:password@mydomain.com:465?cert=cert.pem&key=key.pem
#转换 socks5 over TLS 为 socks5
gost -L=socks://0.0.0.0:7676 -F=socks+tls://user:password@mydomain.com:587?cert=cert.pem&key=key.pem
#转换 http2 为 socks5
gost -L=socks://0.0.0.0:7878 -F=http2://user:password@mydomain.com:143?cert=cert.pem&key=key.pem

这样转换后的代理,是可以通过 redsocks2 来透明代理的。

from  https://quakemachine.wordpress.com/2016/10/17/socks5-over-tls-https-http2-tunnel/
---------------------------------------

搭建基于Gost的HTTPS代理


mixool推荐基于gost搭建的https代理脚本,感觉很简单实用,于是分享详细的搭建教程.

说白了这就是另一个https正向代理实现方法,不过更简单。

申请域名和填写DNS记录

首先你要注册一个免费域名,这个可以到Freenom上免费搞一个,不多讲。

域名注册好后,需要添加两条DNS记录,如果没有v6IP的话,就填一个v4IP的A记录,如下:

Name (prefix)TypeTTLTarget
A3600这里填写vps上的v4IP
AAAA3600这是v6IP,没有可不填

上面完成后,就开始服务端的配置了。

申请SSL证书

安装certbot-auto

1
2
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

certbot-auto申请证书

./certbot-auto certonly --standalone --email youmail@mail -d xxxx.com -d www.xxxx.com

运行完成后,会生成类似下面路径的证书,俺们要记下公钥、私钥的路径:

1
2
/etc/letsencrypt/live/xxxx.com/fullchain.pem    #证书公钥,xxxx.com是你的域名
/etc/letsencrypt/live/xxxx.com/privkey.pem #证书私钥

下载Gost

wget -O - https://github.com/ginuerzh/gost/releases/download/v2.11.1/gost-linux-amd64-2.11.1.gz | gzip -d > /usr/bin/gost

chmod +x /usr/bin/gost

注册system服务

vi /etc/systemd/system/gost.service 填入下面内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=gost
[Service]
ExecStart=/usr/bin/gost -L=https://uname:password@:443?cert=/etc/letsencrypt/live/xxxx.com/fullchain.pem&key=/etc/letsencrypt/live/xxxx.com/privkey.pem

#下面是probe_resistance防嗅探,通过代理访问 http://login.localhost 唯一地址触发407验证,而避免其它代理页返回407验证而暴露了自己是一个转发代理。
#此功能默认关闭,把上面一行#号注释掉,再把下面一行前面#号去掉即可开启,注意证书路径。
#ExecStart=/usr/bin/gost -L=https://uname:password@:443?probe_resist=code:400&knock=login.localhost&cert=/etc/letsencrypt/live/xxxx.com/fullchain.pem&key=/etc/letsencrypt/live/xxxx.com/privkey.pem

Restart=always
User=root
[Install]
WantedBy=multi-user.target

重载system服务 systemctl daemon-reload

下面就可以启动gost了:

systemctl start gost #启动gost

systemctl restart gost #重启gost

systemctl enable gost #开机自启

systemctl status gost #查看状态

服务端到此也就部署完成了,下面来折腾客户端。https正向代理,不必多讲,安全、快捷,电脑端不用另装客户端,移动端软件大部分支持https代理。

客户端配置

电脑端浏览器安装SwitchyOmega插件,新建一个代理情景模式,代理协议填写HTTPS,代理服务器填写你的域名,端口填写你使用的端口,没有另外设置的话就填443,最后点击右边小锁,填写你的用户名和密码。就可以使用了.

移动端,俺们以小火箭和Quantumult X为例,小火箭,选择https代理,服务器填写你的域名.

Quantumult X 配置文件/编辑/server_local字头下填写:

http=你的域名:443, username=用户名, password=密码, over-tls=true, tls-host=你的域名, fast-open=false, udp-relay=false, tag=gost

最后推荐几个移动端支持https proxy的软件,iOS:Quantumult X ,小火箭, Android:Clash, Surfboard.

参考: