新版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
每次修改多用户插件认证文件里的用户及token信息后,都需要重启fp-multiuser插件程序才会生效
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/
被连接电脑客户端toml配置文件:
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
发起连接电脑客户端toml配置文件:
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
注意每个客户端toml使用不同的用户,在发起连接电脑远程连接127.0.0.1:6000就会跟被连接电脑的3389进行穿透连接。frp点对点穿透(打洞)连接存在失败率,可以尝试对电脑所连接的路由器进行配置DMZ主机ip,以及开启uPnP功能,如果不熟悉这些功能开启作用及风险的建议不要开启,避免电脑暴露公网环境造成安全问题。
发表评论