在家办公想远程控制公司电脑?在咖啡厅需要访问家里的开发环境?FRP(Fast Reverse P...
在家办公想远程控制公司电脑?在咖啡厅需要访问家里的开发环境?FRP(Fast Reverse Proxy)是内网穿透的首选工具,轻量、高效、开源免费。本文基于 frp 0.54.0 版本,手把手教你从零搭建一条安全的远程 SSH 隧道——Windows 本机 + Linux 服务器的经典架构。
📌 工作原理
简单来说,FRP 在你的公网服务器和内网机器之间建立一条隧道。外部设备通过服务器端口访问,流量被转发到内网目标机器:
┌─────────┐ ┌─────────┐ ┌─────────┐
│ 笔记本 │ ─SSH─> │ 服务器 │ ─FRP─> │ 本机 │
│ │ :2222 │ frps │ :7000 │ frpc │
└─────────┘ └─────────┘ └─────────┘
端口说明:
7000:FRP 控制端口(客户端连接服务器)2222:SSH 映射端口(外部访问)7500:Dashboard 管理端口(可选)
📦 环境准备
前往 GitHub Releases 下载对应平台的二进制文件:
| 设备 | 下载文件 | 说明 |
|---|---|---|
| 服务器 | frp_0.54.0_linux_amd64.tar.gz |
解压后只需 frps |
| 本机 | frp_0.54.0_windows_amd64.zip |
解压后只需 frpc |
| 笔记本 | 无需安装 | 直接用 SSH 连接 |
🖥️ 服务器端配置(Linux)
1. 上传并解压
mkdir -p /opt/frp && cd /opt/frp
tar -xzf frp_0.54.0_linux_amd64.tar.gz
cd frp_0.54.0_linux_amd64
2. 配置文件(TOML 格式)
⚠️ 重要:0.54.0 版本使用 TOML 格式,INI 格式已弃用
创建 frps.toml:
# frps.toml - FRP 服务端配置
bindPort = 7000
auth.token = "your_secure_token_here"
Dashboard 管理界面
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "your_dashboard_user"
webServer.password = "your_dashboard_password"
日志配置
log.level = "info"
log.maxDays = 3
3. 配置防火墙
# CentOS/RHEL (firewalld)
sudo firewall-cmd --permanent --add-port=7000/tcp # FRP 通信
sudo firewall-cmd --permanent --add-port=2222/tcp # SSH 映射
sudo firewall-cmd --permanent --add-port=7500/tcp # Dashboard
sudo firewall-cmd --reload
⚠️ 云服务器还需在控制台安全组开放对应端口!
4. 配置 systemd 开机自启
创建 /etc/systemd/system/frps.service:
[Unit]
Description=frp server
After=network.target
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/opt/frp/frp_0.54.0_linux_amd64/frps -c /opt/frp/frp_0.54.0_linux_amd64/frps.toml
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable frps
sudo systemctl start frps
sudo systemctl status frps
💻 本机配置(Windows)
1. 安装 OpenSSH Server
# PowerShell(管理员)
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
2. 配置 SSH 密码认证
编辑 C:\ProgramData\ssh\sshd_config,确保:
PubkeyAuthentication yes
PasswordAuthentication yes
然后 Restart-Service sshd。
🔗 客户端配置(frpc)
将 frp_0.54.0_windows_amd64.zip 解压到 D:\Tools\frp\,创建 frpc.toml:
# frpc.toml - FRP 客户端配置
serverAddr = "your.server.ip"
serverPort = 7000
auth.token = "your_secure_token_here"
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 2222
transport.useEncryption = true
transport.useCompression = true
启动客户端
cd D:\Tools\frp
.\frpc.exe -c frpc.toml
看到 login to server success 和 start proxy success 就说明连接成功了。
配置开机自启
创建批处理文件,然后将其快捷方式放入 shell:startup 启动文件夹即可。
📱 远程连接
# 直接连接
ssh -p 2222 Administrator@your.server.ip
或配置 ~/.ssh/config 后简化为:
ssh home-pc
SSH config 配置:
Host home-pc
HostName your.server.ip
Port 2222
User Administrator
🔒 安全加固
Fail2ban 防暴力破解
在服务器上配置 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 22022
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
findtime = 600
[sshd-frp]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
findtime = 600
安全建议清单
| 措施 | 优先级 | 说明 |
|---|---|---|
| 强 Token | 🔴 高 | 至少 32 位随机字符 |
| IP 白名单 | 🔴 高 | 限制 2222 端口访问来源 |
| SSH 密钥 | 🟡 中 | 禁用密码登录,只允许密钥 |
| 加密传输 | 🟡 中 | 已启用 use_encryption |
| 定期更新 | 🟢 低 | 关注 frp 安全公告 |
IP 白名单配置
服务器端(iptables):
sudo iptables -A INPUT -p tcp --dport 2222 -s 你的公网IP -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 2222 -j DROP
本机端(Windows 防火墙):
netsh advfirewall firewall add rule name="SSH Whitelist" dir=in action=allow protocol=TCP localport=22 remoteip=your.server.ip
netsh advfirewall firewall add rule name="SSH Deny" dir=in action=block protocol=TCP localport=22
🔧 故障排查
问题 1:连接被拒绝
检查清单:云服务器安全组 → 服务器防火墙 → frps 进程状态 → frpc 连接状态。
问题 2:FRP 客户端连接失败
常见原因:Token 不匹配、配置格式错误(用错 INI 而非 TOML)、7000 端口未开放。
排查命令:Test-NetConnection -ComputerName your.server.ip -Port 7000
问题 3:SSH 密码登录失败
# 检查 SSH 配置
Get-Content C:\ProgramData\ssh\sshd_config | Select-String PasswordAuthentication
重启服务
Restart-Service sshd
本地测试
ssh localhost whoami
🚀 进阶:多端口穿透
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 2222
[[proxies]]
name = "rdp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 33389
[[proxies]]
name = "web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 8080
⚡ 版本迁移注意
frp 0.52.0+ 弃用 INI 格式,改用 TOML。核心变化:
| 旧格式 (INI) | 新格式 (TOML) |
|---|---|
[common] |
直接在顶层 |
token = xxx |
auth.token = "xxx" |
[ssh] |
[[proxies]] |
type = tcp |
type = "tcp" |
按照以上步骤,你就能从任何地方通过 SSH 安全地访问家里的 Windows 电脑了。配置一次,永久受用。


