注意:此命令/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中运行。
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,则为
我们还可以创建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,则为
服务器端就搭建好了。
注:启动脚本的名称不能设为gost_http+tls,启动脚本的名称中不能使用“+”号。所以我就把gost_http+tls改为了gost_http_tls。
----------------------------------------------------
用 gost 设置 HTTPS 服务
$ sudo certbot certonly --standalone
/etc/letsencrypt/live/
目录下,这个证书90天后就过期了,所以,需要使用一个 cron job 来定期更新(稍后给出)#!/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
) 这几个变量。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 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代理
说白了这就是另一个https正向代理实现方法,不过更简单。
申请域名和填写DNS记录
首先你要注册一个免费域名,这个可以到Freenom上免费搞一个,不多讲。
域名注册好后,需要添加两条DNS记录,如果没有v6IP的话,就填一个v4IP的A记录,如下:
Name (prefix) | Type | TTL | Target |
---|---|---|---|
A | 3600 | 这里填写vps上的v4IP | |
AAAA | 3600 | 这是v6IP,没有可不填 |
上面完成后,就开始服务端的配置了。
申请SSL证书
安装certbot-auto
1 | wget https://dl.eff.org/certbot-auto |
certbot-auto申请证书
./certbot-auto certonly --standalone --email youmail@mail -d xxxx.com -d www.xxxx.com
运行完成后,会生成类似下面路径的证书,俺们要记下公钥、私钥的路径:
1 | /etc/letsencrypt/live/xxxx.com/fullchain.pem #证书公钥,xxxx.com是你的域名 |
下载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 | [Unit] |
重载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.
参考: