新版frp0.67.0多用户token隔离鉴权 & 点对点穿透

搭建frp服务后默认客户端与服务器都是使用同一个token进行验证,一但token泄漏后就需要服务端及所有客户端都更换token十分麻烦。现在已经有多用户插件可以集成到frp服务器里面来解决这个问题了。

一句话教程,直接使用 fp-multiuser 这个插件即可(这个插件也是frp开发者参与开发的):https://github.com/gofrp/fp-multiuser

它的大致原理是在frp服务器配置文件中添加插件(添加插件前需要配置并启动插件程序),frp服务端口收到请求后会先转到插件进行鉴权通过后再提供后续服务。

如果你看完上面的官方插件教程已经会了,那么可以直接关闭页面,下面的内容不必看了。

1、下载frp多用户插件地址:https://github.com/gofrp/fp-multiuser

2、在frp服务器上创建多用户认证文件,文件名随便 我用的是 user-token.ini(用户与用户token之间用等于号“=”连接,每个用户信息占一行)

user1=123123123
user2=abcabcabc

3、启动frp多用户插件(设置插件监听7200端口,插件监听的是本地端口不需要在防火墙/云安全组放行,使用user-token.ini获取授权用户token信息)
以下命令为后台执行fp-multiuser-linux-amd64程序,参数为-l 127.0.0.1:7200 -f ./user-token.ini避免关闭终端后退出程序(我是直接在插件目录下执行的,建议使用完整路径来执行frp插件)

nohup ./fp-multiuser-linux-amd64 -l 127.0.0.1:7200 -f ./user-token.ini &

查找进程 ps -ef | grep “fp-multiuser”
结束进程 kill <进程PID>

4、在frp服务器toml配置中引入插件

# frps.toml
bindPort = 7000

[[httpPlugins]]
addr = "127.0.0.1:7200"
path = "/handler"
ops = ["Login"]

5、在frp客户端toml配置文件中进行配置

>用户1的TOML客户端配置文件(对应服务器多用户插件配置文件行用户 user1=123123123):
serverAddr = "x.x.x.x"
serverPort = 7000
user = "user1"
metadatas.token = "123123123"

[[proxies]]
type = "tcp"
localPort = 22
remotePort = 6000

>用户2的TOML客户端配置文件(对应服务器多用户插件配置文件行用户 user2=abcabcabc):
serverAddr = "x.x.x.x"
serverPort = 7000
user = "user2"
metadatas.token = "abcabcabc"

[[proxies]]
type = "tcp"
localPort = 22
remotePort = 6001

PS:可以让AI帮你生成一个管理frp服务程序、frp多用户插件程序的bash脚本/写成服务,按需要加入宝塔计划任务或定时任务中,这样就不用每次故障后还要手动找启动命令太不方便了。

点对点穿透一般不需要修改服务器toml配置,只需要在被连接电脑、发起连接电脑上各自配置客户端toml文件即可。注意我这里还是以多用户插件的token配置的,如果是默认token鉴权方式注意自行修改,secretKey 这个需要在被连接电脑和发起连接电脑上配置成一样(frp服务器配置文件不需要这个secretKey )。

参考教程地址:https://gofrp.org/zh-cn/docs/examples/xtcp/

serverAddr = "xxx.xxx.xxx.xxx"
serverPort = 7000
user = "user1"
metadatas.token = "123123123"

[[proxies]]
name = "p2p_3389"
type = "xtcp"

secretKey = "djkKJDF8DF89VA12xxFc"
localIP = "127.0.0.1"
localPort = 3389
serverAddr = "xxx.xxx.xxx.xxx"
serverPort = 7000
user = "user2"
metadatas.token = "abcabcabc"
[[visitors]]
name = "p2p_3389_visitor"
type = "xtcp"
serverName = "p2p_3389"
secretKey = "djkKJDF8DF89VA12xxFc"
bindAddr = "127.0.0.1"
bindPort = 6000
keepTunnelOpen = false

发表评论