frp 实现内网穿透实战教程
在当今的网络环境中,内网穿透已经成为程序员和网络管理员不可或缺的工具之一。无论是远程开发、调试,还是访问内网服务,内网穿透工具都极大地提高了工作效率和灵活性。今天,我们就来深入了解一下
FRP(Fast Reverse Proxy),一款简单易用且功能强大的内网穿透工具。
内网穿透的重要性
在计算机网络中,内网通常是指被防火墙或路由器隔离的内部网络。内网中的设备和服务通常无法直接通过公网访问,这给远程工作、开发和调试带来了诸多不便。内网穿透技术通过在公网和内网之间建立一个安全的通道,使得外部设备能够访问内网中的服务。
对于程序员来说,内网穿透有以下几个重要的应用场景:
- 访问内网服务:通过内网穿透,开发者可以在外部网络环境中访问公司内网的开发环境、数据库等服务,方便远程工作。
- 远程调试与开发:开发者可以在任何地方、任何设备上进行开发工作,通过将本地服务映射到公网上,实现远程调试。
- Webhook 接收:内网穿透可以用于接收来自外部服务的 Webhook 请求,例如 GitHub 的 Webhook 回调,这对于自动化开发流程非常重要。
- 敏感数据保护:内网穿透工具通过加密和身份验证机制,确保了内网服务与外部环境之间的通信安全性,保护敏感数据不被泄露。
为什么选择 FRP
FRP(Fast Reverse Proxy)是一款开源的内网穿透工具,它以其简单易用、功能强大、安全性高而受到广泛欢迎。以下是 FRP 的一些主要特点:
- 不限流、不限连接、开源免费
- 简单易用的配置:FRP 提供了简洁明了的配置文件,用户可以通过简单的设置完成对内网服务的映射和穿透,无需复杂的操作。
- 多协议支持:FRP 支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,适用于多种应用场景。
- 安全性保障:FRP 提供了身份验证和加密机制,支持 TLS/SSL 加密通信,确保数据传输的安全性。
- 跨平台支持:FRP 支持 Windows、Linux、macOS 等多个操作系统,方便用户在不同平台上部署。
- 高性能和稳定性:FRP 的设计注重性能和稳定性,能够处理大量连接和数据传输。
- 活跃的社区和持续更新:FRP 拥有一个活跃的开源社区,用户可以在社区中获取支持、分享经验。同时,FRP 的开发团队也在不断更新和改进,确保其稳定性和安全性。
前置条件
安装 FRP(Fast Reverse Proxy)的前置条件主要包括以下几个方面:
1. 硬件与网络环境
- 公网服务器:需要一台具备公网 IP 的服务器,用于部署 FRP 服务端(
frps
)。推荐配置为至少 1 核 1GB 内存,具体配置可根据流量和连接数调整。 - 内网客户端:需要至少一台内网机器,用于部署 FRP 客户端(
frpc
),并且该机器需要能够访问公网。 - 稳定的网络连接:FRP 服务端和客户端之间的网络连接需要稳定,网络波动或中断可能导致内网服务无法正常访问。
2. 软件环境
- 操作系统支持:
- 服务端:支持主流的 Linux 发行版(如 Ubuntu、CentOS、Debian 等),也支持 Windows Server 和 macOS。
- 客户端:支持 Windows、Linux、macOS 等多种操作系统。
- 系统架构:支持 x86_64、aarch64、armv7l 等常见架构。
- 防火墙与安全组配置:需要确保服务器的系统防火墙以及云服务的安全组策略允许 FRP 所需的端口(如默认的 7000 端口)的入站和出站流量。
架构图
这个流程图展示了FRP内网穿透的工作原理:
核心组件:
- 内网服务:需要被访问的内网应用(如Web服务、数据库等)
- FRP Client (frpc):运行在内网的客户端,负责转发数据
- FRP Server (frps):运行在公网服务器上,接收外部请求
- 用户设备:需要访问内网服务的外部设备
工作流程:
- FRP客户端主动与服务端建立持久的控制连接
- 外部用户访问公网服务器的指定端口
- 服务端通知客户端有新的连接请求
- 客户端建立新的数据通道
- 客户端从内网服务获取数据
- 内网服务返回响应
- 客户端将数据转发给服务端
- 服务端将响应返回给用户
这种方式巧妙地解决了内网设备无公网IP的问题,通过反向代理实现了外网对内网的访问。
实战需求
将本地部署的 php 项目,内网穿透到互联网访问。
https://gitee.com/chengxuyuanguashu/crmeb_zzff_class
本地 http://localhost:80/wap/index/index.html 能正常访问。
FRP 的快速入门
frp 官方 github 网址:https://github.com/fatedier/frp
frp 官方文档 网站:https://gofrp.org/
接下来,我们将通过一个简单的示例,介绍如何在 Linux 系统上搭建 FRP 服务端和客户端。
(一)FRP 服务器端配置
- 下载 FRP你可以从 FRP 的 GitHub Release 页面下载最新版本的 FRP。
https://github.com/fatedier/frp/releases
我们下载两个,linux 版本作为FRP服务端,window 版作为 FRP 客户端用来映射本地 windows10 启动的网站。
如果公网服务器、内网服务都是 Linux,下载一个即可。
- 上传 Linux 安装包到腾讯云服务器,解压得到如下
- 修改 FRP 服务器配置
[root@VM-12-16-centos frp]# cat frps.toml
bindPort = 7000
vhostHTTPPort = 80
- 启动 FRP 服务器
./frps -c ./frps.toml
(二)FRP 客户端配置
- 下载 FRP 并解压得到如下
修改配置文件 ,ip 改为公网 ip
serverAddr = "公网ip"
serverPort = 7000[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000[[proxies]]
name = "crmeb_web"
type = "http"
localPort = 80
customDomains = ["公网ip"]
- 启动 FRP 客户端
进入目录,cmd 打开
frpc.exe -c ./frpc.toml
使用公网 ip 打开
如下成功!
FRP 的应用场景
- 远程开发与调试:通过 FRP 将本地开发环境映射到公网上,开发者可以在任何地方进行开发和调试。
- Webhook 接收:FRP 可以用于接收来自外部服务的 Webhook 请求,例如 GitHub 的 Webhook 回调。
- 内网服务访问:通过 FRP,开发者可以在外部网络环境中访问公司内网的服务。
- 远程桌面连接:FRP 可以用于远程连接内网中的桌面设备,例如通过 VNC 或 RDP。
总结
FRP 是一款非常优秀的内网穿透工具,它简单易用、功能强大、安全性高,适用于多种应用场景。通过本文的介绍,相信你已经对 FRP 有了初步的了解。如果你需要在远程环境中访问内网服务,或者需要进行远程开发和调试,FRP 绝对值得一试。