type
status
date
slug
summary
tags
category
icon
password

🌐 背景介绍

由于资源需求,需要将内网服务暴露到公网以便远程访问。结合了我自己现有的设备
  • 拥有一台阿里云等云服务商的VPS服务器(有公网IP)
  • 同时还有一台或多台位于内网环境的主机/服务器
  • 需要稳定、安全地将内网服务暴露到公网
虽然市场上有诸如Ngrok等内网穿透工具,但它们往往提供随机域名,且免费版本存在诸多限制。拥有自己的VPS服务器时,使用FRP是一个更加灵活、稳定且经济的选择。

⚔️ FRP vs. Ngrok 比较

特性
FRP
Ngrok
价格
免费开源
基础功能免费,高级功能付费
端点稳定性
固定IP和端口
免费版随机域名,端点不固定
自定义配置
高度可定制
免费版配置有限
部署控制
完全自主控制
依赖第三方服务
适用场景
已有VPS服务器
临时测试或无服务器资源

🔄 内网穿透网络架构

📝 概述

FRP (Fast Reverse Proxy) 是一个高性能的反向代理应用,可以帮助您将内网服务通过具有公网 IP 的服务器暴露到互联网上。它支持TCP、UDP、HTTP、HTTPS等多种协议,适用于各类内网穿透场景。

🔧 常见应用场景

  • 远程访问家庭设备:访问家庭NAS、智能家居设备
  • 开发环境共享:将本地开发环境分享给团队成员或客户
  • 远程工作:安全访问公司内网资源
  • 临时服务部署:快速发布内网Web应用到公网

🖥️ 服务器端配置 (frps)

1. 安装 FRP 服务端

🗣
Github 阿里云可能下载较慢,特殊原因,可以使用 fastgithub https://githubfast.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz

2. 服务端配置文件

创建 /usr/local/frp/frps.toml 配置文件:

3. 创建系统服务

创建 /etc/systemd/system/frps.service 文件:

4. 启动服务

5. 防火墙配置

注意在云服务器管理台开放对应端口,确保以下端口防火墙中开放:
  • 7000: FRP 主服务端口
  • 7500: Web 管理界面端口
  • 6000: SSH 隧道端口
  • 8000-8001: Web 服务端口
  • 6380: Redis 服务端口

💻 客户端配置 (frpc)

1. 安装 FRP 客户端

2. 客户端配置文件

创建 /usr/local/frp/frpc.toml 配置文件:

3. 创建系统服务

创建 /etc/systemd/system/frpc.service 文件:

4. 启动服务

🔄 端口映射配置详解

基本语法

实际示例

示例1: 映射本地3001端口到远程8001端口

访问方式: http://YOUR_SERVER_IP:8001

示例2: 映射本地SSH服务

访问方式: ssh user@YOUR_SERVER_IP -p 6000

示例3: 映射本地数据库服务

访问方式: mysql -h YOUR_SERVER_IP -P 3307 -u username -p

示例4: HTTP服务的高级配置

访问方式: http://api.yourdomain.com(需要配置DNS)

🛠️ 常用管理命令

服务端管理

客户端管理

🖥️ Web 管理界面

访问 http://YOUR_SERVER_IP:7500 查看 FRP 管理界面
  • 用户名: admin
  • 密码: admin
管理界面功能:
  • 查看所有活动连接
  • 监控流量统计
  • 管理代理规则
  • 查看服务状态

🚨 故障排除

常见问题

  1. Token 认证失败
      • 确保服务端和客户端的 auth.token 配置一致
      • 检查日志中的错误信息
  1. 端口被占用
      • 使用 netstat -tlnp | grep 端口号 检查端口占用情况
      • 尝试修改配置使用其他端口
  1. 防火墙阻止连接
      • 确保服务器防火墙开放了相应端口
      • 检查云服务商的安全组设置
  1. 服务无法启动
      • 检查配置文件语法是否正确
      • 查看系统日志: sudo journalctl -u frpc -f
      • 确保配置的路径正确
  1. 连接断开问题
      • 在配置中添加心跳设置:heartbeatInterval = 30
      • 增加重连超时:loginFailRetryWaitTime = 10

测试连接结果

Redis测试成功
notion image

🔒 安全建议

  1. 修改默认端口: 避免使用默认的 7000 端口,降低被扫描风险
  1. 使用强密码: 设置复杂的 token 和管理界面密码,不使用示例中的"admin"
  1. 限制访问: 通过防火墙限制不必要的端口访问,只开放必要的服务
  1. 启用TLS加密: 在配置中添加TLS相关设置增强传输安全性
    1. 定期更新: 保持FRP版本为最新版本,修复已知漏洞
    1. 监控日志: 定期检查访问日志,发现异常行为
    1. 使用白名单: 限制允许访问的IP地址

      📊 性能优化

      1. 压缩传输数据
        1. 多路复用
          1. 合理设置缓冲区
            1. 使用适当的协议
                • 对于HTTP服务,使用HTTP类型而非TCP可获得更好性能
                • 对于文件传输,考虑使用UDP类型

            配置完成后,本地服务就可以通过公网服务器访问了!如有疑问,可以参考FRP官方文档获取更多详细信息。
             
            线程模型浅述理财摘录
            Loading...