| 2025-03-14
在现代网络环境中,许多场景需要突破内网限制,实现对外网的访问或让外网能够访问内网服务。frp 作为一款开源的内网穿透工具,因其强大的多协议支持能力和灵活的安全策略配置,在企业办公、个人项目部署等领域广泛应用。通过 frp,用户可轻松将位于内网的服务,如 Web 服务器、SSH 服务、数据库服务等,映射到公网,实现远程访问与管理。
frp 的工作原理
frp 基于客户端 - 服务器(Client - Server)架构运行。在使用 frp 进行内网穿透时,需要在具有公网 IP 的服务器上部署 frp 服务端,在内网设备上部署 frp 客户端。当内网设备(客户端)启动 frp 客户端程序后,它会主动与 frp 服务端建立连接。例如,一家企业的办公网络内部有一台文件服务器,其处于内网环境,IP 地址为 192.168.1.100。通过在公网服务器上部署 frp 服务端,在内网文件服务器上安装并配置 frp 客户端,客户端向服务端发起连接请求。一旦连接建立,当外部用户访问公网服务器的特定端口(该端口已被 frp 服务端映射到内网文件服务器的相应端口)时,frp 服务端会将请求转发给对应的内网客户端,从而实现外部对公网服务器的访问,实际上是访问到了内网中的文件服务器。
frp 的多协议支持
1.HTTP/HTTPS 协议:frp 对 HTTP 和 HTTPS 协议的支持,使得内网中的 Web 服务能够方便地被外网访问。在 frp 客户端配置文件中,对于 HTTP 服务,可进行如下配置:
[web]
type = http
local_ip = 192.168.1.100
local_port = 80
custom_domains = example.com
上述配置表示将内网 IP 为 192.168.1.100,端口为 80 的 Web 服务,通过域名example.com暴露到公网。对于 HTTPS 服务,只需将type改为https,并配置好 SSL 证书路径等相关参数即可。例如:
[secure - web]
type = https
local_ip = 192.168.1.100
local_port = 443
custom_domains = secure.example.com
cert_file = /path/to/cert.pem
key_file = /path/to/key.pem
21.TCP 协议:TCP 协议支持广泛的应用场景,如 SSH 远程登录、数据库远程访问等。以 SSH 服务为例,假设内网中有一台 Linux 服务器,需要通过 SSH 从外网访问。在 frp 客户端配置如下:
[ssh]
type = tcp
local_ip = 192.168.1.101
local_port = 22
remote_port = 60000
这意味着将内网 192.168.1.101 服务器的 22 端口(SSH 默认端口)映射到公网服务器的 60000 端口。外网用户可通过ssh -p 60000 username@public_server_ip的方式远程登录到内网的 Linux 服务器。
3.UDP 协议:在一些需要实时性的应用中,如游戏联机、视频流传输等,UDP 协议发挥重要作用。例如,有一个基于 UDP 的视频监控服务在内网运行,其 IP 为 192.168.1.102,端口为 5000。在 frp 客户端配置如下:
[video - stream]
type = udp
local_ip = 192.168.1.102
local_port = 5000
remote_port = 70000
如此,公网用户可通过访问公网服务器的 70000 端口,获取内网的视频监控服务数据。
frp 的安全策略配置
1.身份验证:frp 支持通过配置用户名和密码进行身份验证,防止未经授权的客户端连接到服务端。在 frp 服务端配置文件frps.ini中,添加如下配置:
[common]
bind_port = 7000
token = your_secret_token
在 frp 客户端配置文件frpc.ini中,对应配置:
[common]
server_addr = public_server_ip
server_port = 7000
token = your_secret_token
只有客户端提供的token与服务端一致时,才能建立连接,有效增强了安全性。
2.访问控制:可以通过配置 frp 的访问控制规则,限制哪些 IP 地址或 IP 地址段能够访问映射到公网的内网服务。在 frp 服务端配置文件中,添加如下配置来限制访问 SSH 服务的 IP 地址:
[ssh]
type = tcp
local_ip = 192.168.1.101
local_port = 22
remote_port = 60000
allow_ips = 10.0.0.0/8,192.168.0.0/16
上述配置表示只允许 10.0.0.0/8 和 192.168.0.0/16 这两个 IP 地址段的用户访问 SSH 服务,其他 IP 地址的访问将被拒绝。
3.加密传输:frp 支持使用 SSL/TLS 对数据传输进行加密,确保数据在传输过程中的保密性和完整性。在 frp 服务端配置文件中,开启 SSL/TLS 加密:
[common]
bind_port = 7000
token = your_secret_token
tls_enable = true
tls_cert_file = /path/to/cert.pem
tls_key_file = /path/to/key.pem
在 frp 客户端配置文件中,无需额外配置,客户端会自动与服务端进行加密连接。通过加密传输,可有效防止数据被窃取或篡改,提升内网穿透的安全性。
frp 凭借其多协议支持和灵活的安全策略配置,为用户提供了高效、安全的内网穿透解决方案。无论是企业实现远程办公、远程运维,还是个人开发者部署个人项目,frp 都能满足不同场景下的网络需求。
拓展阅读:
-SSL/TLS 加密原理:SSL(Secure Sockets Layer)及其继任者 TLS(Transport Layer Security)通过非对称加密算法(如 RSA)协商出会话密钥,再使用对称加密算法(如 AES)对数据进行加密传输。在数据传输过程中,通过数字证书验证通信双方身份,确保数据的保密性、完整性和身份认证,防止数据被窃取或篡改。
-IP 地址段表示法:IP 地址段使用 CIDR(Classless Inter - Domain Routing)表示法。例如,192.168.0.0/16 中,192.168.0.0 是网络地址,/16 表示子网掩码中前 16 位为 1,后 16 位为 0,即 255.255.0.0。该地址段包含了从 192.168.0.1 到 192.168.255.254 的所有 IP 地址,用于网络规划和访问控制。
-SSH 协议基础:SSH(Secure Shell)协议用于在不安全的网络中安全地远程登录到服务器或执行命令。它通过加密连接,防止密码等敏感信息在传输过程中被窃取。SSH 支持多种认证方式,如密码认证、密钥认证等,在远程管理服务器、文件传输(通过 SFTP 协议)等场景广泛应用。