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插件。
以后遇到问题再继续更新本文,欢迎各位师傅斧正。