news 2026/10/24 4:13:27

frp 内网穿透完整部署教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
frp 内网穿透完整部署教程

📋 前提条件

角色需要
服务端(frps)一台有公网 IP的 VPS(Linux)
客户端(frpc)内网机器(Linux / Windows / macOS)
防火墙VPS 安全组/防火墙放行 frp 端口(默认 7000 和要转发的端口)

🏗️ 整体架构

你的电脑(FinalShell) → 公网VPS(frps, 端口6000) → 内网机器(frpc → 本地22端口)

第一步:下载 frp

查看架构

uname-m# x86_64 → amd64# aarch64 → arm64

下载并解压(以 Linux amd64 为例)

cd/optwgethttps://github.com/fatedier/frp/releases/download/v0.71.1/frp_0.71.1_linux_amd64.tar.gztar-zxvffrp_0.71.1_linux_amd64.tar.gzcdfrp_0.71.1_linux_amd64

文件说明:

  • frps+frps.toml→ 服务端用(放 VPS 上)
  • frpc+frpc.toml→ 客户端用(放内网机器上)

第二步:配置服务端(VPS 上操作)

2.1 编辑 frps.toml

cd/opt/frp_0.71.1_linux_amd64vifrps.toml

填入:

# frps.toml - 服务端配置 bindPort = 7000 # frp 服务端口,客户端连接用 auth.token = "你自己设一个复杂密码" # 身份验证,客户端必须一致 # 可选:开启 Dashboard 面板 webServer.addr = "0.0.0.0" webServer.port = 7500 webServer.user = "admin" webServer.password = "面板密码"

2.2 放行防火墙端口

# 如果你用 ufwufw allow7000/tcp ufw allow6000/tcp# SSH 转发用的端口ufw allow7500/tcp# Dashboard 面板端口(可选)# 如果你用 firewalldfirewall-cmd --add-port=7000/tcp--permanentfirewall-cmd --add-port=6000/tcp--permanentfirewall-cmd--reload

⚠️别忘了去 VPS 服务商的控制台(安全组/防火墙)也放行这些端口!

2.3 启动服务端(前台测试)

./frps-cfrps.toml

看到frps started successfully说明启动成功。按Ctrl+C停止,后面配置 systemd 后台运行。


第三步:配置客户端(内网机器上操作)

3.1 同样下载 frp

cd/optwgethttps://github.com/fatedier/frp/releases/download/v0.71.1/frp_0.71.1_linux_amd64.tar.gztar-zxvffrp_0.71.1_linux_amd64.tar.gzcdfrp_0.71.1_linux_amd64

3.2 编辑 frpc.toml

vifrpc.toml

填入:

# frpc.toml - 客户端配置 serverAddr = "你的VPS公网IP" serverPort = 7000 auth.token = "和服务端一样的密码" # 可选:客户端管理面板 webServer.addr = "127.0.0.1" webServer.port = 7400 # SSH 隧道 [[proxies]] name = "ssh-ubuntu" type = "tcp" localIP = "127.0.0.1" localPort = 22 remotePort = 6000 # VPS 上对外暴露的端口,随便设(1024-65535)

remotePort = 6000的意思:别人连 VPS 的 6000 端口,就等于连我内网机器的 22 端口。

3.3 启动客户端测试

./frpc-cfrpc.toml

看到login to server success和proxy started就说明连上了。


第四步:测试 FinalShell 连接

打开 FinalShell,新建 SSH 连接:

项值
主机你的 VPS 公网 IP
端口6000(就是 remotePort)
用户名内网机器的 SSH 用户名(比如 root)
密码/密钥内网机器的 SSH 密码或密钥

⚠️ 注意:连的是VPS 的 IP + 转发端口,不是内网机器的 IP。

能成功登录就说明穿透成功了!


第五步:配置开机自启(systemd)

测试通过后,配置成系统服务,开机自动运行。

5.1 服务端(VPS)

vi/etc/systemd/system/frps.service

写入:

[Unit] Description=frp server After=network.target [Service] Type=simple ExecStart=/opt/frp_0.71.1_linux_amd64/frps -c /opt/frp_0.71.1_linux_amd64/frps.toml Restart=always RestartSec=5 [Install] WantedBy=multi-user.target

启动并设为开机自启:

systemctl daemon-reload systemctl start frps systemctlenablefrps systemctl status frps# 查看状态

5.2 客户端(内网机器)

vi/etc/systemd/system/frpc.service

写入:

[Unit] Description=frp client After=network.target [Service] Type=simple ExecStart=/opt/frp_0.71.1_linux_amd64/frpc -c /opt/frp_0.71.1_linux_amd64/frpc.toml Restart=always RestartSec=5 [Install] WantedBy=multi-user.target

