frp[1] 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
本文将以暴露内网 Web 服务为例,实践 frp 的安装部署。更多应用场景,可见 frp 示例[2] 。
frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。
可以在 Github 的 Release[3] 页面中下载到最新版本的客户端和服务端二进制文件。
本文公网、内网机器都是 Linux x86_64 ,所以选择了 frp_0.39.0_linux_amd64.tar.gz 。解压:
拷贝 frps 文件进公网机器,假设其 IP 为 x.x.x.x :
修改 frps.ini 文件,设置监听 HTTP 请求端口为 8080:
安装 supervisor 进行部署,后台长期运行:
拷贝 frpc 文件进内网机器,假设其 IP 为 192.168.1.100 :
修改 frpc.ini 文件,假设 frps 所在的服务器的 IP 为 x.x.x.x , local_port 为本地机器上 Web 服务监听的端口, 绑定自定义域名为 custom_domains 。
将 www.yourdomain.com 的域名 A 记录解析到 IP x.x.x.x 。
简单运行服务,进行测试:
以 systemd 进行部署,后台长期运行:
[1] frp: https://github.com/fatedier/frp
[2] frp 示例: https://gofrp.org/docs/examples/
[3] Release: https://github.com/fatedier/frp/releases
FRP工具采用C/S模型,将FRP服务端部署在具有固定公网IP的机器上,FRP客户端部署在内网机器上,通过访问暴露在服务端上的端口,反向代理到位于内网的服务。在此基础上,FRP支持 TCP、UDP、HTTP、HTTPS 等多种协议,提供了加密、压缩、身份认证、代理限速和负载均衡等众多能力。
FRP开源项目地址:
https://github.com/fatedier/frp
FRP使用场景:
让互联网(外部网络)的设备能访问局域网(内部网络)的设备所提供的服务,尤其是在内部网络出口没有固定公网IP的场景中。
测试目标: 将内网Windows 7的远程桌面端口(3389)暴露到服务端,实现在外部网络可以通过远程桌面连接到内网的Windows 7。
关闭CentOS 7.6防火墙:
关闭CentOS 7.6 SELinux:
安装配置FRP服务端:
运行FRP服务端:
腾讯云安全组放行端口:
FRP客户端支持Windows、Linux、MacOS、ARM、OpenWRT等平台,本例以Windows 7为例,将Windows 7的远程桌面端口(3389)暴露到服务端,实现从公网访问Windows 7的远程桌面。
注:与暴露TCP协议不同,使用FRP暴露HTTP/HTTPS协议时,可采用端口多路复用的方式。即一个外部端口可对应多个内部不同HTTP/HTTPS服务的端口,并通过在客户端配置文件中配置不同的域名来进行区分访问。
关闭Windows 7的休眠:
打开计划任务程序:
访问FRP服务端的Web界面进行验证:
访问FRP客户端的Web界面进行验证:
在外网使用远程桌面工具进行连接:
远程桌面可成功登录:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)