xfrpc
is frp client implemented by c language for OpenWRT
The motivation to start xfrpc project is that we are OpenWRTer, and openwrt usually run in devices which have limit ROM and RAM space, however frpc always need more space and memory; therefore we launched xfrpc project.
xfrpc partially compitable with latest frp release feature, It targets to fully compatible with latest frp release.
the following table is detail compatible feature:
Feature | xfrpc | frpc |
---|---|---|
tcp | Yes | Yes |
tcpmux | Yes | Yes |
http | Yes | Yes |
https | Yes | Yes |
custom_domains | Yes | Yes |
subdomain | Yes | Yes |
use_encryption | No | Yes |
use_compression | No | Yes |
udp | No | Yes |
p2p | No | Yes |
xtcp | No | Yes |
vistor | No | Yes |
sequenceDiagram
title: xfrpc与frps通信交互时序图
participant 本地服务
participant xfrpc
participant frps
participant 远程访问用户
xfrpc ->> frps : TypeLogin Message
frps ->> xfrpc : TypeLoginResp Message
Note right of frps : 根据Login信息里面的pool值,决定给xfrpc发送几条TypeReqWorkConn请求信息
frps ->> xfrpc : frps aes-128-cfb iv[16] data
frps -->> xfrpc : TypeReqWorkConn Message
loop 根据Login中的PoolCount创建工作连接数
xfrpc -->> frps : TypeNewWorkConn Message
Note left of xfrpc : 与服务器创建代理服务工作连接,并请求新的工作连接请求
Note right of frps : 处理xfrpc端发送的TypeNewWorkConn消息,注册该工作连接到连接池中
frps ->> xfrpc : TypeStartWorkConn Message
Note left of xfrpc : 将新创建的工作连接与代理的本地服务连接做绑定
end
xfrpc ->> frps : xfrpc aes-128-cfb iv[16] data
loop 用户配置的代理服务数
xfrpc -->> frps : TypeNewProxy Message
frps -->> xfrpc : NewProxyResp Message
end
loop 心跳包检查
xfrpc -->> frps : TypePing Message
frps -->> xfrpc : TypePong Message
end
远程访问用户 ->> frps : 发起访问
frps ->> xfrpc : TypeStartWorkconn Message
loop 远程访问用户与本地服务之间的交互过程
frps ->> xfrpc : 用户数据
xfrpc ->> 本地服务 : 用户数据
本地服务 ->> xfrpc : 本地服务数据
xfrpc ->> frps : 本地服务数据
frps ->> 远程访问用户 : 本地服务数据
end
xfrp need libevent openssl-dev and json-c support
Before compile xfrp, please install libevent
and json-c
in your system.
Install json-c libevent in ubuntu 20.04 LTS
sudo apt-get install -y libjson-c-dev
sudo apt-get install -y libevent-dev
Fork xfrpc on GitHub
git clone https://github.com/${YOUR_GITHUB_ACCOUNT_NAME}/xfrpc.git
cd xfrp
mkdir build
cmake ..
make
xfrpc was recruited by openwrt community since version 1.04.515
anyway I highly recommend you to use latest version
in order to compile xfrpc in openwrt sdk environment, you should firstly make menuconfig
, then select Network --> Web Servers/Proxies ---> xfrpc
before using xfrpc, you should get frps server: frps
- frps
frps use latest release 0.42.0
# frps.ini
[common]
bind_port = 7000
run frps
./frps -c frps.ini
- xfrpc tcp
#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
- xfrpc http&https
compare with supporting tcp, supporting http&https need to add vhost_http_port&vhost_https_port in frps.ini as the following
# frps.ini
[common]
bind_port = 7000
vhost_http_port = 80
vhost_https_port = 443
# xfrpc_mini.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[http]
type = http
local_port = 80
custom_domains = www.example.com
[https]
type = https
local_port = 443
custom_domains = www.example.com
- Run in debug mode
xfrpc -c frpc_mini.ini -f -d 7
- Run in release mode :
xfrpc -c frpc_mini.ini -d 0
If running xfrpc in openwrt box, luci-app-xfrpc is a good choice
luci-app-xfrpc was recruited by luci project
See CONTRIBUTING for details on submitting patches and the contribution workflow.
QQ群 : 331230369
支付宝打赏
微信打赏