启动并设为开机自启:

systemctl daemon-reload systemctl start frpc systemctlenablefrpc systemctl status frpc

附录 A:Windows 客户端一键部署(PowerShell + nssm)

以下是 Windows 系统部署 frp 客户端的一键 PowerShell 脚本,包含:下载解压、Defender 排除、配置生成、nssm 安装为系统服务(开机自启)。示例以转发 RDP(3389 端口)为例。

需要以管理员身份运行 PowerShell。

A.1 完整脚本

# 先把目录建出来,把整个目录排除掉(zip 和解压后的 exe 都在这里面)New-Item-ItemType Directory-Force-Path C:\frp|Out-NullAdd-MpPreference-ExclusionPath"C:\frp"Add-MpPreference-ExclusionProcess"frpc.exe","frps.exe"# 确认生效(Get-MpPreference).ExclusionPath#下到已排除的目录里Invoke-WebRequest-Uri"https://gh-proxy.com/https://github.com/fatedier/frp/releases/download/v0.71.1/frp_0.71.1_windows_amd64.zip"`-OutFile"C:\frp\frp.zip"-UseBasicParsing# 用系统自带 tar 解压,比 Expand-Archive 稳(后者对大 zip 还有路径长度限制)tar-xf C:\frp\frp.zip-C C:\frpGet-ChildItemC:\frp\frp_0.71.1_windows_amd64#配置并设置开机自启$D='C:\frp\frp_0.71.1_windows_amd64';Add-MpPreference-ExclusionPath$D-EA 0;Add-MpPreference-ExclusionProcess frpc.exe-EA 0;Copy-Item$D\frpc.toml"$D\frpc.toml.bak.$(Get-Date-f yyyyMMdd-HHmmss)"-EA 0;@('serverAddr = "32.188.73.145"','serverPort = 40000','auth.token = "dyshk"','','[[proxies]]','name = "test-tcp"','type = "tcp"','localIP = "127.0.0.1"','localPort = 3389','remotePort = 43389')|Set-Content-Path$D\frpc.toml-Encoding ASCII;[Net.ServicePointManager]::SecurityProtocol=3072;Invoke-WebRequesthttps://nssm.cc/release/nssm-2.24.zip-OutFile$env:TEMP\nssm.zip-UseBasicParsing;Expand-Archive$env:TEMP\nssm.zip-DestinationPath$env:TEMP\nssm-Force;$n=(Get-ChildItem$env:TEMP\nssm-Filternssm.exe-Recurse-File|? FullName-matchwin64|select-First 1).FullName;&$nstop frpc 2>$null;&$nremove frpc confirm 2>$null;&$ninstall frpc"$D\frpc.exe";&$nsetfrpc AppParameters"-c `"$D\frpc.toml`"";&$nsetfrpc AppDirectory$D;&$nsetfrpc DisplayName"frp client";&$nsetfrpcStartSERVICE_AUTO_START;&$nsetfrpc AppRestartDelay 5000;&$nsetfrpc AppStdout"$D\frpc.log";&$nsetfrpc AppStderr"$D\frpc.log";&$nstartfrpc;&$nstatus frpc;Get-Servicefrpc|selectName,Status,StartType

A.2 脚本各段简要说明

段落作用
New-Item+Add-MpPreference创建C:\frp目录并加入 Windows Defender 排除列表,防止 frp 被误报查杀
Invoke-WebRequest下载 frp通过 gh-proxy 镜像加速下载 Windows 版 frp 到已排除目录
tar -xf解压用系统自带 tar 解压 zip,比Expand-Archive更稳定
$D='C:\frp\...'配置生成自动写入frpc.toml配置(示例:转发本地 3389 → VPS 43389)
下载 nssm下载 nssm(Non-Sucking Service Manager),用来把 frpc 注册成 Windows 系统服务
nssm install/set安装 frpc 服务,设置自动启动、崩溃重启延迟、日志输出路径
nssm start+Get-Service启动服务并查看运行状态

A.3 需要修改的参数

脚本里的示例配置,使用前请改成你自己的:

参数示例值说明
serverAddripip你的 VPS 公网 IP
serverPort40000frps 服务端端口(对应 frps.toml 的bindPort)
auth.tokendyshk认证密钥,必须和服务端一致
localPort3389内网要转发的本地端口(3389=RDP,22=SSH)
remotePort43389VPS 上对外暴露的端口

A.4 常用管理命令

