FRP使用记录
首先还是要介绍一下这些是什么的,如果感觉没有用可以目录跳转,末尾有我自己用的安装脚本
自己也是在学习中,所以记录一下。反倒借着机会了解了其他的类似方案的实现路径
FRP是什么
taro的一些废话:FRP是用于
内网穿透的工具。内网穿透是什么:我们知道,在同一个局域网中,设备之间可以用局域网的IP地址通信。但是当设备需要连接另一个局域网的设备就做不到了。这个时候使用FRP和一个公网设备协助,就可以做到访问非本局域网设备的效果。
官方介绍
FRP(Fast Reverse Proxy)是一款开源的内网穿透工具,它允许用户将处于内网或防火墙后的服务通过设置代理的方式对外提供访问。FRP 支持多种协议,包括 TCP、UDP、HTTP 和 HTTPS,适用于多种内网穿透场景。
官方release仓库:https://github.com/fatedier/frp/releases
框架介绍
FRP有FRPS(server)和FRPC(client)两个组成部分,FRPS装在公网服务器上,FRPC装在被访问的设备上。
注意一下新版".toml"和旧版".ini"文件格式不一样,语法稍微有区别
比如这是frpc.toml文件。
# frpc 配置
serverAddr = "1.2.3.4" # frps地址
serverPort = 7000 # frps设置用于和frpc通信的端口
auth.token = "Kotone_wakawaii" # frps设置用于认证frpc的密钥
# SSH 远程访问
[[proxies]]
name = "ssh" # 名字随意取,可以有多个proxies,复制这个整体并修改就可以
type = "tcp"
localIP = "127.0.0.1" # 表示访问的是运行frpc的设备
localPort = 22 # 表示访问的设备的具体端口
remotePort = 3001 # 表示frps上开放给外部连接的端口
比如这是frps.toml文件
bindAddr = "0.0.0.0" # 表示监听所有设备
bindPort = 7000 # 表示用于监听的端口,对应上面的「serverPort = 7000」
auth.method = "token" # 指定认证方式
auth.token = "Kotone_wakawaii" # 要求frpc和frps的认证token一致才会有效
# frps有自己的控制台,但是不建议暴露在公网下
webServer.addr = "0.0.0.0" # 设置网页可以访问的IP地址
webServer.port = 7500 # 网页服务工作在设备的7500端口
webServer.user = "kotone_cute" # 网页认证的用户名
webServer.password = "sekaiichi_kawaii"# 网页认证的用户密码
所以这么看应该清晰很多。其实就是frpc设备知道frps设备的地址,然后frpc服务在设备上工作的时候就会连接上目标地址的工作端口,就是连上了frps服务,并且要求frps给他一个3001的对外端口,然后主机就开放的一个3001的端口。实际上这个3001的端口就连接着fprc的22端口。
于是就实现了:你的电脑拿着服务器的公网地址—>连接上服务器的3001端口,然而实则这个端口是被frps接管了,frps把3001端口的消息转发给了他自己的客户端frpc的特定端口22。
那么为什么frps能找到frpc呢?其实是因为在你连接服务器之前,你的frpc就通过frps的地址和公网服务器建立了联系。相当于frps就能透过局域网对内部设备的保护,精准找到frpc并通信。就像frpc在局域网上一个撕开了一个端口的小口子,连上了frps的端口,通过frps的转发,外部设备只要能拿到公网服务器地址和端口就可以访问内网设备的特定端口了。
提醒一下
其他影响连接的常见问题就是忘记放行防火墙🤣,我就是🐷。
根据不同系统用ufw / firewalld / iptables就行了。
记得入站端口都要放行:下行连接frpc的端口和暴露公网访问的端口。
还有就是云服务器的安全组策略也要放行。以为打通了结果全部被挡在外面了😹
其他内网穿透方法
与其说是内网穿透,通俗来讲就是其他垮局域网访问设备的方法吧。其他的很多我就不介绍了。其实我也不是很懂啊哈,哈,,
Tailscale,ZeroTier,WireGuard
其实我用过的也就前两个,我就谈一下我自己的使用感受吧。
Tailscale,ZeroTier操作感受其实差不多。有一个网页的登录页面。Tailscale就是你登录网页以后可以生成auth_key或者叫token(什么的忘了,在设置里面),然后你的别的设备就可以用分配的key加入这个用户的网络。ZeroTier也是你登录网页,但是是你不同的设备会分配一个ZeroTier的信息,然后创建一个网络,设备输入网络信息就可以加入这个虚拟局域网里面了。两个都是P2P的使用体验。
其实两个的使用体验挺像的,对于个人使用个人感觉也是很足够的,但是实际的实现方法有一点区别,ZeroTier会要在电脑上创建一个虚拟网卡,所以如果电脑有网络相关驱动有点问题就不是很推荐ZeroTier。
WireGuard了解不多,在组建私有局域网上似乎效果很好。但是单纯个人来说我觉得有点过剩了。
我为什么要提及Tailscale就是因为我有一回更新了frpc.toml,重启服务以后不知道为什么就连不上主机了,frps的web也显示脱机了。我当时怀疑是文件写错了连不上。以为要很久远以后才能现场去修,相似的心都有了😦,突然想起来还有个unless-stopped的Tailscale在容器里面跑,我就试着连Tailscale。woc!居然连上了🤤,赶紧看了一下文件,也没问题,也不知道我systemctl reload就把他弄得inactive了🫠。手动重启了一下就又活了。
所以说有备用的方案非常重要啊,我从来没想过frp会出现网络连不上的问题,更是没有预料到会让系统服务自己关闭。我之前还嫌弃Tailscale没有用认为可以删掉了,紧急时刻我说太有用了。🤐
FPR 怎么装
哈哈这个我就不说了,毕竟教程很多,分享一下我自己的安装脚本,使用前要记得先编辑脚本开头的用户配置变量config。
主要就是注意一下要把frp写成系统服务,不然不会开机自启。
反正就注意frpc和frps都要装才有作用,另外frp也有容器部署的镜像,可以自己选择部署方式。
附件-frps&frpc安装脚本
install_frps.sh 仅Linux系统
install_frpc.sh 仅Linux和MacOS系统
或许下一期Hermes+napcat(Onebot)的接入过程?其实我自己还没调试好啊啊啊🤯,目前的体验来看直接用QQ开放平台的原生体验还是好一点,加个转换层适配出现各种问题,但是官方平台注册的机器人加群限制好多(虽然最近放开了一点,,,🥹并没有想好做什么