Skip to content

低成本搭建公网可访问的本地应用

1. 内网穿透的核心流程

家庭或办公室的内网设备因无公网 IP 而无法直连。此时,可通过内网穿透软件(如 FRP),在具有公网 IP 的云服务器(代理节点)本地内网服务器(实际服务端) 之间建立持久隧道。工作原理为:

  1. 公网请求抵达云服务器。
  2. 云服务器作为中继,通过隧道将请求转发至内网服务器。
  3. 内网服务器处理请求。
  4. 生成的响应经隧道回传至云服务器。
  5. 云服务器将响应发还给请求方。

云服务器实质充当了请求与响应的双向代理,使得公网用户得以间接访问内网服务。

2. 环境准备

  • 一台拥有公网IP的云服务器
  • 一台本地服务器
  • frp内网穿透软件压缩包

3. 在云服务器上部署frp服务端

可通过两种方式获取软件压缩包:一是下载至本地后上传至云服务器,二是直接在云服务器下载。但由于 GitHub 在国内访问存在稳定性问题,云服务器直接下载易出现网络异常。因此建议在本地借助加速器完成压缩包下载,再上传至云服务器进行部署,以此确保下载过程的稳定性与效率。

3.1 下载Linux版本的压缩包

3.2 上传压缩包到云服务器(建议使用root用户操作)

在云服务器创建临时目录,用于存放压缩包。

Shell
mkdir ~/temp

将下载的压缩包上传至云服务器的临时目录,在本地服务器(Windows系统)打开cmd窗口,使用scp命令上传文件到云服务器。

Shell
scp -r C:\Users\20205\Downloads\frp_0.62.1_linux_amd64.tar.gz root@31.20.50.21:~/temp

scp命令解读:scp -r 你的本地文件目录 root@你的公网IP:创建的临时文件夹

3.3 运行frp服务端

将压缩包移动到/usr/local目录下:

Shell
mv ~/temp/* /usr/local

解压文件:

Shell
tar -zxvf /usr/local/frp_0.62.1_linux_amd64.tar.gz

注意文件名,若下载的压缩包不为frp_0.62.1_linux_amd64.tar.gz,需根据实际情况修改文件名。

打开解压目录使用ls命令查看当前文件夹下的所有文件:

Shell
cd /usr/local/frp_0.62.1_linux_amd64
ls

修改frps.toml配置文件:

Shell
cat > frps.toml <<EOF
bindPort = 7000 #与本地frp客户端配置文件中的server_port保持一致
auth.token = "your_secure_token_here" #frp服务端与客户端的token保持一致,可自定义

webServer.addr = "0.0.0.0"
webServer.port = 7500 
webServer.user = "admin"
webServer.password = "123456"
EOF

启动服务:

Shell
./frps -c frps.toml

4. 在本地环境中部署frp客户端

4.1 下载Windows版本的压缩包

4.2 解压文件

4.3 运行frp客户端

配置frpc.toml文件

Shell
serverAddr = "84.74.13.32"  # 替换为云服务器公网IP
serverPort = 7000
auth.token = "your_secure_token_here"  # 与服务端一致

[[proxies]]
name = "web-blog"
type = "tcp"
localIP = "localhost"
localPort = 8080    # 本地博客端口
remotePort = 6001      # 云服务器转发端口

在解压文件夹下新建start.bat文件,添加以下内容保存:

Shell
@echo off
frpc.exe -c frpc.toml
pause

双击start.bat文件,运行frp客户端

5. 通过公网访问本地HelloWorld应用

5.1 在SpringBoot项目中运行HelloWorld应用(工作在8080端口)

5.2 访问HelloWorld应用

打开浏览器,输入云服务器的公网IP+remotePort配置的端口6001(例:88.88.88.88:6001),即可访问HelloWorld应用。