【树莓派4】基于GoProxy的内网穿透/代理服务部署 | Raspberrypi4

祁兴运
2023-12-01

简介:在我们树莓派只有内网IP的时候,我们需要借助代理服务来帮我们实现请求转移,像Nginx,Apache等代理服务器也有代理功能,但是更多负责的是“负载均衡”,花生壳有流量限制不适用,所以我们选择给树莓派部署开源的goproxy

步骤

下面我将用Gitea部署作为例子,其中Gitea在树莓派启动端口为3000

1. 服务器安装goproxy服务端

(1)安装
sudo curl -L https://raw.githubusercontent.com/snail007/goproxy/master/install_auto.sh | sudo bash

访问不到的可以用我的代理

sudo curl -L https://github.dongbox.workers.dev/https://raw.githubusercontent.com/snail007/goproxy/master/install_auto.sh | sudo bash
(2) 设置服务器凭证 (密钥)

命令会在本地生成两个文件proxy.crt proxy.key, 相当于账号和密码,用于服务连接的验证。

sudo proxy keygen -C proxy
(3)在云服务器启动goproxy的server端

这里设定goproxy服务端与客户端的通信端口为99994343属于服务器访问端口,之后我们访问云服务器IP:4343就可以正常访问树莓配的Gitea服务。3000属于Gitea默认端口,如修改这里需要填上自己的。

sudo proxy bridge -p ":9999" -C proxy.crt -K proxy.key --daemon
sudo proxy server -r ":4343@:3000" -P "127.0.0.1:9999" -C proxy.crt -K proxy.key --daemon

2. 树莓派部署goproxy客户端

(1) 安装

这个之前服务器所使用的安装脚本会默认拉取amd版本的goproxy,而树莓派需要arm,所以我们需要到realease页面https://github.com/snail007/goproxy/releases找到自己需要的版本,这里我更换为proxy-linux-arm-v6.tar.gz

sudo curl -L https://raw.githubusercontent.com/snail007/goproxy/master/install_auto.sh | sudo bash

  • 创建goproxy文件夹并进入

    mkdir ~/goproxy 
    cd  ~/goproxy 
    
  • 下载并解压

    !!!这里一定一定注意自己的系统版本,如果使用的是树莓派32位官方镜像,那么使用的就是arm-v6,像我另外还使用ARM64系统,此处就需要找到 proxy-linux-arm64-v8.tar.gz 进行操作。

    wget https://github.com/snail007/goproxy/releases/download/v11.3/proxy-linux-arm-v6.tar.gz
    tar -zxvf proxy-linux-arm-v6.tar.gz
    

    下载速度慢的可以用我做好代理的地址

    wget https://github.dongbox.workers.dev/https://github.com//snail007/goproxy/releases/download/v11.3/proxy-linux-arm-v6.tar.gz
    tar -zxvf proxy-linux-arm-v6.tar.gz
    
(2) 运行

将之前云服务器生成的密钥下载下来放到~/goproxy 此目录下,然后就可以在当前文件夹运行开始服务了,9999端口为服务器所设定的代理通信端口。

sudo ./proxy client -P 云服务器ip:9999 -C proxy.crt -K proxy.key

到此如没有报错我们访问云服务器IP:4343就可以访问到我们所部署在树莓派上的Gitea服务了。

3. 原理

在这里,服务端所用端口数量:2; 客户端所用端口数量:1.

  • 树莓派这边有一个goproxy客户端,客户端本地需要代理来自9999端口的请求,代替其访问3000端口的服务并返回,客户端启动后与向服务器的goproxy服务端建立一个长连接通道,在长连接建立后不仅客户端可以向服务端发送请求,服务端也具备了向客户端发送请求的功能。

  • 服务端这边有一个goproxy服务端,4343端口专门代理来自公网的请求转移请求至9999端口,也即是与客户端建立长连接的端口,再到树莓派上的Gitea服务本身。所以此处的请求轨迹为4343->9999(服务端)->9999(客户端)->3000,最终通过代理实现了访问云服务器IP:4343就可以访问Gitea服务的需求。

 类似资料: