frp个人使用记录

frp是什么?

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。简而言之,内网穿透。

为什么要使用frp?

通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  • 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
  • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
  • 代理组间的负载均衡。
  • 端口复用,多个服务通过同一个服务端端口暴露。
  • 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
  • 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
  • 服务端和客户端 UI 页面。

原理?

frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。

内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。

用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。

如何安装frp?

这里可以下载对应版本:https://github.com/fatedier/frp/releases

下载后,有frps*和frpc*两组文件,frps*就是服务端的(server),frpc*就是客户端的(client)。

最重要的就是frpc.ini和frps.ini如何配置。

参数类型

代理类型:

类型描述
tcp 单纯的 TCP 端口映射,服务端会根据不同的端口路由到不同的内网服务。
udp 单纯的 UDP 端口映射,服务端会根据不同的端口路由到不同的内网服务。
http 针对 HTTP 应用定制了一些额外的功能,例如修改 Host Header,增加鉴权。
https 针对 HTTPS 应用定制了一些额外的功能。
stcp 安全的 TCP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
sudp 安全的 UDP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
xtcp 点对点内网穿透代理,功能同 stcp,但是流量不需要经过服务器中转。
tcpmux 支持服务端 TCP 端口的多路复用,通过同一个端口访问不同的内网服务。

常用功能:

这里仅记录本人使用过程中遇到的一些问题,具体可以参考真正的官方文档:https://gofrp.org/docs/

以下内容对照官方文档

通过ssh访问内网机器

[common]是代理名称,这是固定的,[ssh]也是代理名称,但是是可以变化的,自己取的名字,但不可以有重复。

官方文档这句说得很清楚了,local_ip和local_port指客户端需要暴露到公网的地址和端口。这里需要特别注意的是,服务端监听的端口并不在frps.ini上配置,而是在frpc.ini上的remote_port参数进行配置。因此在本机上使用代理工具的时候,不要再傻乎乎的去连公网的服务端的bind_port了,而是连客户端配置的remote_port。

 

上面说,[ssh]只是个自己取的名字,啥意思?就是你把local_port改成3389,依旧取[ssh]也是可以正常访问客户端rdp服务的(windows下)。

通过自定义域名访问内网的web服务

这里跟上面通过ssh访问内网机器不同的是,在你本机上连服务器的端口,并不是客户端的romote_port决定了,因为没有这个参数了,这里是由服务端的vhost_http_port决定,因此这里连的是8080端口。

custom_domains参数,没有域名咋办?直接填ip地址即可。

官方文档后面部分暂时还没遇到问题,下面列举一个我自己用frp搭的代理,功能是使用通过公网vps连接客户端,使用该客户端访问外网。

frps.ini配置

[common]
bind_addr = 0.0.0.0
bind_port = 7000
vhost_https_port = 7001
vhost_http_port = 6001
dashboard_user = good
dashboard_pwd = good
dashboard_port = 7500

frpc.ini配置

[common]
server_addr = 82.xxx.xxx.181
server_port = 7000

[socks5]
type = tcp
remote_port = 6000
plugin = socks5
use_encryption = true
use_compression = true

对这里解释一下,首先是frps.ini:vhost_https_port指定https走的端口,vhost_http_port指定http走的端口,dashboard_port指启动web监控页面,端口是7500,上面user/pwd指监控页面的用户名和密码。

frpc.ini:这里type指定tcp,对应本文章开头的表格;remote_port指定本机连vps的代理端口,即当在本机使用proxifier配置代理时,设置82.xxx.xxx.181:6000;plugin使用socks5插件。

 

以后遇到问题再继续更新本文,欢迎各位师傅斧正。

posted @ 2021-08-07 11:41  M4ny1u  阅读(434)  评论(0编辑  收藏  举报

Email: imanyiu12@foxmail.com