Skip to content

FRP 内网穿透配置实战 ​

目标: 让公网 (互联网) 能访问你家里的服务器服务 (Nextcloud, Web, SSH)。 架构:

  • 服务端 (frps): 部署在云服务器 (VPS) 上,作为流量中转站。
  • 客户端 (frpc): 部署在内网机器 (物理机/虚拟机) 上,建立反向隧道。

1. 服务端部署 (VPS) ​

现状提示: 你的阿里云服务器目前使用 二进制 (Binary) 方式部署在 /opt/frp 目录下。本节保留两种部署方式供参考。

1.1 配置文件 (frps.ini) ​

无论使用 Docker 还是二进制,核心配置都是一样的。

路径: /opt/frp/frps.ini (二进制) 或 /srv/docker/frp/frps.ini (Docker)

ini
[common]
# 核心通信端口 (必须放行防火墙)
bind_port = 7000

# 身份验证 Token (所有客户端必须一致)
token = a7f8b9c2d3e4f5a6b7c8d9e0f1a2b3c4d5

# HTTP 代理端口 (直接访问域名时用)
# 如果 VPS 上没有 Nginx,可以直接设为 80
# 如果 VPS 上有 Nginx,建议设为 8080,然后由 Nginx 反代
vhost_http_port = 80
vhost_https_port = 443

# 管理面板 (可选)
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin_secure_pwd

# 日志
log_file = /opt/frp/frps.log
log_level = info
log_max_days = 3

1.2 启动方式 A: 二进制 (当前使用) ​

适用于不想引入 Docker 的轻量级环境。

Systemd 服务文件: /etc/systemd/system/frps.service

ini
[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
Restart=on-failure
ExecStart=/opt/frp/frp_0.51.3_linux_amd64/frps -c /opt/frp/frp_0.51.3_linux_amd64/frps.ini

[Install]
WantedBy=multi-user.target

管理命令:

bash
systemctl start frps
systemctl enable frps
systemctl status frps

1.3 启动方式 B: Docker (推荐新部署) ​

yaml
version: '3.8'
services:
  frps:
    image: snowdreamtech/frps:0.51.3
    container_name: frps
    restart: always
    network_mode: host
    volumes:
      - ./frps.ini:/etc/frp/frps.ini

2. 客户端部署 (Home Server) ​

我们推荐在内网机器上使用 Docker Compose 部署客户端。

2.1 配置文件 (frpc.ini) ​

关键原则: 同一个服务端下的不同客户端,必须使用不同的代理名称 (Proxy Name)。

路径: C:\Users\hongj\source\lab\core\frp\frpc.ini

ini
[common]
# VPS 公网 IP
server_addr = 47.97.102.172
server_port = 7000
token = a7f8b9c2d3e4f5a6b7c8d9e0f1a2b3c4d5

# --- Windows 物理机服务 (Core) ---

# 1. SSH (物理机)
# 注意: 如果旧虚拟机用了 [ssh],这里必须改名,如 [ssh-core]
[ssh-core]
type = tcp
local_ip = host.docker.internal
local_port = 22
remote_port = 6001  # 必须与旧机器的端口 (6000) 不同

# 2. Web 流量 (新版主页)
[web-home-core]
type = http
local_ip = host.docker.internal
local_port = 80
custom_domains = home.hongjy.cn

2.2 Docker Compose 文件 ​

yaml
version: '3.8'
services:
  frpc:
    image: snowdreamtech/frpc:0.51.3
    container_name: frpc-core
    restart: always
    # 强制指定配置文件 (防止默认读取 toml)
    command: -c /etc/frp/frpc.ini
    volumes:
      - ./frpc.ini:/etc/frp/frpc.ini
    extra_hosts:
      - "host.docker.internal:host-gateway"

3. 多客户端与迁移策略 (Advanced) ​

3.1 渐进式迁移 (Side-by-Side) ​

当你需要从旧服务器 (VM) 迁移到新服务器 (Physical) 时,可以采用双客户端共存方案:

  1. 服务端保持不变: 服务端可以同时接受成百上千个客户端连接。
  2. 新客户端配置:
    • 使用相同的 server_addr 和 token。
    • Proxy Name: 必须唯一 (例如 [web-vm] vs [web-phy])。
    • Remote Port: 必须唯一 (例如 SSH 6000 vs 6001)。
    • Subdomain: 可以使用不同的子域名进行测试 (例如 old.hongjy.cn vs new.hongjy.cn)。

3.2 最终切换 (Cutover) ​

测试完成后,将域名的 DNS 解析不变 (都指向 VPS IP),只需修改 FRP 映射:

  1. 旧客户端: 停止服务,或注释掉 custom_domains = hongjy.cn。
  2. 新客户端: 将 custom_domains 修改为正式域名 hongjy.cn。
  3. 重启新客户端: 流量即刻切换到新机器。

3.3 常用命令 ​

  • 查看连接状态: 访问 Dashboard http://47.97.102.172:7500 (用户/密码见服务端配置)。
  • 重载配置: Docker 环境下直接 docker compose restart。

方舟 · Ark