【内网穿透】使用FRP实现内网与公网Linux/Ubuntu服务器穿透&项目部署&多项目穿透方案
一、核心原理
FRP通过公网服务器(frps) 反向代理内网服务器(frpc) 的服务,将内网端口映射到公网端口,实现穿透。
二、准备工作
公网服务器(假设IP:
1.1.1.1
)开放端口:
7000
(FRP服务端通信端口)、8080
(映射后访问Vue的端口)。内网服务器
运行Vue3项目(例如在
localhost:3000
)。域名(可选,若需域名访问需提前解析到公网IP)。
三、具体步骤
1. 公网服务器部署 FRP 服务端(frps)
(1) 下载并解压 FRP
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gztar -zxvf frp_0.52.3_linux_amd64.tar.gzcd frp_0.52.3_linux_amd64
(2) 配置 frps.ini
[common]bind_port = 7000 # 服务端监听端口token = your_secure_token # 客户端连接凭证(建议强密码)dashboard_port = 7500 # 监控面板端口(可选)dashboard_user = admin # 面板用户名(可选)dashboard_pwd = admin_pwd # 面板密码(可选)
(3) 启动 frps
./frps -c ./frps.ini# 或后台运行:nohup ./frps -c ./frps.ini > frps.log 2>&1 &
验证:访问 http://1.1.1.1:7500
输入账号密码可查看FRP状态(如果配置了dashboard)。
2. 内网服务器部署 FRP 客户端(frpc)
(1) 下载并解压 FRP(同服务端步骤)
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gztar -zxvf frp_0.52.3_linux_amd64.tar.gzcd frp_0.52.3_linux_amd64
(2) 配置 frpc.ini
[common]server_addr = 1.1.1.1 # 公网服务器IPserver_port = 7000 # 对应frps的bind_porttoken = your_secure_token # 与frps的token一致[vue3-app] # 自定义服务名称type = tcp # 使用TCP协议(HTTP/HTTPS可选)local_ip = 127.0.0.1 # 内网服务IP(本机)local_port = 3000 # Vue项目端口remote_port = 8080 # 公网映射端口(通过1.1.1.1:8080访问)
(3) 启动 frpc
./frpc -c ./frpc.ini# 或后台运行:nohup ./frpc -c ./frpc.ini > frpc.log 2>&1 &
3. 部署并运行 Vue3 项目
在内网服务器启动Vue项目(确保运行在3000
端口):
# 以Vite为例(端口需与frpc中的local_port一致)npm run dev -- --port 3000# 生产环境建议用PM2管理:pm2 serve dist 3000 --spa
4. 通过公网访问 Vue 项目
浏览器访问公网IP + 映射端口:http://1.1.1.1:8080
四、防火墙与安全
五、常见问题
1. 连接失败
- 检查公网
7000
端口是否开放:telnet 1.1.1.1 7000
。 -
确认
frps
/frpc
的token
一致。
2. 能连接但无法访问Vue
- 检查内网Vue项目是否运行在
local_port
(如3000
)。 -
确认公网防火墙开放
remote_port
(如8080
)。
3. 性能优化
- 生产环境建议用
type = http
+ Nginx压缩静态资源。 -
启用HTTPS:在frps配置
vhost_https_port
并配置SSL证书。
六、多项目穿透配置方案
1. 修改公网服务器 FRPS 配置 (frps.ini
)
[common]bind_port = 7000token = your_secure_token# 允许使用的端口范围(可选,但推荐设置)allow_ports = 8000-9000
无需重启 frps,配置动态生效
2. 内网服务器 FRPC 配置 (frpc.ini
)
[common]server_addr = 1.1.1.1server_port = 7000token = your_secure_token# 项目1:Vue3 管理后台[project-admin]type = tcplocal_ip = 127.0.0.1local_port = 3000remote_port = 8080 # 通过公网IP:8080访问# 项目2:Vue3 用户端[project-client]type = tcplocal_ip = 127.0.0.1local_port = 3001remote_port = 8081 # 通过公网IP:8081访问# 项目3:Node.js API 服务[project-api]type = tcplocal_ip = 127.0.0.1local_port = 4000remote_port = 8082 # 通过公网IP:8082访问# 项目4:数据库管理 (phpMyAdmin)[project-db]type = tcplocal_ip = 127.0.0.1local_port = 8080remote_port = 33060 # 通过公网IP:33060访问
3. 重启 FRPC 客户端
# 先停止运行中的frpcpkill frpc# 重新启动nohup ./frpc -c ./frpc.ini > frpc.log 2>&1 &
访问方式
localhost:3000
http://1.1.1.1:8080
localhost:3001
http://1.1.1.1:8081
localhost:4000
http://1.1.1.1:8082
localhost:8080
http://1.1.1.1:33060
七、高级技巧:使用域名区分项目
1. FRPC 配置 (HTTP 模式)
[common]# ... 同上 ...# 项目1:admin.example.com[web-admin]type = httplocal_port = 3000custom_domains = admin.example.com# 项目2:client.example.com[web-client]type = httplocal_port = 3001custom_domains = client.example.com
2. FRPS 配置
[common]bind_port = 7000token = your_secure_tokenvhost_http_port = 80 # HTTP 统一监听80端口
3. 域名解析
将两个域名都解析到公网服务器 IP 1.1.1.1
4. 访问方式
-
管理后台:
http://admin.example.com
-
用户端:
http://client.example.com
八、端口管理建议
1. 端口规划表
| 项目名称 | 内网端口 | 公网端口 | 用途 ||-------------|----------|----------|--------------|| admin | 3000 | 8080 | Vue管理后台 || client | 3001 | 8081 | 用户界面 || api-server | 4000 | 8082 | 后端API || db-manage | 8080 | 33060 | 数据库管理 |
2. 防火墙配置
# 公网服务器开放端口sudo ufw allow 7000 # FRP控制端口sudo ufw allow 8080 # 项目1sudo ufw allow 8081 # 项目2sudo ufw allow 8082 # 项目3sudo ufw allow 33060 # 项目4
九、注意事项
1. 端口冲突问题
- 确保公网服务器上的
remote_port
不重复 -
避免使用系统保留端口(<1024)
2. 动态添加项目
- 修改
frpc.ini
后只需重启 frpc 服务 -
无需重启公网服务器的 frps
3. 性能考虑
- 每个TCP连接需要约10-20KB内存
-
监控命令:
watch -n 1 \"ss -t | grep 1.1.1.1\"
4. 安全建议
# 在frpc.ini中为敏感服务添加ACL[project-db]type = tcplocal_port = 8080remote_port = 33060allow_users = admin,dev_user # 只允许特定用户访问
十、常用管理命令
1. 查看FRP连接状态
# 公网服务器netstat -antp | grep frps# 内网服务器netstat -antp | grep frpc
2. 日志查看
# 实时查看frpc日志tail -f frpc.log# 查看错误日志grep ERROR frpc.log
3. 服务管理
# 优雅重启frpckill -HUP $(pgrep frpc)
通过这种多端口配置方案,可以轻松实现多个项目的穿透访问,每个项目都有独立的公网访问入口,同时保持配置的清晰和管理的便捷性。