Appearance
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 = 31.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 frps1.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.ini2. 客户端部署 (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.cn2.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) 时,可以采用双客户端共存方案:
- 服务端保持不变: 服务端可以同时接受成百上千个客户端连接。
- 新客户端配置:
- 使用相同的
server_addr和token。 - Proxy Name: 必须唯一 (例如
[web-vm]vs[web-phy])。 - Remote Port: 必须唯一 (例如 SSH 6000 vs 6001)。
- Subdomain: 可以使用不同的子域名进行测试 (例如
old.hongjy.cnvsnew.hongjy.cn)。
- 使用相同的
3.2 最终切换 (Cutover)
测试完成后,将域名的 DNS 解析不变 (都指向 VPS IP),只需修改 FRP 映射:
- 旧客户端: 停止服务,或注释掉
custom_domains = hongjy.cn。 - 新客户端: 将
custom_domains修改为正式域名hongjy.cn。 - 重启新客户端: 流量即刻切换到新机器。
3.3 常用命令
- 查看连接状态: 访问 Dashboard
http://47.97.102.172:7500(用户/密码见服务端配置)。 - 重载配置: Docker 环境下直接
docker compose restart。
