什么是frp?
frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。frp 是一款跨平台的内网穿透工具,支持 Windows、macOS 与 Linux,它需要你有一台拥有固定公网 IP 的电脑,VPS 最好,然后就能愉快的进行内网穿透了。还支持 https,甚至可以用它进行小程序开发。
frp项目的github地址
frp 的作用
利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
对于 http 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
利用处于内网或防火墙后的机器,对外网环境提供 tcp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
可查看通过代理的所有 http 请求和响应的详细信息。(待开发)
使用示例
根据对应的操作系统及架构,从 frp的Release 页面下载最新版本的程序。
将 frps 及 frps.ini 放到具有公网 IP 的机器上。
将 frpc 及 frpc.ini 放到处于内网环境的机器上。
然后配置frps.ini或frpc.ini 文件中的内容。
服务器端用命令frps -c frps.ini来启动frp。
客户端用命令frpc -c frpc.ini来启动frp。
frp的四种模式:tcp、udp、stcp、xtcp
tcp和udp:就是将普通的tcp端口或者udp端口映射到公网上,相当于你的设备直接向公网暴露了一个tcp端口。任何设备都可以尝试连接这个端口。这里就会有很大的安全风险。
stcp:出于安全和防止攻击的考虑,frp提供了使用密钥验证的tcp,这就是frp的Secret TCP(stcp)模式。示意图如下:

xtcp:目的是让两个客户具有直接相连。在正式运行时,其实并不需要服务端做什么事情。
frp客户端就好比两个相亲的对象,frp服务端是媒婆。媒婆介绍完之后,就应该让两个相亲对象自己去聊天了。
这个就是点对点模式(p2p)。在frp中,这个可以通过设置xtcp实现。
这种模式的好处是不需要消耗服务器的带宽和网速,延时也较低。
不过该模式还在继续开发完善阶段,目前使用起来并不太稳定,很多时候会出现连不上的情况。并且与两端的路由器防火墙、DMZ、UPNP设置都有一些关系。本人测试后发现直接连接不上,暂时还未解决该问题。
示意图如下:

frp 示意图:

其中,客户端B是需要做端口映射的电脑。Visitor是访问端的电脑,只用于stcp模式和xtcp模式。
服务器端的frps配置
[common]bind_addr = 0.0.0.0bind_port = 7000bind_udp_port = 7001privilege_token = frp888
dashboard_port = 7500dashboard_user = admin
dashboard_pwd = admin
服务器端用命令frps -c frps.ini来启动frp。
启动后输入http://[服务器ip]:7500,并输入所设置的账号(admin)和密码(admin)就可以看到以下管理界面:

客户端B的配置模式1:tcp
[common]server_addr = 自己服务器的ip
server_port = 7000[PC-RDP]type = tcp
local_ip = 127.0.0.1local_port = 3389remote_port = 13389
客户端用命令frpc -c frpc.ini来启动frp。
客户端的配置模式2:udp
[common]server_addr = 自己服务器的ip
server_port = 7000[UDP-test]type = udp
local_ip = 127.0.0.1local_port = 53remote_port = 10053
客户端用命令frpc -c frpc.ini来启动frp。
客户端的配置模式3:stcp
[common]server_addr = 自己服务器的ip
server_port = 7000[PC-RDP-stcp]type = stcp
sk=123456local_ip = 127.0.0.1local_port = 3389
客户端用命令frpc -c frpc.ini来启动frp。
客户端的配置模式4:xtcp
[common]server_addr = 自己服务器的ip
server_port = 7000[PC-RDP-xtcp]type = xtcp
sk=123456local_ip = 127.0.0.1local_port = 3389
客户端用命令frpc -c frpc.ini来启动frp。
总结
对于网站等公开内容,使用tcp比较合适。对于远程桌面和ssh等非公开应用,最好使用stcp。xtcp暂时不建议使用,因为本人测试后发现不稳定。
参考资料
1、fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
2、使用frp实现P2P点对点内网穿透_FRP教程_电脑博士
3、frp – 你也能用的开源内网穿透工具,最简洁教程 – 小众软件
4、frp首页、文档和下载 – 内网穿透工具 – OSCHINA
5、FRP 内网穿透 – 知乎
6、内网穿透神器frp之进阶配置——stcp及p2p模式_网络_黄腾霄的博客-CSDN博客