Project Icon

xfrpc

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

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

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

打赏

支付宝打赏

支付宝打赏

微信打赏

微信打赏

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号