当前位置: 首页 > news >正文

使用 frp 实现内网穿透:从零到一的完整指南

使用 frp 实现内网穿透:从零到一的完整指南

🎁 DeepSeek满血版免费领啦!字节跳动火山引擎官方,免费抵扣3625万tokens,畅享R1与V3模型!参与入口:点击进入

为什么需要内网穿透?

在日常开发或家庭网络中,我们常常需要访问位于内网(如公司、家庭局域网)的设备或服务(如远程桌面、NAS、Web服务器)。然而,由于缺乏公网IP或防火墙限制,这些服务无法直接从外网访问。

内网穿透(NAT穿透) 技术应运而生,它能将内网服务暴露到公网。而 frp (Fast Reverse Proxy) 是一款开源、高效的内网穿透工具,支持 TCP/UDP/HTTP/HTTPS 等多种协议,配置简单且社区活跃。

本文将从原理到实践,手把手教你如何使用 frp 实现内网穿透。

一、frp 的核心概念

1.1 工作原理

frp 分为两个角色:

  • 服务端(frps):部署在具有公网 IP 的服务器(如云服务器),负责接收外部请求并转发到内网。

  • 客户端(frpc):运行在内网设备上,注册到服务端并建立隧道,将本地服务暴露出去。

    [内网服务器] <-> [FRP客户端(frpc)] <-> [FRP服务端(frps)] <-> [公网用户]
    

1.2 适用场景

  • 远程访问内网 SSH/RDP 服务
  • 对外发布内网 Web 应用(如个人博客、测试环境)
  • 穿透 NAT 访问 IoT 设备(如树莓派、摄像头)

1.3 主要特性

  • 多协议支持:TCP、UDP、HTTP、HTTPS等
  • 安全性:支持TLS加密传输
  • 高性能:TCP连接复用
  • 负载均衡:支持多个代理的负载均衡
  • 端口复用:多个服务可以复用同一个端口
  • P2P通信:支持点对点直接通信
  • 插件系统:提供丰富的插件扩展功能

二、准备工作

  • 公网服务器:如阿里云、腾讯云(需开放相关端口)。
  • 内网设备:目标服务所在设备(如本地电脑、NAS)。
  • 下载 frp:从 GitHub Release 下载对应系统的版本(服务端与客户端版本需一致)。

三、服务端(frps)配置

基础配置

  1. 解压并编辑配置文件:

    tar -zxvf frp_*.tar.gz
    cd frp_*
    vi frps.ini
    
  2. 配置示例(frps.ini):

    [common]
    bind_port = 7000             # 客户端连接的端口
    token = your_secure_token    # 认证令牌(客户端需一致)
    dashboard_port = 7500        # 服务端仪表盘的端口, 可以用浏览器访问查看
    dashboard_user = admin       # 服务端仪表盘的用户密码
    dashboard_pwd = your_password
    
    # 日志保存设定, 保存位置、保存时长
    log_file = ./frps.log
    log_level = info
    log_max_days = 7
    
  3. 启动服务端

    ./frps -c frps.ini
    

进阶配置

  • 限制可代理的端口范围(增强安全性):

    allow_ports = 6000-7000,8000,9000-9100
    
  • 域名访问支持:

    vhost_http_port = 80    # HTTP 服务端口
    vhost_https_port = 443  # HTTPS 服务端口
    

设置开机自启(Linux)

  1. 使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frps.service 文件,用于配置 frps 服务。

    [Unit]
    # 服务名称,可自定义
    Description = frp server
    After = network.target syslog.target
    Wants = network.target
    
    [Service]
    Type = simple
    # 启动frps的命令,需修改为您的frps的安装路径
    ExecStart = /path/to/frps -c /path/to/frps.toml
    
    [Install]
    WantedBy = multi-user.target
    
  2. 使用 systemd 命令管理 frps 服务

    # 启动frp
    sudo systemctl start frps
    # 停止frp
    sudo systemctl stop frps
    # 重启frp
    sudo systemctl restart frps
    # 查看frp状态
    sudo systemctl status frps
    
    
  3. 启动并启用服务:

    systemctl start frps
    systemctl enable frps
    

四、客户端(frpc)配置

