frp内网穿透教程

介绍

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

原理

frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。
内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。
用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。

代理及代理类型

代理

在 frp 中一个代理对应一个需要暴露的内网服务。一个客户端支持同时配置多个代理

代理类型

frp 支持多种代理类型来适配不同的使用场景。

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

安装

在 Github 的 Release 页面中根据使用的系统下载最新版本的客户端和服务端二进制文件,所有文件被打包在一个压缩包中。
解压出来的文件
frpc 为客户端,拷贝到内网服务所在的机器上
frpc.ini 为客户端配置文件
frps 为服务端,拷贝到具有公网 IP 的机器上,放置在任意目录。
frps.ini 为服务端配置文件

配置

转发web服务

通过浏览器访问 http://www.yourdomain.com:8080 即可访问到处于内网机器上 80 端口的服务

服务端配置

common下的参数,bind_port是frps服务监听的端口,vhost_http_port是通过公网访问内网服务的端口。

1
2
3
[common]
bind_port = 7000
vhost_http_port = 8080
客户端配置

web下的参数,type是协议类型,http或者https,local_port是本地网站的端口号,custom_domains是购买的网站域名,需要注意这个网站域名需要事先在域名服务商那里设置好域名解析才能正常使用。

1
2
3
4
5
6
7
8
[common]
server_addr = x.x.x.x
server_port = 7000

[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com

启动

通过 ./frps -c ./frps.ini 启动服务端,再通过 ./frpc -c ./frpc.ini 启动客户端。

参考

frp github: https://github.com/fatedier/frp
frp中文文档: gofrp

作者

BE

发布于

2020-10-14

更新于

2021-08-19

许可协议