通过云服务器配置FRP反向代理到本地机器指南(以阿里云为例)


一、概述

什么是FRP?

FRP(Fast Reverse Proxy)是一款开源的高性能反向代理工具,主要用于内网穿透。它可以将内网中的服务(如Web服务器、SSH、远程桌面等)通过具有公网IP的云服务器暴露到互联网,实现从外部访问内网服务的目的。

工作原理

[本地内网机器] --> [FRP客户端] --> [阿里云ECS服务器] --> [互联网用户]
       ↑                    ↑                    ↑
   运行本地服务         连接服务器         运行FRP服务端

二、准备工作

1. 阿里云ECS服务器购买

  • 登录阿里云控制台
  • 选择ECS实例规格(推荐1核1G或以上)
  • 选择操作系统(推荐Ubuntu 20.04/22.04或CentOS 7/8)
  • 配置网络和安全组
  • 获取公网IP地址

2. 安全组配置

在阿里云控制台配置安全组,开放以下端口:

端口 用途
22 SSH端口,用于服务器管理
7000 FRP服务端口(默认),用于客户端连接
7500 FRP管理端口(可选),用于Web管理界面
8000-9000 代理端口范围,根据需要开放

操作步骤

  1. 进入ECS实例详情页
  2. 点击”安全组” -> “配置规则”
  3. 添加入方向规则:
    • 协议:TCP
    • 端口范围:7000/7000
    • 授权对象:0.0.0.0/0
    • 描述:FRP服务端口

三、服务器端配置(阿里云ECS)

1. 连接服务器

ssh root@你的阿里云公网IP

2. 下载FRP

# 创建目录
mkdir -p /opt/frp && cd /opt/frp

# 下载最新版本(以0.68.0为例,请根据实际情况调整)
wget https://github.com/fatedier/frp/releases/download/v0.68.0/frp_0.68.0_linux_amd64.tar.gz

# 解压
tar -xzf frp_0.68.0_linux_amd64.tar.gz
cd frp_0.68.0_linux_amd64

3. 配置服务端(frps)

创建配置文件 frps.toml

# frps.toml
bindPort = 7000
auth.method = "token"
auth.token = "your_strong_password_here"  # 请替换为强密码

# 可选:Web管理界面
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin_password"  # 请替换为强密码

# 日志配置
log.to = "/var/log/frps.log"
log.level = "info"
log.maxDays = 7

4. 设置系统服务

创建systemd服务文件:

cat > /etc/systemd/system/frps.service << EOF
[Unit]
Description=FRP Server Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/opt/frp/frp_0.68.0_linux_amd64/frps -c /opt/frp/frp_0.68.0_linux_amd64/frps.toml
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target
EOF

5. 启动服务

# 重新加载systemd配置
systemctl daemon-reload

# 启动FRP服务端
systemctl start frps

# 设置开机自启
systemctl enable frps

# 查看状态
systemctl status frps

6. 验证服务

# 查看日志
tail -f /var/log/frps.log

# 检查端口监听
netstat -tlnp | grep 7000

四、客户端配置(本地机器)

1. 下载FRP

根据你的操作系统下载对应版本:

操作系统 下载文件
Windows frp_0.68.0_windows_amd64.zip
macOS frp_0.68.0_darwin_amd64.tar.gz
Linux frp_0.68.0_linux_amd64.tar.gz

2. 配置客户端(frpc)

创建配置文件 frpc.toml

# frpc.toml
serverAddr = "你的阿里云公网IP"
serverPort = 7000
auth.method = "token"
auth.token = "your_strong_password_here"  # 必须与服务器端一致

# 示例1:映射本地Web服务(HTTP)
[[proxies]]
name = "web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 8080

# 示例2:映射SSH服务
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

# 示例3:映射远程桌面(RDP)
[[proxies]]
name = "rdp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 3389

3. 启动客户端

Windows

frpc.exe -c frpc.toml

Linux/macOS

./frpc -c frpc.toml

五、测试连接

1. 测试Web服务映射

假设你本地运行了一个Web服务器在80端口:

# 通过阿里云公网IP和映射端口访问
curl http://你的阿里云公网IP:8080

2. 测试SSH连接

# 通过映射的SSH端口连接本地机器
ssh -p 6000 你的用户名@你的阿里云公网IP

3. 测试远程桌面

  • Windows远程桌面连接:你的阿里云公网IP:3389
  • 或使用其他RDP客户端

六、高级配置

1. 域名访问(可选)

如果你有域名,可以配置域名解析:

# 在frpc.toml中添加HTTP代理
[[proxies]]
name = "web-http"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["yourdomain.com"]

2. 配置多个服务

# 映射多个服务
[[proxies]]
name = "web1"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 8080

[[proxies]]
name = "web2"
type = "tcp"
localIP = "192.168.1.100"
localPort = 8080
remotePort = 8081

[[proxies]]
name = "database"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3306
remotePort = 3306

3. 安全加固

# 在frps.toml中添加安全配置
transport.maxPoolCount = 10
transport.tcpMux = true
allowPorts = [
  { start = 8000, end = 9000 },
  { start = 6000, end = 6000 }
]

七、常见问题解决

1. 连接失败

  • 检查安全组:确保阿里云安全组已开放相应端口
  • 检查防火墙:服务器和本地机器的防火墙设置
  • 检查配置:确认服务器地址、端口、密码配置正确
  • 检查网络:确认本地机器可以访问互联网

2. 端口被占用

# Linux检查端口占用
netstat -tlnp | grep 端口号
# 或
lsof -i:端口号

# Windows检查端口占用
netstat -ano | findstr 端口号

3. 服务无法启动

# 查看详细日志
journalctl -u frps.service -f

# 检查配置文件语法
./frps -c frps.toml

4. 性能优化

  • 调整 transport.maxPoolCount(最大连接池)
  • 启用 transport.tcpMux(TCP多路复用)
  • 调整 transport.poolCount(连接池大小)

八、安全注意事项

  1. 使用强密码:为FRP认证设置强密码,定期更换
  2. 限制访问IP:在安全组中限制访问IP范围
  3. 最小权限原则:只开放必要的端口
  4. 定期更新:及时更新FRP到最新版本
  5. 监控日志:定期检查访问日志,发现异常
  6. 使用HTTPS:对于Web服务,建议使用HTTPS加密

九、维护管理

1. 更新FRP

# 停止服务
systemctl stop frps

# 备份配置
cp /opt/frp/frp_0.68.0_linux_amd64/frps.toml /opt/frp/frps.toml.backup

# 下载新版本
# ... 重复下载步骤

# 恢复配置
cp /opt/frp/frps.toml.backup /opt/frp/new_version/frps.toml

# 启动服务
systemctl start frps

2. 日志管理

# 配置日志轮转
cat > /etc/logrotate.d/frps << EOF
/var/log/frps.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 0640 nobody nobody
}
EOF

十、参考资源




Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • 概率论与数理统计 第4章 随机变量的数字特征
  • a post with plotly.js
  • a post with image galleries
  • a post with tabs
  • a post with typograms