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

[每周一更]-(第139期):从FRP认识内网穿透及反向代理

在这里插入图片描述

文章目录

        • **一、FRP的核心功能与实战应用**
          • **1. 远程访问场景**
          • **2. Web服务暴露**
          • Web服务访问实际案例:
          • **3. 物联网与设备管理**
          • **4. 高级功能**
        • **二、FRP性能优化与安全加固**
        • **三、同类工具对比与选型建议**
        • **四、总结与选型建议**
        • **特殊场景解决方案**
          • **1. 跨国低延迟穿透**
          • **2. 大规模IoT设备管理**
          • **3. 企业级零信任网络**
        • 五、内网穿透**核心工具**分类

​ 该文章一直挂在TODO目录很久了,因为日常用远程桌面内网穿透场景比较多,但是毕竟不仅仅只有这个功能,今天就展开讲一讲,有需要的朋友可以参考,我所写的文章基本都是实战派,或者就是自己有使用场景,还是有参考价值,也欢迎大家来相互沟通。

因为内网穿透一直用的工具是FRP,今天从FRP来讲解。

一、FRP的核心功能与实战应用
  • 核心能力
    • 支持TCP/UDP/HTTP/HTTPS全协议,配置文件驱动。
    • 自建服务器完全可控,适合企业级定制需求。

FRP(Fast Reverse Proxy)是一款基于反向代理的内网穿透工具,通过公网服务器将内网服务暴露到外网,支持TCP、UDP、HTTP、HTTPS等多种协议。以下是其典型应用场景及实战配置方法:

使用FRP,需要有一台有公网IP的云服务器,其上运行frps服务,客户端也就是受控的电脑,需要启动frpc服务,才能进行后续操作。

外部请求地址(80/443等) ------>|服务器frps内部有监听端口、外部监听端口(80/443等)|—转发—>客户端frpc(客户端web应用等)