# 查看服务状态Get-Servicefrpc# 启动 / 停止 / 重启服务Start-ServicefrpcStop-ServicefrpcRestart-Servicefrpc# 查看日志Get-ContentC:\frp\frp_0.71.1_windows_amd64\frpc.log-Tail 50-Wait# 修改配置后重启服务生效Restart-Servicefrpc

第六步:进阶 — 添加更多穿透服务(可选)

frp 不止能转发 SSH,想穿透什么服务就在frpc.toml里加一个[[proxies]]块。

转发 Web 服务(80 端口)

[[proxies]] name = "web-http" type = "tcp" localIP = "127.0.0.1" localPort = 80 remotePort = 8080

转发 RDP(Windows 远程桌面)

[[proxies]] name = "rdp" type = "tcp" localIP = "192.168.124.10" # 内网 Windows 的 IP localPort = 3389 remotePort = 6389

转发 MySQL

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

改完配置重载:

systemctl restart frpc

🔒 安全建议

  1. auth.token 一定要设复杂,否则别人可以扫到你的 7000 端口随便连
  2. 不要转发不必要的端口,只转发你需要的
  3. SSH 建议用密钥登录,禁用密码登录,防止被爆破
  4. 服务端限制允许转发的端口范围:
    # frps.toml 里加 allowPorts = [ { start = 6000, end = 7000 } ]
  5. Dashboard 面板不要暴露给公网,或者设置强密码
  6. 开启 TLS 加密传输(v0.71.x 默认已支持 wire protocol v2 + AEAD)

📝 常用命令

# 查看服务状态systemctl status frps# 服务端systemctl status frpc# 客户端# 实时查看日志journalctl-ufrps-f# 服务端journalctl-ufrpc-f# 客户端# 重启服务systemctl restart frps systemctl restart frpc# 停止服务systemctl stop frps systemctl stop frpc

❓ 常见问题排查

1. 客户端连不上服务端

  • 检查 VPS 安全组/防火墙是否放行 7000 端口
  • 确认serverAddr填的是 VPS 公网 IP
  • 确认auth.token服务端和客户端一致

2. 连不上转发端口

  • 检查 VPS 防火墙是否放行remotePort端口
  • 确认内网服务是否在运行(SSH 是否开着)
  • 看journalctl -u frpc -f有没有报错

3. 频繁断开

  • 检查网络稳定性
  • 已配置 systemd +Restart=always的话会自动重连

🔗 参考链接

  • frp 官方仓库:github.com/fatedier/frp
  • frp 官方文档:gofrp.org
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/24 4:11:19

【AI4S】生化环材高可信技术与产业周报(2026-10-10—2026-10-21)

本周值得看 从文字需求出发设计蛋白,四类功能得到实验验证。 Pinal 生成的荧光蛋白、PET 塑料水解酶、醇脱氢酶和代谢 H 蛋白均观察到预期功能,其中设计 H 蛋白使多酶 CO₂ 固定通路的单位体积产物量达到使用天然 H 蛋白时的 1.7 倍。单细胞模型提出的干…

作者头像 李华
网站建设 2026/10/24 4:11:04

制动系统靠哪些部件一起把车停下?

每天开车踩刹车几十次,顺畅到你几乎忘了它的存在。可你有没有想过:就脚上那点力气,怎么就能把一吨多重的铁疙瘩,稳稳当当给摁停?这事儿看着不起眼,背后其实是一整套“力的传递放大”系统在连轴转。搞懂这套…

作者头像 李华
网站建设 2026/10/24 4:09:44

11-1、python常用内建模块

前言Python强大的一大原因就是自带丰富的标准库模块,开箱即用,不用重复造轮子。本篇整理廖雪峰教程主线里重点讲解的常用内置模块,包含时间模块、随机、base64、hashlib、hmac、collections、urllib等,都是开发高频使用的模块。da…

作者头像 李华
网站建设 2026/10/24 4:09:06

2026年程序员必备:AI+工程化,薪资溢价50%的转型指南

2026年程序员职场正经历变革,纯开发岗位需求下降,而AI工程化相关岗位需求激增,平均薪资溢价达50%。AI工具替代重复性编码工作,纯开发技术壁垒降低,企业更看重AI结合业务创造价值。AI工程化人才缺口巨大,涵盖…

作者头像 李华
网站建设 2026/10/24 4:07:27

线缆车间无纸化改造:从纸质工单到数字化信息流

做线缆车间数字化改造,很多人第一反应是上MES系统。但MES只是工具,改造的起点其实是车间的信息流——从纸质工单、手写记录、口头传递,到系统自动采集、实时流转、结构化存储。无纸化不是目的,是信息流数字化之后的自然结果。 我参…

作者头像 李华