安装
因为我的服务端/客户端均为 linux
环境,所以安装方式完全一样。
一键安装:
curl -L https://raw.githubusercontent.com/snail007/goproxy/master/install_auto.sh | bash
脚本内容:
#!/bin/bash
F="proxy-linux-amd64.tar.gz"
set -e
if [ -e /tmp/proxy ]; then
rm -rf /tmp/proxy
fi
mkdir /tmp/proxy
cd /tmp/proxy
LAST_VERSION=$(curl --silent "https://api.github.com/repos/snail007/goproxy/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")')
wget "https://github.com/snail007/goproxy/releases/download/${LAST_VERSION}/$F"
# #install proxy
tar zxvf $F
cp -f proxy /usr/bin/
chmod +x /usr/bin/proxy
if [ ! -e /etc/proxy ]; then
mkdir /etc/proxy
cp blocked /etc/proxy
cp direct /etc/proxy
fi
rm -rf /tmp/proxy
echo "install done"
服务端(VPS),公网 IP:12.34.56.78:8000
说明
脚本
提示
分为两部分:
bridge
部分,用于与内网通信server
用于转发外网请求到bridge
#!/bin/bash
# /home/goproxy/sb.sh
/usr/bin/proxy bridge -p ":10000" -C /home/goproxy/cert/proxy.crt -K /home/goproxy/cert/proxy.key
#!/bin/bash
# /home/goproxy/ss.sh
/usr/bin/proxy server -r ":8000@:8080" -P "127.0.0.1:10000" -C /home/goproxy/cert/proxy.crt -K /home/goproxy/cert/proxy.key
参数中所有涉及文件路径部分,一率采用完整路径,方便后续编写服务脚本添加到
systemctl
服务管理,否则服务启动报错失败。
客户端(群晖docker
),内网 http
端口 8080
#!/bin/bash
# /root/goproxy/cli.sh
/usr/bin/proxy client -P "12.34.56.78:10000" -C /etc/proxy/proxy.crt -K /etc/proxy/pro
xy.key
加入到 systemctl
服务管理
说明
bridge
server
client
新建服务脚本文件:
vim /usr/lib/systemd/system/goproxy-b.service
vim /usr/lib/systemd/system/goproxy-s.service
客户端
vim /usr/lib/systemd/system/goproxy-c.service
分别填写对应脚本内容
[Unit]
Description=goproxy bridge service
After=syslog.target
After=network.target
[Service]
User=root
Group=root
ExecStart=/home/goproxy/sb.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
[Unit]
Description=goproxy server service
After=syslog.target
After=network.target
[Service]
User=root
Group=root
ExecStart=/home/goproxy/ss.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
[Unit]
Description=goproxy client service
After=syslog.target
After=network.target
[Service]
User=root
Group=root
ExecStart=/root/goproxy/cli.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
权限
chmod 754 /usr/lib/systemd/system/goproxy-b.service
chmod 754 /usr/lib/systemd/system/goproxy-s.service
chmod 754 /usr/lib/systemd/system/goproxy-c.service
开机启动|启动|停止|状态
systemctl [enable|start|stop|status] goproxy-b
systemctl [enable|start|stop|status] goproxy-s
systemctl [enable|start|stop|status] goproxy-c
关于后台运行
可以使用 screen
运行后台命令。
screen用法
关于生成加密通讯需要的证书文件
http(s)代理、tcp代理、udp代理、socks5代理、内网穿透等功能和上级通讯的时候,为了安全我们采用TLS加密通讯,当然可以选择不加密通信通讯,本教程所有和上级通讯都采用加密,需要证书文件。
所有端必须使用相同的proxy.crt和proxy.key
通过下面的命令生成自签名的证书和key文件。
./proxy keygen -C proxy
会在当前程序目录下面生成证书文件proxy.crt和key文件proxy.key。
通过下面的命令生,使用自签名证书proxy.crt和key文件proxy.key签发新证书:goproxy.crt和goproxy.key。
./proxy keygen -s -C proxy -c goproxy
会在当前程序目录下面生成证书文件goproxy.crt和key文件goproxy.key。
- 默认情况下证书的里面的域名是随机的,可以使用-n test.com参数指定。
- 更多用法:
proxy keygen --help
其中
goproxy-c
在内网机器上操作。goproxy官方文档中有提到 多链接版本,对应的子命令是tserver,tclient,tbridge
,其使用参数完全一样,但个人实测未成功,只能以 多路复用版本,对应的子命令是server,client,bridge
方式动行。