Total Pageviews

Saturday, 13 May 2017

使用goproxy-vps快速搭建http2/https代理服务器,用来翻墙


程序包‘goproxy-vps_linux_amd64-r198.tar.xz’的下载地址:
https://drive.google.com/file/d/0B1CmeJlGMtoLVUFXTFdZZXJKOEE/view

下载goproxy-vps_linux_amd64-r198.tar.xz到本地机器,然后上传到你的linux vps的/root/下。
安装方法:
mkdir goproxy-vps
cd goproxy-vps

root@ary:~/goproxy-vps# mv ~/goproxy-vps_linux_amd64-r198.tar.xz ./
root@ary:~/goproxy-vps# tar Jxvf goproxy-vps_linux_amd64-r198.tar.xz
root@ary:~/goproxy-vps# ls            
README.md  get-latest-goproxy-vps.sh  goproxy-vps.sh    pwauth

goproxy-vps                goproxy-vps.toml    
root@ary:~/goproxy-vpsnano goproxy-vps.toml
修改goproxy-vps.toml为如下形式:
[default]
log_level = 2
reject_nil_sni = false
daemon_stderr = "./goproxy-vps.log"

[[http2]]
listen = ":8443"
server_name = ["mydomain.com"]
proxy_fallback = "http://127.0.0.1:80"
cert_file = "/path/to/example.org.cer"
key_file = "/path/to/example.org.key

root@ary:~/goproxy-vps# ./goproxy-vps goproxy-vps.toml &

不过命令:./goproxy-vps goproxy-vps.toml &容易退出,我们可以利用systemd来把./goproxy-vps goproxy-vps.toml运行为service:

nano /etc/systemd/system/goproxy-vps.service
内容为:
[Unit]
After=network.target

[Service]
ExecStart=/root/goproxy-vps/goproxy-vps /root/goproxy-vps/goproxy-vps.toml
Restart=always

[Install]
WantedBy=multi-user.target

然后运行:

systemctl start goproxy-vps
systemctl enable goproxy-vps
这样,服务器端就运行好了.

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

建议去注册一个top域名,很便宜,才2usd/年;证书的话,可到这里https://cheapsslsecurity.com/sslproducts/domainvalidatedssl.html,购买一个Comodo PositiveSSL证书,8usd/年,不过这种domain validated ssl证书只适用yourdomain.com和www.yourdomain.com,不适用yourdomain.com的其他子域名
我测试过:自签证书不行。若用自签证书,chrome里会显示:err:proxy_certificate_invalid.
注:如果你的mac系统翻墙一段时间或合上机盖再打开,你会发现翻墙失败,估计是mac系统的dns又变回了isp的dns, 此时请运行:

networksetup -setdnsservers "Wi-Fi" "Empty" && networksetup -setdnsservers "Wi-Fi" 8.8.8.8
设置本地操作系统的dns为8.8.8.8,翻墙速度就会立刻又变得飞快。

https://github.com/phuslu/goproxy-ci/releases

优势:
  • tls 1.3 的 1-RTT 甚至 0-RTT 的握手时间,并且根据客户端自动选择 ECC/RSA 证书,根据服务端自动选择 ECDHE_ECDSA/X25519 和 AES-GCM/ChaCha20。
  • http2 多路复用,网页体验明显。
  • autocert 自动使用 letsencrypt 的 tls-sni 协议签发证书,这样就可以无痛部署了。
  • 向下兼容 https proxy, 所以 iOS 上的 wingy, surge 也能用了
  • 客户端普通的非代理请求可以反代本地 nginx/apache 的 80 端口,使 443 端口不至于只能用作代理。
  • proxy auth 使用是 linux 的 PAM 机制或 htpasswd 文件,便于管理。同时也支持客户端证书验证来对抗 TLS 探针。
  • golang 实现,效率较高,部署简单。
使用注意点:
  • Chrome 请务必打开 chrome://flags/#ssl-version-max 的 tls1.3 支持
  • VPS 请尽可能打开 TCP BBR 算法。
  • 某些网络环境对 http2 有限速,请改用 [[https]] 配置.
from https://github.com/phuslu/gop/issues/1470

电脑上可以直接在Chrome+SwitchyOmega里设置https代理,不需要运行本地客户端,比较方便.安卓上可以使用Drony设置。