基础配置

  1. 解压并编辑配置文件:

    tar -zxvf frp_*.tar.gz
    cd frp_*
    vi frpc.ini
    
  2. 配置(frpc.ini)

    [common]
    # 服务端公网IP
    server_addr = [服务端公网IP]
    # 客户端访问服务端的密码
    token = abcdefg
    # 客户端与服务端通信端口
    server_port = 7000
    
    [range:ssh]
    # 指定TCP连接类型
    type = tcp
    # 客户端IP, 这里填本地IP就可以
    local_ip = 127.0.0.1
    # 当前设备开放的远程连接端口, 默认为22
    local_port = 22
    # 表示服务端的代理端口号
    remote_port = 33022
    # 是否加密
    use_encryption = true
    # 是否压缩
    use_compression = false
    
    # 示例1:暴露 SSH 服务(通过公网IP:6000访问内网22端口)
    [ssh]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 22
    remote_port = 6000
    
    # 示例2:通过域名访问内网 Web 服务
    [web]
    type = http
    local_port = 8080
    custom_domains = www.yourdomain.com
    
    # 数据库访问
    [mysql]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 3306
    remote_port = 3306
    
  3. 启动客户端

    ./frpc -c frpc.ini
    

多服务配置

# 远程桌面(RDP)
[rdp]
type = tcp
local_port = 3389
remote_port = 7001

# 内网 NAS 的 HTTP 服务
[nas]
type = http
local_port = 5000
subdomain = nas  # 需服务端配置 subdomain_host

五、测试与验证

访问穿透的服务

  • SSH 连接:

    ssh -p 6000 user@your_server_ip
    
  • Web 服务:

    浏览器访问 http://www.yourdomain.com(需域名解析到服务端IP)。
    

监控 frp 状态

访问 http://your_server_ip:7500,输入仪表盘账号密码,查看流量统计和连接状态。

六、安全加固与优化

安全建议

  • 使用强 Token:避免使用默认或简单 token。

  • 限制端口范围:通过 allow_ports 减少攻击面。

  • 启用 TLS 加密(客户端配置):

    [common]
    tls_enable = true
    

性能优化

  • 启用压缩(减少带宽占用):

    use_compression = true
    

七、常见问题解决

  1. 无法连接服务端
    • 检查服务端防火墙是否放行 bind_port(如7000)。
    • 确认客户端配置的 server_addr 和 token 正确。
  2. 域名访问提示 404
    • 确保域名已解析到服务端 IP。
    • 检查客户端配置的 custom_domains 或 subdomain。
  3. 仪表盘无法访问
    • 检查 dashboard_port 是否开放,或尝试关闭服务端防火墙测试。

声明:本文为技术分享,请确保在使用内网穿透时遵守当地法律法规,勿用于非法用途。
frp官网传送门 点击地址 FRP

🎁 DeepSeek满血版免费领啦!字节跳动火山引擎官方,免费抵扣3625万tokens,畅享R1与V3模型!参与入口:点击进入

相关文章:

  • Uniapp 小程序复制、粘贴功能实现
  • c++:多态
  • 算法题(79):两个数组的交集
  • 七、Redis集群高可用
  • 第74节 绘制点和线条( LineTo 和 MoveTo )
  • lombok 的注解说明
  • 使用DeepSeek/chatgpt等AI工具辅助网络协议流量数据包分析
  • 0—QT ui界面一览
  • 【网络】HTTPS协议原理
  • STM32的C语言软件延时函数
  • Jquery详解
  • 模型和数据集的平台之在Hugging Face上进行模型下载、上传以及创建专属Space
  • 数据存储:一文掌握存储数据到mysql的详细使用
  • HIVE SQL函数之比较函数
  • 51单片机编程学习笔记——LED原理图
  • uni-app 开发 App 、 H5 横屏签名(基于lime-signature)
  • SCIKIT-LEARN 决策树实现csv文档简单的推论预测
  • 分布式爬虫
  • drupal简介
  • 工作中遇到的EXCEL小问题:多行有间隔符的合并
  • 市场监管总局出手整治涉企乱收费,聚焦政府部门及下属单位等领域
  • 制定出台民营经济促进法有何重大意义?全国人大常委会法工委回应
  • 住房和城乡建设部办公厅主任李晓龙已任部总工程师
  • 笔墨如何“构城”?上海美院城市山水晋京展出
  • 国泰海通合并后首份业绩报告出炉:一季度净利润增逾391%
  • 人民日报:在大有可为的时代大有作为