低成本搭建公网可访问的本地应用
1. 内网穿透的核心流程
家庭或办公室的内网设备因无公网 IP 而无法直连。此时,可通过内网穿透软件(如 FRP),在具有公网 IP 的云服务器(代理节点) 和本地内网服务器(实际服务端) 之间建立持久隧道。工作原理为:
- 公网请求抵达云服务器。
- 云服务器作为中继,通过隧道将请求转发至内网服务器。
- 内网服务器处理请求。
- 生成的响应经隧道回传至云服务器。
- 云服务器将响应发还给请求方。
云服务器实质充当了请求与响应的双向代理,使得公网用户得以间接访问内网服务。
2. 环境准备
- 一台拥有公网IP的云服务器
- 一台本地服务器
- frp内网穿透软件压缩包
3. 在云服务器上部署frp服务端
可通过两种方式获取软件压缩包:一是下载至本地后上传至云服务器,二是直接在云服务器下载。但由于 GitHub 在国内访问存在稳定性问题,云服务器直接下载易出现网络异常。因此建议在本地借助加速器完成压缩包下载,再上传至云服务器进行部署,以此确保下载过程的稳定性与效率。
3.1 下载Linux版本的压缩包
3.2 上传压缩包到云服务器(建议使用root用户操作)
在云服务器创建临时目录,用于存放压缩包。
mkdir ~/temp
将下载的压缩包上传至云服务器的临时目录,在本地服务器(Windows系统)打开cmd窗口,使用scp命令上传文件到云服务器。
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目录下:
mv ~/temp/* /usr/local
解压文件:
tar -zxvf /usr/local/frp_0.62.1_linux_amd64.tar.gz
注意文件名,若下载的压缩包不为frp_0.62.1_linux_amd64.tar.gz,需根据实际情况修改文件名。
打开解压目录使用ls命令查看当前文件夹下的所有文件:
cd /usr/local/frp_0.62.1_linux_amd64
ls
修改frps.toml配置文件:
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
启动服务:
./frps -c frps.toml
4. 在本地环境中部署frp客户端
4.1 下载Windows版本的压缩包
4.2 解压文件
4.3 运行frp客户端
配置frpc.toml文件
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文件,添加以下内容保存:
@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应用。