MENU

goproxy 配置内网穿透

September 7, 2019 • 群晖相关,linux相关

安装

因为我的服务端/客户端均为 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 服务管理

新建服务脚本文件:

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 方式动行。

Last Modified: November 11, 2019