全部笔记All notes

内网穿透 Frp 完整指南

阅读 5m 54s5m 54s read

概述

Frp (Fast Reverse Proxy) 是一个高性能的内网穿透工具,可以将内网服务暴露到公网,支持 TCP、UDP、HTTP、HTTPS 等多种协议。

🚀 核心特性:

  • 多协议支持:TCP/UDP/HTTP/HTTPS/STCP
  • 加密传输:支持 TLS 加密
  • 负载均衡:支持多个后端服务
  • Web 管理界面:可视化管理和监控

场景应用

1. 远程访问内网服务

  • 访问家里或公司内网的 NAS、路由器管理界面
  • 远程桌面连接(RDP/VNC)
  • SSH 远程管理服务器

2. 微信开发调试

  • 微信公众号/小程序本地开发调试
  • Webhook 回调测试

3. 个人网站部署

  • 将本地开发环境暴露到公网
  • 临时展示项目效果

4. 游戏服务器

  • Minecraft、CS 等游戏服务器搭建
  • 与朋友共享本地游戏服务

安装部署

1. 下载程序

在 GitHub 上下载对应版本的 frp 程序:

# 直接下载指定版本(Linux amd64)
wget https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz

# 或使用 curl
curl -LO https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz

2. 解压安装

# 解压文件
tar -xzvf frp_0.53.2_linux_amd64.tar.gz

# 进入目录
cd frp_0.53.2_linux_amd64/

# 查看文件
ls -la

将文件复制到系统目录:

# 复制到指定目录(推荐)
sudo cp frps /usr/local/bin/
sudo cp frpc /usr/local/bin/

# 或复制到用户目录
cp frps frpc ~/

服务端配置

1. 基本测试

chmod +x frps
./frps

2. 创建配置文件

vim frps.toml

配置文件内容(带注释版本):

bindPort = 7000              # 客户端连接端口
auth.method = "token"        # 认证方式
auth.token = "your_token"    # 认证令牌(请修改为强密码)

webServer.port = 7500        # 管理面板端口
webServer.addr = "0.0.0.0"   # 绑定所有网络接口
webServer.user = "admin"     # 管理员用户名
webServer.password = "admin" # 管理员密码(请修改)

完整配置(无注释版本):

bindPort = 7000
auth.method = "token"
auth.token = "your_secure_token"

webServer.port = 7500
webServer.addr = "0.0.0.0"
webServer.user = "admin"
webServer.password = "your_secure_password"

💡 配置说明:

  • bindPort:客户端连接的端口,需要在防火墙开放
  • auth.token:验证令牌,确保客户端和服务端一致
  • webServer:Web 管理界面配置,访问地址 http://服务器IP:7500

3. 启动服务

./frps -c frps.toml

4. 配置系统服务

创建 systemd 服务文件:

sudo vim /etc/systemd/system/frps.service

配置文件内容:

[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
ExecStart = /usr/local/bin/frps -c /etc/frp/frps.toml
Restart = always
RestartSec = 5s

[Install]
WantedBy = multi-user.target

系统服务管理

# 启用开机自启动
systemctl enable frps

# 启动服务
systemctl start frps

# 查看状态
systemctl status frps

# 停止服务
systemctl stop frps

# 重启服务
systemctl restart frps

# 查看日志
journalctl -u frps -f

客户端配置

1. 基本测试

chmod +x frpc
./frpc

2. 创建配置文件

vim frpc.toml

配置文件内容(带注释版本):

serverAddr = "1.1.1.1"     # 服务器公网IP
serverPort = 7000          # 服务器端口
auth.method = "token"      # 认证方式
auth.token = "your_secure_token"  # 与服务端一致的令牌

[[proxies]]
name = "web"               # 代理名称(唯一)
type = "tcp"               # 代理类型
localIP = "127.0.0.1"      # 本地服务IP
localPort = 80             # 本地服务端口
remotePort = 8080          # 远程访问端口

[[proxies]]
name = "ssh"               # SSH服务代理
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 2222

完整配置(无注释版本):

serverAddr = "1.1.1.1"
serverPort = 7000
auth.method = "token"
auth.token = "your_secure_token"

[[proxies]]
name = "web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 8080

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 2222

3. 启动客户端

./frpc -c frpc.toml

4. 配置系统服务

sudo vim /etc/systemd/system/frpc.service

配置文件内容:

[Unit]
Description = frp client
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
ExecStart = /usr/local/bin/frpc -c /etc/frp/frpc.toml
Restart = always
RestartSec = 5s

[Install]
WantedBy = multi-user.target

系统服务管理

# 启用开机自启动
systemctl enable frpc

# 启动服务
systemctl start frpc

# 查看状态
systemctl status frpc

# 查看日志
journalctl -u frpc -f

高级配置

1. 配置 HTTP/HTTPS 代理

[[proxies]]
name = "web_http"
type = "http"
localIP = "127.0.0.1"
localPort = 8080
customDomains = ["www.example.com"]

[[proxies]]
name = "web_https"
type = "https"
localIP = "127.0.0.1"
localPort = 443
customDomains = ["www.example.com"]

2. 配置 STCP 安全隧道

服务端配置:

[[proxies]]
name = "secret_ssh"
type = "stcp"
localIP = "127.0.0.1"
localPort = 22
secretKey = "your_secret_key"

访问端配置:

[[visitors]]
name = "secret_ssh_visitor"
type = "stcp"
serverName = "secret_ssh"
secretKey = "your_secret_key"
bindAddr = "127.0.0.1"
bindPort = 6000

3. 后台运行方式

nohup ./frpc -c frpc.toml >/dev/null 2>&1 &

查看运行进程:

ps aux | grep frpc

终止进程:

# 查找进程ID
ps aux | grep frpc
# 终止进程(替换 PID 为实际进程ID)
kill PID

常见问题

问题1:连接服务器失败

现象:客户端无法连接到服务器 解决方案:

  1. 检查服务器防火墙是否开放相应端口
  2. 确认服务器端 frps 正常运行
  3. 验证 token 是否一致
  4. 检查网络连接是否正常

问题2:代理服务无法访问

现象:配置正确但无法通过远程端口访问服务 解决方案:

  1. 检查本地服务是否正常运行
  2. 确认远程端口没有被占用
  3. 检查服务器防火墙规则
  4. 验证配置文件语法是否正确

问题3:Web 管理界面无法访问

现象:无法访问 frp 管理界面 解决方案:

  1. 确认 webServer 配置正确
  2. 检查防火墙是否开放管理端口
  3. 验证用户名密码是否正确
  4. 使用 http://服务器IP:7500 访问

问题4:服务频繁断开

现象:连接不稳定,经常断开 解决方案:

  1. 使用 systemd 服务配置自动重启
  2. 检查网络稳定性
  3. 增加心跳间隔配置
  4. 查看日志定位具体问题

相关文章

网络编程基础

服务器部署

远程管理工具

微服务架构

移动开发

总结

Frp 是一个强大且易用的内网穿透工具,具有以下特点:

🎯 核心优势

  • 简单易用:配置简洁,上手快速
  • 性能优秀:高并发,低延迟
  • 功能丰富:支持多种协议和场景
  • 跨平台:支持 Windows/Linux/macOS

📚 适用场景

  • 开发调试:本地开发环境外网访问
  • 远程办公:访问公司内网资源
  • 个人应用:搭建个人网站、游戏服务器
  • 物联网:设备远程管理和监控

🚀 最佳实践

  1. 安全第一:使用强密码,定期更新
  2. 端口管理:合理规划端口使用
  3. 监控日志:定期检查运行状态
  4. 备份配置:保存重要配置文件