xfrpc

xfrpc

轻量级frp客户端 为OpenWRT和IoT设备提供高效内网穿透

xfrpc是一个轻量级frp客户端,用C语言编写,专为OpenWRT和IoT系统设计。它针对资源受限设备优化,占用更少空间和内存。支持TCP、HTTP、HTTPS等协议,提供OpenWRT LuCI配置界面。项目致力于与最新frp版本兼容,为内网穿透提供高效稳定的解决方案。

xfrpcOpenWRT代理服务轻量级跨平台Github开源项目

xfrpc

什么是xfrpc

xfrpc项目是用C语言编写的frp客户端实现,专为OpenWRT和物联网系统设计。该项目的主要动机是为资源有限的设备提供一个轻量级解决方案,比如OpenWRT设备通常ROM和RAM空间有限。该项目旨在提供一个比其他可用选项占用更少空间和内存的frp客户端。

开发状态

xfrpc部分兼容最新的frp发布功能,目标是完全兼容最新的frp发布版本。

以下表格详细列出了兼容功能:

功能xfrpcfrpc
tcp支持支持
tcpmux支持支持
http支持支持
https支持支持
custom_domains支持支持
subdomain支持支持
socks5支持不支持
use_encryption不支持支持
use_compression不支持支持
udp不支持支持
p2p不支持支持
xtcp不支持支持
stcp不支持支持

架构

架构

时序图

sequenceDiagram title: xfrpc与frps通信交互时序图 participant 本地服务 participant xfrpc participant frps participant 远程访问用户 xfrpc ->> frps : TypeLogin消息 frps ->> xfrpc : TypeLoginResp消息 Note right of frps : 根据Login信息里面的pool值,决定给xfrpc发送几条TypeReqWorkConn请求信息 frps ->> xfrpc : frps aes-128-cfb iv[16] 数据 frps -->> xfrpc : TypeReqWorkConn消息 loop 根据Login中的PoolCount创建工作连接数 xfrpc -->> frps : TypeNewWorkConn消息 Note left of xfrpc : 与服务器创建代理服务工作连接,并请求新的工作连接请求 Note right of frps : 处理xfrpc端发送的TypeNewWorkConn消息,注册该工作连接到连接池中 frps ->> xfrpc : TypeStartWorkConn消息 Note left of xfrpc : 将新创建的工作连接与代理的本地服务连接做绑定 end xfrpc ->> frps : xfrpc aes-128-cfb iv[16] 数据 loop 用户配置的代理服务数 xfrpc -->> frps : TypeNewProxy消息 frps -->> xfrpc : NewProxyResp消息 end loop 心跳包检查 xfrpc -->> frps : TypePing消息 frps -->> xfrpc : TypePong消息 end 远程访问用户 ->> frps : 发起访问 frps ->> xfrpc : TypeStartWorkconn消息 loop 远程访问用户与本地服务之间的交互过程 frps ->> xfrpc : 用户数据 xfrpc ->> 本地服务 : 用户数据 本地服务 ->> xfrpc : 本地服务数据 xfrpc ->> frps : 本地服务数据 frps ->> 远程访问用户 : 本地服务数据 end

如何构建

在Ubuntu 20.04.3 LTS上构建

要在Ubuntu 20.04 LTS上运行xfrpc,你需要安装以下库:libevent、openssl-dev和json-c。在终端中使用以下命令安装这些库:

sudo apt-get update
sudo apt-get install -y libjson-c-dev libevent-dev libssl-dev

安装完所需的库后,你可以通过在GitHub上fork xfrpc仓库,然后使用以下命令将其克隆到你的本地机器来下载xfrpc源代码:

git clone https://github.com/${YOUR_GITHUB_ACCOUNT_NAME}/xfrpc.git

进入xfrp目录并创建一个build目录,使用以下命令:

cd xfrp
mkdir build

使用以下命令构建和安装xfrpc: 这将编译 xfrpc 并在 build 目录中创建一个可执行文件。然后,您可以通过在终端中运行适当的命令来使用该可执行文件运行 xfrpc。

使用内置第三方库构建 xfrpc

使用内置第三方库构建 xfrpc。

需要 cmake 版本 > 3.1。

要使用内置的第三方库构建 xfrpc,您可以在 GitHub 上 fork xfrpc 仓库,然后在本地克隆它。接着,进入 xfrp 目录,创建一个 build 目录,并使用 cmake 配置构建。

git clone https://github.com/${YOUR_GITHUB_ACCOUNT_NAME}/xfrpc.git cd xfrp mkdir build cmake -D THIRDPARTY_STATIC_BUILD=ON .. make

通过设置 THIRDPARTY_STATIC_BUILD=ON,构建过程将使用 xfrpc 源代码中包含的库,而不是使用系统上安装的库。

THIRDPARTY_STATIC_BUILD 参数默认设置为 OFF,这意味着默认情况下构建过程将使用系统上安装的库。

需要注意的是,您需要 cmake 版本大于 3.1 才能使用此功能。

使用内置第三方库交叉编译 xfrpc

在 x86 架构下编译 arm 架构或 mips 架构 xfrpc 的方法如下。

在 Ubuntu 22.04 LTS 上测试

交叉编译 mips 架构 xfrpc(仅支持 linux mips,不支持 irix mips) 如果在特定的 mips 架构上无法运行,请修改 thirdparty 文件夹中的 CMakeLists.txt,将 linux-mips32 字符串改为 linux-generic32。修改后可以工作。

