frp基础设置示例详解
前言
当初开始用 frp 走了一些弯路,主要原因还是对 frp 的工作原理理解不透彻,所以在设置时才会出现各种错误,导致不成功,所以下面我们以实例来做详细的说明。
frp 工作原理
官网的架构图比较抽象,不便于描述
所以我重绘了一张,结合实例来进行说明
说明
- frps 需要有公网 IP,例如:IP 是
10.146.0.3
- frps 要绑定域名,例如:绑定到
laosu.ml
- 根据需要访问的内容,在 dns 解析中绑定二级域名,所有的域名均指向
10.146.0.3
- 为NAS管理页面绑定了:nas.laosu.ml
- 为Jellyfin绑定了域名:movie.laosu.ml
- 为airsonic绑定了域名:music.laosu.ml
- 为R6300v2绑定了域名:router.laosu.ml
过程
当我在浏览器中输入: http://movie.laosu.ml 时,dns 服务会将其解析到 IP:10.146.0.3
上,也就是跳转到了我们安装了 frps 的主机上,frps 会根据用户输入的域名向 frpc 发起查询,如果存在该服务,则返回 jellyfin 的web 页面。
而当我输入了错误的二级域名,或者该二级域名没有被解析、绑定,又或者是 frps 和 frpc 之间的网络出现了问题,也就是服务不存在时,则会返回下面的错误界面。
例如在浏览器中输入了:http://movie1.laosu.ml 之后
frps.ini 说明
frps 服务器有了一键安装包之后,变得简单多了,可以输入frps config 来查看 /usr/local/frps/frps.ini 的内容,下面的 frps.ini 是一路默认设置生成的内容:
1 | # [common] is integral section |
这里比较关键的信息:
- 子域名主机和 frps 服务器的公网IP是同一个
1 | subdomain_host = 10.146.0.3 |
- 管理页面
1 | # if you want to configure or reload frps by dashboard, dashboard_port must be set |
你可以在浏览器中输入:http://10.146.0.3:6443 ,输入用户名、密码后,可以查看实时的服务状态是否在线等信息。
- token
frpc 登录到 frps 时的认证凭证,在 frpc.ini
要用到的。
1 | # auth token |
frpc.ini 说明
先上实例 frpc.ini
,后面再做说明。
1 | [common] |
客户端 token 认证
frpc.ini 中,在 [common]
节:
1 | token = yyyyyyyyyyyyyyyy |
开启kcp协议
kcp协议虽然会有额外的流量消耗,但在弱网环境下传输效率提升明显。关于kcp协议,有兴趣的可以自己度娘。
首先在 frps.ini
中启用 kcp 协议支持,指定一个 udp 端口用于接收客户端请求:
1 | bind_addr = 0.0.0.0 |
其次在 frpc.ini
中,在 [common]
节:
1 | server_addr = 10.146.0.3 |
节的名称不能重复
在示例 frpc.ini 中,一共有5个节,名称分别是 [common]
、 [nas]
、[movie]
、[music]
、 [router]
;
【重要说明】
- 这些节的名称是不可以重复的,否则会报错,尤其是一台 frps 服务器对应多台 frpc 客户端,这个错就会比较难发现
- 个人习惯将节的名称和二级域名的前缀保持一致,这样便于管理
加密与压缩
这个是将 frpc 与 frps 之间的通信内容加密与压缩传输
1 | use_encryption = true |
优点:
- 加密可以有效防止 frpc 与 frps 之间流量被拦截
- 压缩可以有效减小 frpc 与 frps 之间的网络流量
缺点:
- 会额外消耗一些 cpu 资源
以 [nas]
为例:
1 | [nas] |
增加密码保护
对于一些没有安全保护的页面,需要输入账号、密码才能访问
1 | http_user = abc |
以 [nas]
为例:
1 | [nas] |
当你在浏览器中输入: http://nas.laosu.ml 时,浏览器中会弹出用户号、密码的输入窗口,需要输入配置的用户名和密码才能继续访问。
参考文档
frp官网
地址:https://github.com/fatedier/frp