frp 可能自己二开吗?

285 天前
 dzdh

业务需要,想服务器开放 N 个端口,然后 frp 客户端链接上来,每个客户端单独一个端口,访问服务端的某个端口,等于直接访问某个客户端。

等于是 s1..SN -> frp server : PORT -> Xclient

而且客户端要强限制,不能随意链接其他端口,每个端口不同的 token ,可能要查询数据库。

难度大么

2239 次点击
所在节点    问与答
17 条回复
ccc008
285 天前
可以二开,frp 本身就开源的
pkxutao
285 天前
每个端口不同 token 这个不确定是否满足,其他的不就是 frp 基础功能么
dzdh
285 天前
@pkxutao
@ccc008

想实现一个进程,根据数据库里的配置,不同的 token 对应不同的端口。

客户端内钉死服务器的 ip ,双击客户端,GUI 提示输入 token 。根据 token 链接到服务器的某个端口,然后访问服务器的这个端口,就等于是访问客户端。
yplam
285 天前
可以换一种思路实现,本地不存配置文件,客户端 token 请求后端接口生成对应配置,然后就是正常的启动 frp 程序;在服务名称里面加点校验字符串,服务端把不合法的踢掉
dzdh
285 天前
@yplam

客户端本地内嵌个 socks5 代理服务器,绑定本地 10000 端口,然后根据 token 链接上服务器。

服务器上访问服务器端口,远程连接到本地的 socks5 代理服务器 这个场景应该能实现的吧
pkxutao
285 天前
@dzdh 你这个需求我还真思考过,我有另一种实现方案,你现在鉴权放在客户端的 frp 上,但是换一种思路,把鉴权放在服务端去,例如每台设备的 ssh 密码不一样,只能通过服务端获取,服务端来做鉴权,告诉使用的人想要连接的设备密码是多少然后才开始连接
yplam
285 天前
@dzdh 所以你的业务场景是把内网服务通过 socks5 暴露到公网?这种方式实现应该是没问题,不过可能有安全性以及资源问题
isnullstring
285 天前
NPS
exqibao
285 天前
可以试试 rathole ,支持配置热加载,而且就是一个 token 对应服务器一个端口的。
microwhite
285 天前
Sharuru
285 天前
以前做过一个简单版本的,所有配置的 service name 等都是 uuid 随机生成,外面用 C# 套个 GUI ,用户运行时输入一个 key 后请求一串加密内容,解密后就是命令行运行参数,丢给 frp 运行。frp 自己也重新编译过,去掉了一些输出,硬编码一些地址信息。
MADBOB
285 天前
我们业务也有这种需求,最后选择了 NPS,仅在客户端配置 key ,每个客户端一个 key ,所有端口转发相关的配置全在服务端配置,有一定的安全性。
mxT52CRuqR6o5
285 天前
有没有可能二开得问你自己啊
Cola98
285 天前
应该是可以,我目前也有这种需求,大概是想将家里的 k8s 集群对外提供服务,想的是把 frp 对接一个 nginx 网关,然后网关里面集成服务
dzdh
284 天前
@yplam #4

尝试了一下,还是有点难度的。

我只是简单的应用。

这样看可以不可以。

我用 go 写个 server 端,开放个 tcp 监听,每个链接标记 auth 状态,auth:false 的,for read 第一行找到 token ,开放新端口,io.copy 。

nodejs 连接,发送 token+\n

这样逻辑上应该是 ok 的吧
yplam
284 天前
@dzdh socks5 协议跟这个差别不大吧,不懂为何还要自定义认证。

另外,如果业务上只需要简单的 TCP 转发感觉也没必要上 frp ,直接在 yamux 上面加上自己的认证逻辑可能更简单
dzdh
284 天前
@yplam #16

最终目的是通过服务端发送 http 请求 经过客户端的代理。

客户端由服务端分配好的端口。

abc : 10000
ccc : 10001
eee : 10002

socks 代理运行在客户端。

客户端先连接 ip:port 进行 token 认证,拿到是谁并且端口是什么。

然后服务端开对应端口 然后 协程跑 io.copy 。

客户端认证完成后通过这个链接把数据发送给本地的 socks 代理。这么个意思。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1013994

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX