[网络] 反向代理与内网穿透:FRPC

news/2025/1/6 13:54:27/文章来源:https://www.cnblogs.com/johnnyzen/p/18651498

缘起: Gradio

  • Gradio是一款快速构建AI Web演示应用的Python Web框架(主要适用于科研、实验室,而非ToC的Web应用),其支持本地运行和远程访问。

1个极简的Gradio代码:app.py

import gradio as gr  # 导入gradio库,gradio用于快速创建机器学习模型的web界面# 定义一个名为greet的函数,接收两个参数:name 和 intensity
def greet(name, intensity):# 函数返回一个字符串,包含问候语和根据intensity重复的名字return "Hello, " + name + "!" * int(intensity)  # 使用gr.Interface创建一个UI界面,fn指定了接口的函数,inputs定义了输入类型,outputs定义了输出类型
demo = gr.Interface(fn=greet,  # 指定greet函数作为接口的回调函数inputs=["text", "slider"],  # 设置两个输入,一个文本输入框和一个滑块outputs=["text"],  # 设置一个文本输出,用于显示greet函数的结果
)#demo.launch()  # 启动界面,这将会在本地服务器上运行web应用程序
demo.launch(share=True)  # share=True 即可支持远程访问

如何运行呢?

(base) D:\Workspace\CodeRepositories\gradio-app> python app.py
信息: 用提供的模式无法找到文件。
* Running on local URL:  http://127.0.0.1:7860Could not create share link. Missing file: C:\Users\xxx\AppData\Roaming\Python\Python312\site-packages\gradio\frpc_windows_amd64_v0.3.Please check your internet connection. This can happen if your antivirus software blocks the download of this file. You can install manually by following these steps:1. Download this file: https://cdn-media.huggingface.co/frpc-gradio-0.3/frpc_windows_amd64.exe
2. Rename the downloaded file to: frpc_windows_amd64_v0.3
3. Move the file to this location: C:\Users\xxx\AppData\Roaming\Python\Python312\site-packages\gradio
  • Gradio的远程访问,无需用户精通网络和Web开发相关技术,那么它怎么做到的呢?

从上面的日志中可见,是利用了frpc这款反向代理软件。(公网IP的问题,应是Gradio组织提供的)

  • 由此,本篇的正主frpc开始。

概述:反向代理与内网穿透软件(FRPC)

  • frp 是一个可用于内网穿透高性能反向代理应用
  • 支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力
  • 且尝试性支持了点对点穿透
  • 其名称其实就是使用了 Fast Reverse Proxy 的首字母缩写。

FRPC的架构

反向代理的场景类型

类型 描述
tcp 单纯的 TCP 端口映射,服务端会根据不同的端口路由到不同的内网服务。
udp 单纯的 UDP 端口映射,服务端会根据不同的端口路由到不同的内网服务。
http 针对 HTTP 应用定制了一些额外的功能,例如修改 Host Header,增加鉴权。
https 针对 HTTPS 应用定制了一些额外的功能。
stcp 安全的 TCP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
sudp 安全的 UDP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
xtcp 点对点内网穿透代理,功能同 stcp,但是流量不需要经过服务器中转。
tcpmux 支持服务端 TCP 端口的多路复用,通过同一个端口访问不同的内网服务。

FRPC 的安装篇

FRPC Install on Windows

Step1 下载安装包

  • url
  • https://github.com/fatedier/frp/releases/tag/v0.61.0
  • https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_windows_amd64.zip
  • https://github.com/fatedier/frp/releases/tag/v0.39.1
  • https://github.com/fatedier/frp/releases/download/v0.39.1/frp_0.39.1_windows_amd64.zip

Step2 解压即安装

$ pwd
/d/Program/frpc/frp_0.39.1_windows_amd64$ ls -la
total 24262
drwxr-xr-x 1 EDY 197612        0 Jan  4 09:55 ./
drwxr-xr-x 1 EDY 197612        0 Jan  4 09:56 ../
-rw-r--r-- 1 EDY 197612    11358 Feb  9  2022 LICENSE
-rwxr-xr-x 1 EDY 197612 10769408 Feb  9  2022 frpc.exe*
-rw-r--r-- 1 EDY 197612      126 Feb  9  2022 frpc.ini
-rw-r--r-- 1 EDY 197612    10009 Feb  9  2022 frpc_full.ini
-rwxr-xr-x 1 EDY 197612 14029824 Feb  9  2022 frps.exe*
-rw-r--r-- 1 EDY 197612       26 Feb  9  2022 frps.ini
-rw-r--r-- 1 EDY 197612     5155 Feb  9  2022 frps_full.ini
drwxr-xr-x 1 EDY 197612        0 Jan  4 09:55 systemd/
  • frpc : 客户端(一般放内网服务器)
  • frps : 服务端(一般放公网服务器)

补充:v0.61.0(可见与v0.39.1的文件区别较大)

Step3 配置环境变量

  • 新建系统变量: FRP_HOME = D:\Program\frpc\frp_0.39.1_windows_amd64\

  • 编辑系统环境变量Path,新增1项:%FRP_HOME%\

