云计算百科
云计算领域专业知识百科平台

【内网穿透】使用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.gz
    tar -zxvf frp_0.52.3_linux_amd64.tar.gz
    cd 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.gz
    tar -zxvf frp_0.52.3_linux_amd64.tar.gz
    cd frp_0.52.3_linux_amd64

    (2) 配置 frpc.ini

    [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

    ./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


    四、防火墙与安全

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

    五、常见问题

    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 = 7000
    token = your_secure_token
    # 允许使用的端口范围(可选,但推荐设置)
    allow_ports = 8000-9000

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

    2. 内网服务器 FRPC 配置 (frpc.ini)

    [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 客户端

    # 先停止运行中的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 模式)

    [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 配置

    [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. 端口规划表

    | 项目名称 | 内网端口 | 公网端口 | 用途 |
    |————-|———-|———-|————–|
    | 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 # 项目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. 安全建议

    # 在frpc.ini中为敏感服务添加ACL
    [project-db]
    type = tcp
    local_port = 8080
    remote_port = 33060
    allow_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. 服务管理

    # 优雅重启frpc
    kill -HUP $(pgrep frpc)

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

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 【内网穿透】使用FRP实现内网与公网Linux/Ubuntu服务器穿透&项目部署&多项目穿透方案
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!