frp内外穿透
FRP (Fast Reverse Proxy) 是一个高性能的反向代理应用,可以帮助您将内网服务通过具有公网 IP 的服务器暴露到互联网上。本文将介绍 FRP 的基本使用方法和几个常用场景的配置示例。
什么是 FRP?
FRP 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。它可以让您在没有公网 IP 的情况下,将内网服务暴露到公网,非常适合开发调试、远程访问等场景。
基本架构
FRP 由两部分组成:
- frps (server):运行在具有公网 IP 的服务器上
- frpc (client):运行在内网环境中
安装部署
- 从 GitHub Release 下载对应平台的二进制文件
- 解压到目标目录
- 根据需求配置服务端和客户端
常用场景配置示例
场景一:SSH 远程连接
使用场景:远程访问家里或办公室的 Linux 服务器
服务端配置 (frps.toml):
bindPort = 7000
客户端配置 (frpc.toml):
serverAddr = "your-server-ip"
serverPort = 7000
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
使用方法:
ssh -p 6000 username@your-server-ip
场景二:Web 服务访问
使用场景:将本地开发的 Web 应用暴露到公网进行测试
服务端配置 (frps.toml):
bindPort = 7000
vhostHTTPPort = 8080
客户端配置 (frpc.toml):
serverAddr = "your-server-ip"
serverPort = 7000
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 3000
customDomains = ["your-domain.com"]
访问方式:
http://your-domain.com:8080
场景三:HTTPS 服务
使用场景:需要 HTTPS 访问的 Web 服务
服务端配置 (frps.toml):
bindPort = 7000
vhostHTTPSPort = 8443
客户端配置 (frpc.toml):
serverAddr = "your-server-ip"
serverPort = 7000
[[proxies]]
name = "web-secure"
type = "https"
localIP = "127.0.0.1"
localPort = 443
customDomains = ["secure.your-domain.com"]
场景四:文件共享服务
使用场景:临时共享文件或搭建简单的文件服务器
服务端配置 (frps.toml):
bindPort = 7000
客户端配置 (frpc.toml):
serverAddr = "your-server-ip"
serverPort = 7000
[[proxies]]
name = "file-server"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8000
remotePort = 8080
# 启用静态文件服务
[proxies.file-server.plugin]
type = "static_file"
localPath = "/path/to/your/files"
stripPrefix = "static"
httpUser = "admin"
httpPassword = "password"
场景五:数据库远程访问
使用场景:远程访问内网数据库进行开发或管理
服务端配置 (frps.toml):
bindPort = 7000
客户端配置 (frpc.toml):
serverAddr = "your-server-ip"
serverPort = 7000
# MySQL 数据库
[[proxies]]
name = "mysql"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3306
remotePort = 3307
# PostgreSQL 数据库
[[proxies]]
name = "postgres"
type = "tcp"
localIP = "127.0.0.1"
localPort = 5432
remotePort = 5433
安全配置建议
1. 启用身份验证
服务端配置:
bindPort = 7000
auth.method = "token"
auth.token = "your-secret-token"
客户端配置:
serverAddr = "your-server-ip"
serverPort = 7000
auth.method = "token"
auth.token = "your-secret-token"
2. 限制客户端权限
# 服务端配置
bindPort = 7000
allowPorts = [6000-6100, 8080, 8443]
maxPoolCount = 5
3. 启用加密和压缩
# 客户端配置
transport.useEncryption = true
transport.useCompression = true
启动和管理
启动服务
服务端:
./frps -c frps.toml
客户端:
./frpc -c frpc.toml
系统服务配置
创建 systemd 服务文件 /etc/systemd/system/frps.service
:
[Unit]
Description=FRP Server
After=network.target
[Service]
Type=simple
User=frp
Group=frp
WorkingDirectory=/opt/frp
ExecStart=/opt/frp/frps -c /opt/frp/frps.toml
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
监控和日志
启用日志记录
# 服务端配置
log.to = "./frps.log"
log.level = "info"
log.maxDays = 30
# 客户端配置
log.to = "./frpc.log"
log.level = "info"
log.maxDays = 30
Web 管理界面
# 服务端配置
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"
访问 http://your-server-ip:7500
查看状态。
总结
FRP 是一个功能强大且易于使用的内网穿透工具,通过合理的配置可以满足各种场景的需求。在使用过程中要注意:
- 安全性:始终使用强密码和加密连接
- 性能:根据带宽情况调整连接数和缓冲区大小
- 稳定性:配置自动重启和监控机制
- 合规性:确保使用符合相关法律法规