Step4 验证

C:\Users\xxx>frpc --version
0.39.1C:\Users\xxx>frpc --help
frpc is the client of frp (https://github.com/fatedier/frp)Usage:frpc [flags]frpc [command]Available Commands:help        Help about any commandhttp        Run frpc with a single http proxyhttps       Run frpc with a single https proxyreload      Hot-Reload frpc configurationstatus      Overview of all proxies statusstcp        Run frpc with a single stcp proxysudp        Run frpc with a single sudp proxytcp         Run frpc with a single tcp proxytcpmux      Run frpc with a single tcpmux proxyudp         Run frpc with a single udp proxyverify      Verify that the configures is validxtcp        Run frpc with a single xtcp proxyFlags:-c, --config string   config file of frpc (default "./frpc.ini")-h, --help            help for frpc-v, --version         version of frpcUse "frpc [command] --help" for more information about a command.

Y 推荐文献

  • FRPC
  • https://github.com/fatedier/frp
  • https://github.com/fatedier/frp/releases
  • https://github.com/fatedier/frp/releases/tag/v0.39.1
  • https://github.com/fatedier/frp/releases/tag/v0.61.0
  • https://github.com/fatedier/frp/releases/download/v0.39.1/frp_0.39.1_windows_amd64.zip
  • https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_windows_amd64.zip
  • https://github.com/fatedier/frp/releases/tag/v0.3.0
  • Gradio
  • https://www.gradio.app/
  • https://www.gradio.app/docs
  • https://www.gradio.app/guides/quickstart
  • https://github.com/gradio-app/gradio
  • https://cdn-media.huggingface.co/frpc-gradio-0.3/frpc_windows_amd64.exe

应用案例

案例:将内网Linux服务器上的web网站映射到公网上去

做具体的配置前,根据对应的操作系统及架构,从github 页面下载所需版本的程序。

  • frpsfrps.ini 放到具有公网 IP 的机器上。

请注意配置防火墙安全组放过配置文件使用的端口

  • frpcfrpc.ini 放到处于内网环境的机器上。

  • 公网windows上部署frps

Step1 上传frp安装包到**公网上的Windows服务器上

Step2 修改公网服务器的配置文件frps.ini文件

Step3 在公网服务器启动frps.exe程序

  • cmd:
frps.exe -c ./frps.ini

出现 frps started successfully 代表frps启动成功

Step4 在内网liunx上部署frpc

  • frpc上传到本地内网的liunx服务器上并解压此文件
$ cd frp_0.39.1_linux_386$ ls
frpc frpc_full.ini frpc.ini frps frps_full_ini frps.ini LICENSE systemd

Step5 在内网服务器配置frpc.ini

这里需要有一个自己的公网域名

Step6 在内网服务器启动FRPC

./frpc -c ./frpc.ini

启动frpc,出现[web] start proxy success即可

Step7 在浏览器访问与验证

http://ccq.caichuanqi.cn:8000

在浏览器上访问成功

案例:通过 rdp 访问家里的机器

  • 详情参见:
  • 【附下载】带你使用frp实现内网穿透详细教程! - Zhihu

案例:通过 SSH 访问公司内网机器

  • 详情参见:
  • 【附下载】带你使用frp实现内网穿透详细教程! - Zhihu

案例:通过自定义域名访问部署于内网的 Web 服务

  • 详情参见:
  • 【附下载】带你使用frp实现内网穿透详细教程! - Zhihu

案例:对外提供简单的文件访问服务

  • 详情参见:
  • 【附下载】带你使用frp实现内网穿透详细教程! - Zhihu

FRP 常用功能

统计面板(Dashboard)

  • 通过浏览器查看 frp 的状态以及代理统计信息展示。

注:Dashboard 尚未针对大量的 proxy 数据展示做优化,如果出现 Dashboard 访问较慢的情况,请不要启用此功能。

需要在 frps.ini 中指定 dashboard 服务使用的端口,即可开启此功能:

  • 打开浏览器通过 http://[server_addr]:7500 访问 dashboard 界面,用户名密码默认为 admin 。

加密与压缩

  • 这两个功能默认是不开启的,需要在 frpc.ini 中通过配置来为指定的代理启用加密与压缩的功能,压缩算法使用 snappy:

  • 如果公司内网防火墙对外网访问进行了流量识别与屏蔽,例如禁止了 SSH 协议等,通过设置 use_encryption = true,将 frpc 与 frps 之间的通信内容加密传输,将会有效防止流量被拦截。

  • 如果传输的报文长度较长,通过设置 use_compression = true 对传输内容进行压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 CPU 资源。

TLS

  • 从 v0.25.0 版本开始 frpc 和 frps 之间支持通过 TLS 协议加密传输。通过在 frpc.ini 的 common 中配置 tls_enable = true 来启用此功能,安全性更高。

  • 为了端口复用,frp 建立 TLS 连接的第一个字节为 0x17。

注意: 启用此功能后除 xtcp 外,不需要再设置 use_encryption

代理限速

  • 目前支持在客户端的代理配置中设置代理级别的限速,限制单个 proxy 可以占用的带宽。

  • 在代理配置中增加 bandwidth_limit 字段启用此功能,目前仅支持 MB 和 KB 单位。

范围端口映射

  • 在 frpc 的配置文件中可以指定映射多个端口,目前只支持 tcp 和 udp 的类型。

这一功能通过 range: 段落标记来实现,客户端会解析这个标记中的配置,将其拆分成多个 proxy,每一个 proxy 以数字为后缀命名。

例如要映射本地 6000-6005, 6007 这 6 个端口,主要配置如下:

实际连接成功后会创建 8 个 proxy,命名为 test_tcp_0, test_tcp_1 ... test_tcp_7。

X 参考文献

  • 【附下载】带你使用frp实现内网穿透详细教程! - Zhihu
  • windows 安装 frpc - 51CTO 【推荐】

版本: frp_0.25.3_windows_amd64.exe
0.61.3的配置方式上,区别较大

  • 用FRP做内网穿透使用远程桌面连接家里的windows电脑 - Zhihu 【推荐】

版本: frp_0.33.0_linux_amd64.tar.gz
os : centos

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/863769.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows11使用pycharm连接wsl2开发基于poetry的python项目

windows11使用pycharm连接wsl2开发基于poetry的python项目 背景:公司开发的python项目用到了某个只提供了Linux版本的包,遂研究了一番如何在windows环境下进行开发。windows安装 wsl2 进入到wsl2中,安装对应的python版本,建议使用pyenv,下面以3.10.14版本为例子。 pyenv安…

【反爬虫】接口安全的风控介绍

#风控 #接口信息安全 #业务线 一、接口反爬背景二、反爬数据流框架介绍2.1 数据接入风控2.2 风险感知和策略迭代2.2.1 短线近实时监控告警2.2.2 风控策略部署2.3 异常流量处置能力2.4 网关验签组件的设计和应用2.4.1 验签整体架构2.4.2 接口验签加密流程三、反爬效果体现3.1 普…

发布blazor应用到Linux, 使用nginx作为WebSocket代理

Blazor 使用了SignalR连接, 而SignalR使用的是WebSocket WebSocket协议提供了一种创建支持客户端和服务器之间实时双向通信的 Web 应用程序的方法。作为 HTML5 的一部分,WebSocket 使开发此类应用程序比以前的方法容易得多。大多数现代浏览器都支持 WebSocket,包括 Chrome、F…

读数据保护:工作负载的可恢复性25公用云存储

公有云存储1. 对象存储 1.1. 对象存储可能是未来比较适合长期保存备份与档案的一种技术 1.2. 它的核心功能本身就已经含有保护数据所需的一些特性 1.3. 对象存储系统里的所有数据都能自动复制到多个地点,这意味着它天生就符合3-2-1原则 1.4. 对象存储还可以应对磁退化的问题,…

C#进阶

进阶 目录进阶枚举数组值类型和引用类型函数函数基础ref和out变长参数和参数默认值函数重载递归函数复杂数据类型结构体排序冒泡排序选择排序飞行棋项目C#高级语法面向对象成员变量构造函数成员属性索引器静态成员拓展方法运算符重载内部类和分部类继承里氏替换原则继承中的构造…

P11503 [NordicOI 2018] Nordic Camping

P11503 [NordicOI 2018] Nordic Camping 花了我挺长时间。 帐篷都是正方形的,可以枚举左上角,二分正方形边长,二维前缀和判断是否合法。这部分复杂度为 \(O(n^2\log n)\)。处理出来后,问题似乎就变成了矩形取最大值,单点查询。直接做是 \(\log^2\) 的,65 pts。具体就是,…

OpenXR间接链接、API层总体排序、加载器设计

OpenXR间接链接 通过加载器间接链接,应用程序动态生成OpenXR命令调度表。如果找不到加载器,或者只有比应用程序更旧的API,则此方法允许应用程序正常失败。为此,应用程序在加载器库上,使用特定平台的动态符号,查找(如dlsym())xrGetInstanceProcAddr命令的地址。一旦发…

OpenXR™加载器-设计、操作、调用链

OpenXR™加载器-设计和操作 1.2.1概述 OpenXR是一个分层体系结构,由以下元素组成: 1)OpenXR应用程序 2)OpenXR加载程序 3)OpenXR API层 4)OpenXR运行时间 一般概念适用于Windows和Linux的系统的加载程序。 首先,让把OpenXR环境看作一个整体。OpenXR应用程序位于执行链的…

经典专著《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》4本书推荐

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

使用format_obproxy_digest_log工具分析obproxy网络层耗时SQL

之前写过一个博客,介绍 ob_tools包 来实施抓取 observer 层的 gv$ob_sql_audit 的SQL,还提供一些分析SQL来通过不同维度分析缓慢的业务SQL语句,免得和应用扯皮说数据库执行SQL慢。 但是分析出服务端业务SQL语句执行时间还不够,应用也有可能会和你扯皮说obproxy转发慢,也不…