【内网穿透】使用FRP实现内网与公网Linux/Ubuntu服务器穿透&项目部署&多项目穿透方案

一、核心原理

FRP通过公网服务器(frps) 反向代理内网服务器(frpc) 的服务,将内网端口映射到公网端口,实现穿透。


二、准备工作

  1. 公网服务器 (假设IP:1.1.1.1

    开放端口:7000(FRP服务端通信端口)、8080(映射后访问Vue的端口)。

  2. 内网服务器

    运行Vue3项目(例如在localhost:3000)。

  3. 域名(可选,若需域名访问需提前解析到公网IP)。


三、具体步骤

1. 公网服务器部署 FRP 服务端(frps)

(1) 下载并解压 FRP

bash 复制代码
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
tar -zxvf frp_0.52.3_linux_amd64.tar.gz
cd frp_0.52.3_linux_amd64

(2) 配置 frps.ini

bash 复制代码
[common]
bind_port = 7000  # 服务端监听端口
token = your_secure_token  # 客户端连接凭证(建议强密码)
dashboard_port = 7500      # 监控面板端口(可选)
dashboard_user = admin     # 面板用户名(可选)
dashboard_pwd = admin_pwd  # 面板密码(可选)

(3) 启动 frps

bash 复制代码
./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(同服务端步骤)

bash 复制代码
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
tar -zxvf frp_0.52.3_linux_amd64.tar.gz
cd frp_0.52.3_linux_amd64

(2) 配置 frpc.ini

bash 复制代码
[common]
server_addr = 1.1.1.1    # 公网服务器IP
server_port = 7000       # 对应frps的bind_port
token = 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

bash 复制代码
./frpc -c ./frpc.ini
# 或后台运行:nohup ./frpc -c ./frpc.ini > frpc.log 2>&1 &
3. 部署并运行 Vue3 项目

在内网服务器启动Vue项目(确保运行在3000端口):

bash 复制代码
# 以Vite为例(端口需与frpc中的local_port一致)
npm run dev -- --port 3000
# 生产环境建议用PM2管理:pm2 serve dist 3000 --spa
4. 通过公网访问 Vue 项目

浏览器访问公网IP + 映射端口:http://1.1.1.1:8080


四、防火墙与安全

位置 需开放端口 说明
公网服务器 TCP: 7000 FRP服务端通信
公网服务器 TCP: 8080 访问Vue的端口
公网服务器 TCP: 80/443 若使用域名访问需开放
内网服务器 无特殊要求 只需能访问公网7000端口

五、常见问题

1. 连接失败

  • 检查公网7000端口是否开放:telnet 1.1.1.1 7000
  • 确认frps/frpctoken一致。

2. 能连接但无法访问Vue

  • 检查内网Vue项目是否运行在local_port(如3000)。
  • 确认公网防火墙开放remote_port(如8080)。

3. 性能优化

  • 生产环境建议用type = http + Nginx压缩静态资源。
  • 启用HTTPS:在frps配置vhost_https_port并配置SSL证书。

六、多项目穿透配置方案

1. 修改公网服务器 FRPS 配置 (frps.ini)
bash 复制代码
[common]
bind_port = 7000
token = your_secure_token
# 允许使用的端口范围(可选,但推荐设置)
allow_ports = 8000-9000

无需重启 frps,配置动态生效

2. 内网服务器 FRPC 配置 (frpc.ini)
bash 复制代码
[common]
server_addr = 1.1.1.1
server_port = 7000
token = your_secure_token

# 项目1:Vue3 管理后台
[project-admin]
type = tcp
local_ip = 127.0.0.1
local_port = 3000
remote_port = 8080  # 通过公网IP:8080访问

# 项目2:Vue3 用户端
[project-client]
type = tcp
local_ip = 127.0.0.1
local_port = 3001
remote_port = 8081  # 通过公网IP:8081访问

# 项目3:Node.js API 服务
[project-api]
type = tcp
local_ip = 127.0.0.1
local_port = 4000
remote_port = 8082  # 通过公网IP:8082访问

# 项目4:数据库管理 (phpMyAdmin)
[project-db]
type = tcp
local_ip = 127.0.0.1
local_port = 8080
remote_port = 33060  # 通过公网IP:33060访问
3. 重启 FRPC 客户端
bash 复制代码
# 先停止运行中的frpc
pkill frpc

# 重新启动
nohup ./frpc -c ./frpc.ini > frpc.log 2>&1 &

访问方式

项目 内网地址 公网访问地址
Vue3 管理后台 localhost:3000 http://1.1.1.1:8080
Vue3 用户端 localhost:3001 http://1.1.1.1:8081
Node.js API localhost:4000 http://1.1.1.1:8082
数据库管理 localhost:8080 http://1.1.1.1:33060

七、高级技巧:使用域名区分项目

1. FRPC 配置 (HTTP 模式)
bash 复制代码
[common]
# ... 同上 ...

# 项目1:admin.example.com
[web-admin]
type = http
local_port = 3000
custom_domains = admin.example.com

# 项目2:client.example.com
[web-client]
type = http
local_port = 3001
custom_domains = client.example.com
2. FRPS 配置
bash 复制代码
[common]
bind_port = 7000
token = your_secure_token
vhost_http_port = 80  # HTTP 统一监听80端口
3. 域名解析

将两个域名都解析到公网服务器 IP 1.1.1.1

4. 访问方式
  • 管理后台: http://admin.example.com

  • 用户端: http://client.example.com


八、端口管理建议

1. 端口规划表

bash 复制代码
| 项目名称    | 内网端口 | 公网端口 | 用途         |
|-------------|----------|----------|--------------|
| admin       | 3000     | 8080     | Vue管理后台  |
| client      | 3001     | 8081     | 用户界面     |
| api-server  | 4000     | 8082     | 后端API      |
| db-manage   | 8080     | 33060    | 数据库管理   |

2. 防火墙配置

bash 复制代码
# 公网服务器开放端口
sudo ufw allow 7000  # FRP控制端口
sudo ufw allow 8080  # 项目1
sudo ufw allow 8081  # 项目2
sudo ufw allow 8082  # 项目3
sudo 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. 安全建议

bash 复制代码
# 在frpc.ini中为敏感服务添加ACL
[project-db]
type = tcp
local_port = 8080
remote_port = 33060
allow_users = admin,dev_user  # 只允许特定用户访问

十、常用管理命令

1. 查看FRP连接状态

bash 复制代码
# 公网服务器
netstat -antp | grep frps

# 内网服务器
netstat -antp | grep frpc

2. 日志查看

bash 复制代码
# 实时查看frpc日志
tail -f frpc.log

# 查看错误日志
grep ERROR frpc.log

3. 服务管理

bash 复制代码
# 优雅重启frpc
kill -HUP $(pgrep frpc)

通过这种多端口配置方案,可以轻松实现多个项目的穿透访问,每个项目都有独立的公网访问入口,同时保持配置的清晰和管理的便捷性。

相关推荐
程序员佳佳几秒前
2025年大模型终极横评:GPT-5.2、Banana Pro与DeepSeek V3.2实战硬核比拼(附统一接入方案)
服务器·数据库·人工智能·python·gpt·api
( •̀∀•́ )9209 分钟前
GitHub Actions SSH 部署密钥
运维·ssh·github
louqle24 分钟前
docker基本知识及常用命令汇总
运维·docker·容器
学烹饪的小胡桃39 分钟前
【运维学习】实时性能监控工具 WGCLOUD v3.6.2 更新介绍
linux·运维·服务器·学习·工单系统
北邮刘老师1 小时前
【智能体互联协议解析】需要“智能体名字系统”(ANS)吗?
网络·人工智能·大模型·智能体·智能体互联网
叫致寒吧1 小时前
Docker
运维·docker·容器
白露与泡影2 小时前
使用systemd,把服务装进 Linux 心脏里~
linux·运维·python
照海19Gin2 小时前
【企业网架构实验解析】三层组网与 AC+AP 无线部署的协议逻辑(eNSP 仿真实践)
网络
Lilixxs2 小时前
wireshark LLDP 协议抓包获取 M580 PLC 网口地址
网络·测试工具·wireshark·plc·施耐德·lldp·m580
l1t2 小时前
用docker安装oracle 19c
运维·数据库·docker·oracle·容器