求助,如何使用 Frp 做到 Sakura Frp 那样的网页认证?

2024-04-09 14:45:32 +08:00
 Linkia

RT ,我日常需要在各种计算机上远程访问我的电脑。

家中局域网内有软路由,安装了 Sakura Frp 做转发,但免费节点高峰期体验非常差,且本人有多个服务器的基础上不想去花每年 120 元去买 Sakura Frp 的会员。

但自己尝试使用我自己的 Frps 添加 RDP 映射的时候发现了一些问题,Frp 项目无法像 Sakura Frp 那样有网页访问验证功能,即先通过浏览器访问隧道,输入密码后给 IP 一定时间的白名单。

如果我自己直接将 RDP 映射到公网肯定会被爆破+各种挂马,不知道各位有没有什么能使 Frp 快速便捷的验证端口访问问题。

注:

  1. 暂不考虑除 RDP 之外的远程方式,在其他电脑上没有比 RDP 更方便且不用安装软件的方法了。
  2. Frp 的 stcp 也不考虑,连接前需要安装软件。
  3. 不考虑 WireGuard 、ZeroTier 等,原因同上,RDP 前需安装软件。
2913 次点击
所在节点    宽带症候群
20 条回复
cat
2024-04-09 14:58:25 +08:00
好像有点意思 🤔 可以摸鱼做一个
StuPYX
2024-04-09 15:03:19 +08:00
Linkia
2024-04-09 16:53:31 +08:00
@cat 欢迎大佬写一个!
Linkia
2024-04-09 16:54:57 +08:00
@StuPYX 感谢,但这个项目停止维护了,看看还有没有更好的实现方法,如果没有的话考虑部署一下这个项目~
jpyl0423
2024-04-09 17:22:05 +08:00
可以看下这个项目 https://github.com/snail007/goproxy
Linkia
2024-04-09 17:32:27 +08:00
@jpyl0423 看起来要复杂许多,稍后研究研究,感谢!
lovelylain
2024-04-09 21:08:27 +08:00
考虑下 frp + mqtt + nodered + 企业微信,需要的时候通过企业微信应用菜单开启 frpc
boboliu
2024-04-09 21:50:24 +08:00
不必如此复杂,这个功能是纯客户端的。

如果我没记错的话,相关用法的兼容性被刻意保留下来了。
你直接用 sakura frp 的 frpc 丢上你的配置文件,然后加上 `auth_pass` 就行。
boboliu
2024-04-09 22:15:22 +08:00
@boboliu 哦我记错了,下个版本恢复一下(
1423
2024-04-09 22:28:17 +08:00
这种应用层创新还挺有意思的
也可以用 port nock 之类的技术替代实现, 比如一些 web-based port nock
最后当然也可以用管理 iptables 的 web 面板来实现..
totoro625
2024-04-09 22:56:47 +08:00
自己的 frps 上安装了 ufw ,默认是 deny
用的命令是:ufw allow from 当前的 IP

包装成一个 https 获取 ip ,传递给 ufw 开启权限,应该是可行的
Linkia
2024-04-09 23:11:38 +08:00
@boboliu #8 啊?还能这么操作?我研究研究😗
coldle
2024-04-10 10:51:46 +08:00
同需求,也是最后收拢到临时加白这个功能上了😂这功能确实简单好用
loveqianool
2024-04-10 14:55:08 +08:00
guanzhangzhang
2024-04-10 16:06:39 +08:00
用 Headscale 点对点隧道吧,frp 这种映射到公网被黑
Linkia
2024-04-10 17:44:22 +08:00
@guanzhangzhang 有说明暂不考虑需要装软件才能远程的隧道方法,那样我还不如用 ToDesk 之类的远控工具了😂
Linkia
2024-04-10 22:05:18 +08:00
@boboliu #8 这个方法我测试了一下,不行 :(
不知道是我配置有问题还是如何

karl@Karl-Laptop:~/frp/natfrp$ ./frpc_linux_amd64 -c ./frpc.toml


```

[common]
server_addr = ****
server_port = ****
token = ****

[test]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 8010
auth_pass = testpassword

```
Linkia
2024-04-10 22:47:23 +08:00
@StuPYX 很可惜这个版本里不包含我所述的功能 :(
Pastech
2024-04-11 12:14:21 +08:00
做过一个类似的 frp 2fa 认证 不过是服务器实现的
思路大概是 frp 先反代到 localhost 的一个端口 nginx 里面初始化一个 shared_dict 然后在某个 location 下面放一个 content_by_lua_file 通过 http 请求往 shared_dict 中写白名单 IP 然后在默认的 location 下面用 access_by_lua_file 识别 ip 是否在白名单内 不在的话重定向到认证页面 在的话就继续反向代理
目前用下来感觉良好
coldle
2024-05-10 20:47:37 +08:00
@coldle #13 分享下自己最终用的方案以供后来人参考:在 frps 服务器上部署 script-server ,通过 shell 脚本 + iptables + ipset 实现 ip 白名单机制,定时清空白名单实现临时加白

这套方案的爽点还蛮多的:
1. 有账号机制,如果有多人使用的需求,可以只把 ip 加白操作放在一个账号里分享给别人;
2. script-server 长期在后台运行,所以 frps 可以随用随开;
3. ipset 支持文件读入读出,可以实现 "部分永久白名单+部分临时白名单" 的操作;
4. 白名单不仅对 frps 生效,如果有其他需要暴露给自己用的服务也可以受益;
5. script-server 可以从配置上完全关闭管理员账户,也就是说 script-server 可以只暴露比较安全的操作,哪怕 script-server 账号被黑了也不会有太大的影响

缺点的话就是太依赖 script-server 或者类似的 web 式脚本调用,如果应用有漏洞的话大概率相关服务器一锅端()

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

https://ex.noerr.eu.org/t/1030986

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

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

© 2021 V2EX