FRP 内网穿透完整实战教程:从零搭建安全 SSH 隧道

本文摘要

在家办公想远程控制公司电脑?在咖啡厅需要访问家里的开发环境?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 successstart 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 电脑了。配置一次,永久受用。

0 0 投票数
文章评级
订阅评论
提醒
guest

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

0 评论
最多投票
最新 最旧
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x