示意图如下:(在线预览:https://mermaid.live/edit)
在这里插入图片描述


1. 远程访问场景
  • 远程桌面(RDP/VNC)
    通过FRP将内网Windows的3389端口或Linux的VNC服务映射到公网,实现外网远程控制。
    配置示例

    [rdp]
    type = tcp
    local_port = 3389
    remote_port = 7000
    
    
    # 远程桌面配置,采用tcp协议,也可以采用udp协议,毕竟传输快,下边延伸下TCP和UDP的对比
    客户端:(frpc需要启动)
    [common]
    server_addr = 公网IP
    server_port = 8083
    
    [udp]
    type = tcp
    local_ip = 0.0.0.0
    local_port = 3389
    remote_port = 8084
    
    服务端:(frps需要启动)
    [common]
    bind_addr = 0.0.0.0
    bind_port = 8083
    
    

    优化建议:启用kcp协议降低延迟,或使用stcp模式通过密钥验证访问端,增强安全性。

    协议对比TCPUDP
    连接性面向连接(发送数据前使用三次握手建立连接)无连接(发送数据前不需要建立连接)
    可靠性可靠(丢包会自动重传)不可靠(不会)
    有序性有序(消息在传输过程中可能会乱序,后发送的消息可能会先到达,会对其进行重新排序)无序( 不会)
    有界性有界(通过字节流传输)无界(每一个包都是单独的)
    拥塞控制有(流量控制是基于滑窗协议实现的)无(没有)
    传输速度慢(需要建立连接、保证可靠性和有序性,所以比较耗时)快(视频流、广播电视、在线多媒体游戏等)
    量级重量级(建立连接、保证可靠性和有序性,就会传输更多的信息)轻量级
    头部大小大( 头部需要 20 字节)小(头部只要 8 个字节)
  • SSH访问内网服务器
    将内网Linux的22端口映射到公网,支持安全运维。
    配置示例

    [ssh]
    type = tcp
    local_port = 22
    remote_port = 6000
    

    安全加固:结合SSH密钥登录,禁用密码认证。


2. Web服务暴露
  • 本地开发环境临时公开
    将本地Web服务(如Laravel或Django)暴露到公网,方便测试或演示。
    配置示例

    [web]
    type = http
    local_port = 3000
    custom_domains = dev.example.com
    

    进阶用法:启用HTTPS(服务端配置SSL证书)、多域名复用同一端口。

  • 内网NAS/私有云穿透

    外网访问家庭NAS或Nextcloud私有云。

    配置示例

    [nas]
    type = http
    local_port = 5000
    custom_domains = nas.example.com
    

    优化建议:限制IP访问或启用HTTP Basic Auth。

Web服务访问实际案例:

配置如果只在客户端这么配置,会报错:[web] start error: type [http] not supported when vhost http port is not set

1.服务端和客户端完整配置文件

服务器端完整配置:

[common]
bind_addr = 0.0.0.0
bind_port = 8083
# 添加这一行,设置HTTP虚拟主机端口*
vhost_http_port = 8085

客户端完整配置:(同时远程桌面和Web服务)

[common]
server_addr = 公网IP
server_port = 8083

[udp]
type = tcp
local_ip = 0.0.0.0
local_port = 3389
remote_port = 8084

[web]
type = http
local_port = 8085
custom_domains = dev.example.cn

2.配置web服务器

apache配置:(实际运行服务)

<VirtualHost *:80>
    ServerName dev.example.cn
    
    ProxyRequests Off
    ProxyPreserveHost On
    
    # 转发所有请求
    ProxyPass / http://localhost:8085/
    ProxyPassReverse / http://localhost:8085/
    
    ErrorLog logs/proxy-error.log
    CustomLog logs/proxy-access.log combined
</VirtualHost>

linux 配置:(可参考)

server {
    listen 80;
    server_name dev.example.com;  # 替换为您的域名或使用 localhost

    # 日志配置
    access_log /var/log/nginx/proxy_access.log;
    error_log /var/log/nginx/proxy_error.log;

    # 转发特定路径
    location /update_unionid {
        proxy_pass http://localhost:8085/api;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 或者转发所有请求
    # location / {
    #     proxy_pass http://localhost:8085;
    #     proxy_set_header Host $host;
    #     proxy_set_header X-Real-IP $remote_addr;
    #     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #     proxy_set_header X-Forwarded-Proto $scheme;
    # }
}

3.域名解析也不能忘记

4.客户端和服务器服务启动日志:

  • 服务端:
 2025/04/08 18:09:01 [I] [http.go:110] [4bbdffd4acdff7e5] [web] http proxy listen for host [dev.example.com] location [] group [], routeByHTTPUser []
 2025/04/08 18:09:01 [I] [control.go:500] [4bbdffd4acdff7e5] new proxy [web] type [http] success
  • 客户端监听标识:
 2025/04/08 18:09:01 [I] [control.go:172] [4bbdffd4acdff7e5] [web] start proxy success

3. 物联网与设备管理
  • 智能家居控制面板
    将Home Assistant等内网服务映射到外网,支持远程控制。
    配置示例

    [home-assistant]
    type = http
    local_port = 8123
    custom_domains = home.example.com
    

    安全建议:启用TLS加密通信。

  • 摄像头/监控流媒体穿透
    外网访问内网RTSP/RTMP视频流。
    配置示例

    [camera]
    type = tcp
    local_port = 554
    remote_port = 7003
    

    注意:视频流需高带宽服务器,建议开启kcp协议。


4. 高级功能
  • 多级代理与负载均衡
    通过多个FRP节点实现流量分流或高可用架构。
    配置示例

    [common]
    server_addr = server1,server2
    server_port = 7000
    
  • 透明代理与端口复用
    单端口代理多服务(如HTTP+HTTPS)。
    配置示例

    [http-proxy]
    type = tcp
    plugin = http_proxy
    remote_port = 7006
    

二、FRP性能优化与安全加固
  1. 性能提升

    • 启用kcp协议减少丢包(配置protocol = kcp)。
    • 使用高带宽云服务器(推荐阿里云、腾讯云),静态资源通过CDN分发。
  2. 安全防护

    • 启用privilege_token和服务端密码,限制未授权访问。

    • 流量加密

      • 强制TLS:FRP启用tls_enable = true
    • 配置allow_ports限制代理端口范围,避免端口滥用。

      # frps.ini 服务端限制端口
      allow_ports = 6000-7000,80,443
      

三、同类工具对比与选型建议
工具优点缺点适用场景
FRP开源、协议全面、高度可控配置复杂、需自建服务器开发调试、自定义需求
NPS可视化界面、配置简单功能较基础轻量化穿透、远程办公
花生壳易用性高、动态域名解析免费版带宽受限、安全性风险家庭用户、快速部署
P2LinkP2P直连、低延迟、安全性高功能较少、依赖服务稳定性实时控制、视频会议
ZeroTier虚拟局域网、跨平台直连依赖网络架构、需客户端安装跨网络设备通信、IoT管理

性能对比(HTTP协议)

  • FRP:延迟104ms,吞吐13MB/s,稳定性高。
  • NPS:延迟390ms,吞吐2.95MB/s,稳定性较低。
  • P2Link:低延迟但依赖两端网络穿透成功率。

四、总结与选型建议
  • FRP优势:适合技术用户,需灵活协议支持和高可控性场景(如企业级服务穿透)。
  • Web服务为主:也可以选:Cloudflare Tunnel(免运维)或 Ngrok(快速测试)
  • 替代方案
    • 非技术用户可选向日葵或花生壳,牺牲部分性能换取易用性。
    • 实时性要求高(如游戏联机)优先P2Link或ZeroTier。

通过合理配置FRP并结合优化策略(如动静分离、CDN加速),可显著提升穿透服务的性能与安全性。若需完整代码示例或高级功能文档,可参考FRP官方文档。

特殊场景解决方案
1. 跨国低延迟穿透
  • 组合方案
    • 国内FRP节点(阿里云) + 海外Cloudflare CDN
    • 使用Anycast IP(如Cloudflare Tunnel)优化路由
2. 大规模IoT设备管理
  • 架构设计

    IoT设备
    边缘FRP节点
    中心NATS集群
    监控平台
    • 每个区域部署FRP中转,通过NATS实现消息总线
3. 企业级零信任网络
  • 组件集成
    • Tailscale + 自建DERP中继服务器
    • 结合OAuth 2.0实现员工权限分级
五、内网穿透核心工具分类
类型代表工具核心原理适用场景
反向代理FRP、NPS、Ngrok公网服务器中转流量Web服务、远程桌面、SSH
虚拟局域网ZeroTier、Tailscale创建加密虚拟网络直连设备跨网络组网、IoT设备管理
P2P穿透P2Link、NATAPPNAT穿透技术点对点直连低延迟实时通信、游戏联机
商业集成向日葵、花生壳厂商服务器中转+客户端集成功能非技术用户快速部署
云服务集成Cloudflare Tunnel基于云服务商基础设施穿透Web服务暴露、无需公网服务器
  • 个人开发者:优先选择FRP + Cloudflare Tunnel组合,平衡灵活性与成本。
  • 企业用户:采用Tailscale建立零信任网络,关键服务通过FRP做灾备穿透。
  • 物联网项目:使用P2Link实现设备直连,结合MQTT协议降低带宽消耗。

相关文章:

  • python的filter()、map()、reduce()函数测试
  • C 语言 - 指针与const复杂声明完全掌握 | 右左法则详解与实践指南
  • ES6变量声明:let、var、const全面解析
  • sudo snap升级报错
  • 源码编译安装Nginx
  • tensorflow-gpu==2.6对应的 transformers 版本
  • AI Agent
  • 蓝桥杯C++组部分填空题
  • 如何为C++实习做准备?
  • Samtec行业科普 | 人工智能嵌入式解决方案
  • Mitosis:跨框架的UI组件解决方案
  • Java 与 LibreOffice 集成开发指南
  • 嵌入式MCU常用模块
  • 玩转Docker | 使用Docker搭建Blog微博系统
  • 从零开始:在 GrapesJS Style Manager 中新增 row-gap 和 column-gap
  • API身份验证与密钥管理最佳实践
  • javaweb综合训练
  • CExercise_10_1动态数组Vector
  • scrapy爬虫框架采集完成后进行暂停延时关闭方法
  • 难度偏低,25西电人工智能学院821、833、834考研录取情况
  • 深圳优化网站公司/如何看待百度竞价排名
  • 大连专业推广平台/关键词优化软件排行
  • wordpress 免费企业主题/seo搜索方法
  • 福田企业的网站建设公司好吗/谷歌google官网
  • 用html做网站搜索框/百度电脑版网址
  • 义乌营销型网站建设/武汉整站优化