作者phuslu已删除相关项目:
https://github.com/phuslu/gop
https://github.com/phuslu/goproxy-ci/
https://github.com/phuslu/goproxy-ci/releases/ 
但是,这里有备份:
https://github.com/luckypoem/prom-releases
https://github.com/goproxy0/prom-releases

相关帖子:http://briteming.blogspot.com/2017/06/openshiftgoproxyvps.html

http://briteming.blogspot.com/2017/08/goproxy-vpsyap.html

如果想使用let's encrypt的免费证书,请看:
http://briteming.blogspot.com/2017/06/lets-encryptsslcertbot.html 

---------------------


如何编译GoProxy

GoProxy 对 golang的周边库做了一些修改。具体的改动请见,
  1. https://github.com/phuslu/go
  2. https://github.com/phuslu/net
  3. https://github.com/phuslu/glog
所以编译需要从 golang 工具链开始编译, 以下步骤都假设你的工作目录位于 ~/workspace/goproxy/
  • 保证系统安装了如下工具 awk/git/tar/bzip2/xz/7za/gcc/make/sha1sum/timeout/xargs,检查命令:
for CMD in curl awk git tar bzip2 xz 7za gcc sha1sum timeout xargs
do
 if ! type -p ${CMD}; then
  echo -e "\e[1;31mtool ${CMD} is not installed, abort.\e[0m"
  exit 1
 fi
done
  • 编译 golang 工具链
export GOROOT_BOOTSTRAP=~/workspace/goproxy/goroot_bootstrap
export GOROOT=~/workspace/goproxy/go
export GOPATH=~/workspace/goproxy/gopath

cd ~/workspace/goproxy/

curl -k https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz | tar xz
mv go goroot_bootstrap

git clone --depth 1 https://github.com/phuslu/go
(cd go/src && bash ./make.bash)

export PATH=$PATH:~/workspace/goproxy/go/bin
  • 编译 goproxy
git clone https://github.com/luckypoem/gop
cd gop
git checkout master

awk 'match($1, /"((github\.com|golang\.org|gopkg\.in)\/.+)"/) {if (!seen[$1]++) {gsub("\"", "", $1); print $1}}' $(find . -name "*.go") | xargs -n1 -i go get -v -u {}

go build -v
  • 运行调试 goproxy
./goproxy -v=3
  • 打包 goproxy
./make.bash
  • 交叉编译+打包 goproxy
GOOS=windows GOARCH=amd64 ./make.bash
  • 一键编译 GoProxy
bash -xe < <(curl -kL https://github.com/luckypoem/gop/raw/master/assets/build/ci.sh)

from https://github.com/luckypoem/gop/blob/wiki/HowToBuild.md
----------


goproxy-vps代理和网站同开


据说,goproxy-vps(r143+)已经是一个成熟可用的 tls1.3 + http2 代理了,这里说说如何在443端口上同开博客和代理。
新版本,是在一个issue里面公布的,着实低调。新版的安装方法和特点都在issue里面讲得很详细了,本文旨在突出新版的反代功能。


这里有个前提,必须有个域名解析到自己的服务器上。可以去www.freenom.com弄个免费域名试试,把A记录解析到服务器的ip.
首先是安装,根据一键脚本便可。
这里仅需修改下nginx配置,释放出443端口.
由于新版的goproxy-vps是自动使用 letsencrypt的tls-sni协议签发证书的,这里根本不需要管证书的问题.
访问自己的的网站,就会看到已经签好的证书,当然同端口下的代理也配置好了。
------------------


安装从GoGetSSL.COM购买的Comodo SSL证书


博客换证书,在GoGetSSL.com上买了3年的PositiveSSL DV证书。在Nginx上安装是出现了证书链问题。
申请完后GoGetSSL会给你一个压缩包,里面是你的所有证书。按照Nginx的要求应该需要完整的证书链,由于没有ca-bundle,所以我使用了cat命令把下面四个按次序合并成一个完整的证书:

,但是重启Nginx还是报错私钥和证书不匹配,所以我去Comodo官网查看,Comodo提供了下面的ca-bundle文件。再把域名证书和ca-bundle合并一下,证书链就完整了。
DV证书链:
EV证书链:
OV证书链:
organization_validated.ca-bundle (5.50 KB)
-------------

更简单省事的办法:http://briteming.blogspot.com/2017/08/goproxy-vps.html

No comments:

Post a Comment