sudo apt-get install gcc-mips-linux-gnu # 安装 mips-gcc 编译器
mkdir build && cd build
cmake -DTHIRDPARTY_STATIC_BUILD=mips -DCMAKE_C_COMPILER=mips-linux-gnu-gcc ..
make

CMAKE_C_COMPILER 标志是您的交叉编译器的路径。建议将其放入环境变量中。

交叉编译 arm 架构 xfrpc

sudo apt-get install arm-linux-gnueabihf-gcc
mkdir build && cd build
cmake -DTHIRDPARTY_STATIC_BUILD=arm -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc ..
make

在 Alpine 容器中构建静态二进制文件

在项目根目录下

$ DOCKER_BUILDKIT=1 docker build --output out . -f docker/Dockerfile $ ls out/ xfrpc

在 OpenWrt master 上构建

自版本 1.04.515 起,xfrpc 已包含在 OpenWrt 社区中,这使用户可以轻松地将其包含在自定义固件镜像中。建议使用最新版本的 xfrpc,因为它可能包含错误修复和新功能。

要在 OpenWrt 固件镜像中包含 xfrpc,您可以使用 make menuconfig 命令打开配置菜单。在菜单中,导航至"Network",选择"Web Servers/Proxies",然后选择 xfrpc。这将在将要构建的固件镜像中包含 xfrpc。

使用 asan 构建 xfrpc(用于检测内存泄漏)

当遇到段错误时,请使用以下命令编译 xfrpc:

cmake -DCMAKE_BUILD_TYPE=Debug ..

现在您的 xfrpc 可以检测内存泄漏。我们将来会在 CI 流程中添加它。

快速使用指南

在使用 xfrpc 之前,您应该获取 frps 服务器:frps

frps 是 FRP(快速反向代理)系统的服务器端组件,用于将传入连接转发到 xfrpc。

  • frps

要运行 frps,您可以使用以下命令,提供 frps 配置文件的路径:

./frps -c frps.ini

示例中提供了一个 frps.ini 配置文件示例,将 frps 绑定到监听 7000 端口。

# frps.ini
[common]
bind_port = 7000
  • xfrpc tcp 支持

xfrpc 是 FRP 系统的客户端组件,可用于转发 TCP 连接。要将传入的 TCP 连接转发到本地服务,您可以在 xfrpc_mini.ini 文件中使用以下示例配置 xfrpc

#xfrpc_mini.ini 
[common]
server_addr = your_server_ip
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6128

此配置告诉 frp 服务器(frps)将传入的远程端口 6128 上的连接转发到 xfrpc 客户端。xfrpc 客户端随后会将这些连接转发到运行在 IP 地址 127.0.0.1 和端口 22 上的本地服务。

  • xfrpc http&https 支持 在xfrpc中支持HTTP和HTTPS相比仅支持TCP需要额外的配置。在frps.ini配置文件中,必须添加vhost_http_port和vhost_https_port选项来指定frp服务器(frps)将监听传入HTTP和HTTPS连接的端口。
# frps.ini
[common]
bind_port = 7000
vhost_http_port = 80
vhost_https_port = 443

确保xfrpc客户端正确配置以与frp服务器通信很重要,需要在xfrpc配置文件中指定正确的服务器地址和端口。

# xfrpc_mini.ini 
[common]
server_addr = x.x.x.x
server_port = 7000

[http]
type = http
local_port = 80
local_ip = 127.0.0.1
custom_domains = www.example.com

[https]
type = https
local_port = 443
local_ip = 127.0.0.1
custom_domains = www.example.com

FRP服务器(frps)将把传入的HTTP和HTTPS连接转发到域名"www.example.com",具体位置是xfrpc在配置文件中指定的本地IP和端口(分别为127.0.0.1:80和127.0.0.1:443)。

需要注意的是,域名"www.example.com"应指向FRP服务器(frps)的公共IP地址,这样当用户的HTTP和HTTPS连接访问该域名时,FRP服务器就可以将这些连接转发给xfrpc客户端。这可以通过配置DNS服务器或使用动态DNS服务来实现。

  • 在调试模式下运行

为了排查运行xfrpc时的问题,你可以使用调试模式。这种模式在运行时会提供更多信息。

xfrpc -c frpc_mini.ini -f -d 7
  • 在发布模式下运行:
xfrpc -c frpc_mini.ini -d 0

需要注意的是,在发布模式下运行xfrpc会生成较少的日志输出,运行速度也会比调试模式更快,因此在生产环境中建议使用发布模式运行xfrpc。

OpenWrt LuCI配置界面

如果你在OpenWRT设备上运行xfrpc,luci-app-xfrpc是一个不错的选择,它提供了一个基于Web的界面来配置和管理xfrpc。luci-app-xfrpc是LuCI Web界面的一个模块,LuCI是OpenWRT的默认Web界面。

luci-app-xfrpc已被LuCI项目采用,LuCI是OpenWRT的官方Web界面。这意味着它是一个受支持且维护良好的选项,用于在OpenWRT设备上管理xfrpc。

luci-app-xfrpc可以通过OpenWRT的opkg包管理器安装,它提供了一个用户友好的界面来配置xfrpc客户端,包括设置多个连接、自定义域名等选项。

如何为我们的项目做贡献

有关提交补丁和贡献工作流程的详细信息,请参阅CONTRIBUTING

联系方式

QQ群:331230369

请支持我们并为我们的项目点星

Star History Chart

打赏

支付宝打赏

支付宝打赏

微信打赏

微信打赏

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多