📚 一、FRP基础认知

什么是FRP?

FRP(Fast Reverse Proxy)是一款开源的高性能反向代理工具,通过**服务端(公网服务器)+客户端(内网设备)**的架构,实现外网访问内网服务的需求。核心原理是在公网服务器上建立中转,将外网请求转发到内网设备。

必备条件

  1. 一台拥有公网IP的云服务器(推荐阿里云、腾讯云等,系统选择CentOS或Ubuntu)
  2. 一台需要被访问的内网设备(电脑、NAS、树莓派等,需能联网)
  3. 服务器需开放必要端口(参考下文配置)


⚙️ 二、服务端(公网服务器)配置

1. 下载并安装FRP

# 1. 下载最新版本(以v0.64.0为例,可替换为最新版本号)
wget https://github.com/fatedier/frp/releases/download/v0.64.0/frp_0.64.0_linux_amd64.tar.gz 

# 2. 解压压缩包
tar -zxvf frp_0.64.0_linux_amd64.tar.gz

# 3. 进入解压后的目录
cd frp_0.64.0_linux_amd64

2. 配置服务端文件(frps.ini)

# 编辑配置文件
vim frps.ini

# 写入以下基础配置
[common]
# 服务端与客户端通信的端口(需开放防火墙)
bind_port = 7000

# (可选)配置仪表盘,用于监控FRP状态
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = your_password

# (可选)设置认证token,提高安全性
# token = your_secret_token

3. 启动服务端

# 临时启动(测试用)
./frps -c ./frps.ini

# 后台启动(生产环境推荐)
nohup ./frps -c ./frps.ini > frps.log 2>&1 &

4. 设置开机自启(systemd方式)

# 创建服务文件
sudo vim /etc/systemd/system/frps.service

# 写入以下内容(替换为你的FRP路径)
[Unit]
Description=frp Server Service
After=network.target

[Service]
Type=simple
ExecStart=/root/frp_0.64.0_linux_amd64/frps -c /root/frp_0.64.0_linux_amd64/frps.ini
Restart=always

[Install]
WantedBy=multi-user.target

# 启用并启动服务
sudo systemctl daemon-reload
sudo systemctl start frps
sudo systemctl enable frps

# 查看服务状态
sudo systemctl status frps


🖥️ 三、客户端(内网设备)配置

1. 下载FRP客户端

根据内网设备的系统选择对应版本:

  • Windows:下载 frp_0.64.0_windows_amd64.zip
  • Mac:下载 frp_0.64.0_darwin_amd64.tar.gz(Intel芯片)或 frp_0.64.0_darwin_arm64.tar.gz(M系列芯片)
  • Linux:下载对应架构的压缩包

2. 配置客户端文件(frpc.ini)

以下是几个常见场景的配置示例:

场景1:远程SSH访问内网Linux主机
[common]
# 服务端公网IP或域名
server_addr = your_server_ip
server_port = 7000
# token需与服务端一致(如果设置了的话)
# token = your_secret_token

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000  # 服务端开放的端口,用于访问内网SSH
场景2:远程桌面访问Windows主机
[common]
server_addr = your_server_ip
server_port = 7000

[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389  # Windows远程桌面默认端口
remote_port = 7001
场景3:外网访问内网网站
[common]
server_addr = your_server_ip
server_port = 7000

[web]
type = http
local_port = 80
custom_domains = your_domain.com  # 需将域名解析到服务端IP

3. 启动客户端

# Windows系统(命令提示符)
frpc.exe -c frpc.ini

# Linux/Mac系统
./frpc -c ./frpc.ini

# 后台启动(Linux/Mac)
nohup ./frpc -c ./frpc.ini > frpc.log 2>&1 &


🧪 四、验证配置

1. SSH访问测试

在外网设备上执行:

ssh 内网用户名@服务端公网IP -p 6000

如果能成功登录内网主机,说明配置生效。

2. 远程桌面测试

在Windows搜索栏输入 mstsc,打开远程桌面连接,输入:

服务端公网IP:7001

输入内网主机的用户名和密码,即可远程桌面。

3. 网站访问测试

在浏览器中输入你的域名:

http://your_domain.com

如果能正常访问内网网站,说明HTTP映射配置成功。



🔒 五、进阶优化技巧

1. 提高安全性

  • 设置复杂的认证token(在服务端和客户端配置文件中添加 token = your_secret_token
  • 禁用不必要的端口,仅开放需要使用的端口
  • 配置防火墙规则,限制访问来源IP

2. 实现P2P打洞(减少服务器负载)

FRP支持P2P模式,当客户端之间可以直接通信时,无需通过服务端中转:

Ini复制# 在客户端配置中添加
[p2p_ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 启用P2P模式
use_p2p = true

3. 多客户端管理

可以在服务端配置文件中设置不同的认证token,实现多客户端的隔离管理:

Ini复制# 服务端配置
[common]
bind_port = 7000
token = global_token

# 为特定客户端设置独立token
[user1]
token = user1_token


❓ 六、常见问题排查

  1. 连接失败:检查服务器防火墙和安全组是否开放了必要端口(7000、映射的远程端口等)
  2. 无法访问:确保服务端和客户端的配置文件中 server_addrserver_porttoken 等参数一致
  3. 服务异常退出:查看日志文件(frps.log、frpc.log),定位具体错误信息
  4. 开机自启失败:检查服务文件中的路径是否正确,权限是否足够