当前位置: 首页 > news >正文

FRP 内网穿透全流程部署指南 (Windows/Linux)

文章目录

  • 前言
  • 1. 概述
  • 2. 准备工作
  • 3. 服务端 (Frps) 部署 ( Linux )
    • 3.1 安装与配置
      • 3.1.1 使用 SSH 连接到你的公网服务器
      • 3.1.2 上传并解压 FRP 压缩包
      • 3.1.3 配置服务端文件 frps.toml
    • 3.2 启动 Frps
      • 方式一:命令行直接启动 (测试用)
      • 方式二:使用 Systemd 创建服务 (推荐,持久化运行)
        • 1. 创建 systemd 服务文件
        • 2. 启用并启动服务
        • 3. 检查状态
    • 3.3 防火墙开放端口
  • 4. 客户端 (Frpc) 部署
    • 4.1 Windows 客户端
      • 4.1.1 下载并解压 Windows 版的 FRP 压缩包
      • 4.1.2 在解压目录中创建配置文件 frpc.toml
      • 4.1.3 启动 Frpc
    • 4.2 Linux 客户端
      • 4.2.1 在内网 Linux 机器上下载并解压对应的 FRP 压缩包
      • 4.2.2 配置 frpc.toml
      • 4.2.3 启动 Frpc
        • 4.2.3.1.命令行启动
        • 4.2.3.2.使用 Systemd 创建服务 (推荐)
          • 4.2.3.2.1 创建服务文件
          • 4.2.3.2.2 启用并启动服务
          • 4.2.3.2.3 检查状态
  • 5. 核心配置参数详解
    • 5.1 通用参数 (Frps & Frpc)
    • 5.2 服务端 (Frps) 特有参数
    • 5.3 客户端 (Frpc) 代理配置参数 (`[[proxies]]`)
  • 6. 测试与验证
  • 7. 常见问题与注意事项 (FAQ)


前言

在内网环境下部署的各类服务(如网站、远程桌面、数据库、NAS等),由于没有公网IP,无法被互联网上的用户直接访问,极大地限制了其应用场景。内网穿透技术正是解决这一痛点的关键。FRP作为一个高性能、轻量级的反向代理工具,凭借其配置简单、稳定可靠的特点,成为了实现内网穿透的热门选择。

1. 概述

FRP (Fast Reverse Proxy) 是一个高性能的反向代理应用,主要用于将内网服务暴露到公网,实现内网穿透。它非常轻量且易于配置。

核心概念:

  • Frps (Server):部署在具有公网 IP 的服务器上,用于接收外部请求
  • Frpc (Client):部署在内网的机器上,用于向 Frps 注册服务并建立稳定隧道
  • 通信流程:外部用户 -> 公网 IP (Frps) -> 隧道 -> 内网 IP (Frpc) -> 内网服务

2. 准备工作

  1. 一台具有公网 IP 的服务器(如云服务器 VPS),用于运行 frps(服务端)
  2. 一台或多台内网机器(如个人电脑、树莓派、NAS、虚拟机等),用于运行 frpc(客户端)
  3. 下载 FRP 工具:从 FRP GitHub Releases 下载对应系统架构的压缩包
    • 服务端:通常选择 linux_amd64
    • 客户端 (Windows):选择 windows_amd64
    • 客户端 (Linux):选择 linux_armlinux_arm64linux_amd64 等,根据你的内网机器架构选择
      在这里插入图片描述
      在这里插入图片描述

3. 服务端 (Frps) 部署 ( Linux )

3.1 安装与配置

3.1.1 使用 SSH 连接到你的公网服务器

3.1.2 上传并解压 FRP 压缩包

# 假设压缩包名为 frp_0.64.0_linux_amd64.tar.gz
tar -zxvf frp_0.64.0_linux_amd64.tar.gz
cd frp_0.64.0_linux_amd64

在这里插入图片描述
在这里插入图片描述

3.1.3 配置服务端文件 frps.toml

(FRP v0.52.0 及以上版本使用 TOML 格式,旧版为 .ini)

# frps.toml
bindPort = 7000               # 与客户端通信的端口,必须开放
auth.method = "token"         # 认证方式,强烈建议设置
auth.token = "your_strong_password_here" # 认证令牌,客户端需要配置相同的才能连接# Web 控制台(可选,用于查看连接状态)
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"# 启用仪表盘(可选)
enablePrometheus = false

3.2 启动 Frps

方式一:命令行直接启动 (测试用)

./frps -c ./frps.toml

在这里插入图片描述

方式二:使用 Systemd 创建服务 (推荐,持久化运行)

1. 创建 systemd 服务文件

sudo vim /etc/systemd/system/frps.service

[Unit]
Description=Frp Server Service
After=network.target[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/develop/frp/frp_0.64.0_linux_amd64/frps -c /usr/local/develop/frp/frp_0.64.0_linux_amd64/frps.toml[Install]
WantedBy=multi-user.target

注意:将 /usr/local/develop/frp/frp_0.64.0_linux_amd64 替换为你实际的 frps 文件所在路径。

2. 启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable frps
sudo systemctl start frps
3. 检查状态
sudo systemctl status frps

在这里插入图片描述

3.3 防火墙开放端口

确保服务器的防火墙开放了 frps.toml 中配置的端口(如 70007500)。

# 使用 UFW (Debian/Ubuntu)
sudo ufw allow 7000/tcp
sudo ufw allow 7500/tcp # 如果使用了 Web 控制台
sudo ufw reload# 使用 Firewalld (CentOS/RHEL)
sudo firewall-cmd --permanent --add-port=7000/tcp
sudo firewall-cmd --permanent --add-port=7500/tcp # 如果使用了 Web 控制台
sudo firewall-cmd --reload

注意:如果是云服务器,需要将这个端口在安全组也进行开放

在这里插入图片描述

4. 客户端 (Frpc) 部署

4.1 Windows 客户端

4.1.1 下载并解压 Windows 版的 FRP 压缩包

4.1.2 在解压目录中创建配置文件 frpc.toml

# frpc.toml
serverAddr = "your_server_ip"  # 替换为你的公网服务器 IP
serverPort = 7000              # 与服务端 bindPort 保持一致
auth.method = "token"
auth.token = "your_strong_password_here" # 与服务端 auth.token 保持一致# 配置一个示例隧道(例如转发本机 RDP 服务)
[[proxies]]
name = "rdp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 6000 # 外部用户通过 serverIP:6000 访问内网 RDP# 配置另一个示例(例如转发 Web 服务)
[[proxies]]
name = "web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 6080

4.1.3 启动 Frpc

  • 命令行启动:在 frpc.toml 所在目录打开 CMDPowerShell,执行:

    .\frpc.exe -c .\frpc.toml
    

    在这里插入图片描述

  • 后台运行 (推荐):创建一个批处理文件 start_frpc.bat,内容如下:

    @echo off
    :home
    frpc.exe -c frpc.toml
    goto home
    

    双击运行此批处理文件,窗口会保持打开。如需完全隐藏窗口,可使用 nssm 等工具将其注册为系统服务。

4.2 Linux 客户端

4.2.1 在内网 Linux 机器上下载并解压对应的 FRP 压缩包

4.2.2 配置 frpc.toml

内容与 Windows 客户端完全相同

serverAddr = "your_server_ip"
serverPort = 7000
auth.method = "token"
auth.token = "your_strong_password_here"[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6002

4.2.3 启动 Frpc

4.2.3.1.命令行启动
./frpc -c ./frpc.toml
4.2.3.2.使用 Systemd 创建服务 (推荐)
4.2.3.2.1 创建服务文件

sudo vim /etc/systemd/system/frpc.service

[Unit]
Description=Frp Client Service
After=network.target[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/path/to/your/frpc_directory/frpc -c /path/to/your/frpc_directory/frpc.toml[Install]
WantedBy=multi-user.target
4.2.3.2.2 启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable frpc
sudo systemctl start frpc
4.2.3.2.3 检查状态

sudo systemctl status frpc

5. 核心配置参数详解

5.1 通用参数 (Frps & Frpc)

参数 (TOML)参数 (旧版 INI)说明示例必要性
serverAddrserver_addr服务端公网 IP 地址或域名"x.x.x.x"必选
serverPortserver_port服务端 bindPort7000必选
auth.methodauthentication_method认证方式"token"推荐
auth.tokentoken认证令牌,两端需一致"your_password"推荐

5.2 服务端 (Frps) 特有参数

参数 (TOML)参数 (旧版 INI)说明示例默认值
bindPortbind_port监听客户端连接的端口7000-
webServer.addrdashboard_addr仪表盘监听地址"0.0.0.0""0.0.0.0"
webServer.portdashboard_port仪表盘端口7500-
webServer.userdashboard_user仪表盘用户名"admin"-
webServer.passworddashboard_pwd仪表盘密码"admin"-
enablePrometheus-启用 Prometheus 指标truefalse

5.3 客户端 (Frpc) 代理配置参数 ([[proxies]])

每个 [[proxies]] 段落代表一个穿透规则。

参数 (TOML)参数 (旧版 INI)说明示例必要性
namename代理规则名称,唯一"ssh"必选
typetype代理类型:tcp, udp, http, https, stcp(安全) 等"tcp"必选
localIPlocal_ip本地服务 IP"127.0.0.1"必选
localPortlocal_port本地服务端口22, 3389必选
remotePortremote_port服务端 暴露的端口 (type为 tcp/udp 时)6000type为 tcp/udp 时必选
customDomainscustom_domains自定义域名 (type为 http/https 时)["web.example.com"]type为 http/https 时必选

6. 测试与验证

  1. 检查进程状态:在服务端和客户端分别执行 systemctl status frpssystemctl status frpc,确保状态为 active (running)

  2. 查看日志:使用 journalctl -u frps -fjournalctl -u frpc -f 跟踪日志,无报错即表示连接成功

  3. 访问仪表盘:在浏览器访问 http://your_server_ip:7500,使用配置的用户名密码登录,可以看到客户端的连接和代理状态
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  4. 测试连接:使用外部机器尝试连接你配置的服务。例如:

    • 测试 RDP:用远程桌面连接 your_server_ip:6000
    • 测试 SSHssh -p 6002 user@your_server_ip

7. 常见问题与注意事项 (FAQ)

问题可能原因与解决方案
连接失败 / 超时1. 防火墙/安全组未放行:检查服务端 70007500 及代理使用的 remotePort (如 6000) 是否已开放。
2. Token 认证失败:确保服务端和客户端的 auth.token 完全一致。
3. 服务器 IP 或端口写错:仔细检查 serverAddrserverPort
能连接但服务不可用1. 客户端本地服务未启动:确保内网机器上的目标服务 (如 RDP, Web) 正在运行且可以正常访问。
2. localIPlocalPort 配置错误:确保配置指向了正确的内网服务地址和端口。
端口已被占用更换 frps.toml 中的 bindPortwebServer.port,或者停止占用端口的程序。
权限不足使用 sudo 或以 root 用户运行。如果使用 systemd,检查服务文件中的 User 和文件路径权限。

安全建议:

  • 使用强 Token:不要使用默认或简单的密码。
  • 限制端口访问:在云服务器安全组中,只允许特定 IP 访问管理端口(如 7500)。
  • 使用非默认端口:将 70007500 改为其他不常见的端口。
  • 使用 STCP:对于高风险服务(如 SSH、RDP),考虑使用 type = stcp,它需要另一个已知的 frpc 作为访问者,避免直接暴露端口到公网。
http://www.dtcms.com/a/347468.html

相关文章:

  • 不必使用 == 和 ===,更严格的相等性判断 API 来了
  • DFT计算入门(materials studio)---Ni金属表面,几何优化
  • 求职推荐大数据可视化平台招聘系统 Vue+Flask python爬虫 前后端分离
  • 【KO】前端面试四
  • leetcode26:删除有序数组中的重复项Ⅰ(快慢指针解法)
  • 【知识】Elsevier论文接收后的后续流程
  • 【数据结构】跳表的概率模型详解与其 C 代码实现
  • 如何用Redis作为消息队列
  • PyQt6 进阶篇:构建现代化、功能强大的桌面应用
  • Java 线程同步解析
  • 坑洼铁皮矫平机:把“波浪”变成“镜面”的科学魔法
  • C++手写智能指针
  • 高等数学 9.1多元函数的基本概念
  • 力扣每日一刷Day 15
  • 在github上通过dmca数字版权申诉侵权并删除侵权仓库
  • 图结构使用 Louvain 社区检测算法进行分组
  • P9246 [蓝桥杯 2023 省 B] 砍树
  • 蓝桥杯算法之基础知识(2)——Python赛道
  • ComfyUI Portrait Master肖像大师中文版
  • TopK问题(堆排序)-- go
  • 牛客面经2 京东社招-002
  • 知识蒸馏 Knowledge Distillation 序列的联合概率 分解成 基于历史的条件概率的连乘序列
  • 基于SpringBoot的招聘系统源码
  • 破解秘籍——hashcat使用宝典
  • 商超场景徘徊识别误报率↓79%!陌讯多模态时序融合算法落地优化
  • 书写本体论视域下的文字学理论重构
  • 防范瓦斯爆炸:AI摄像机如何杜绝煤矿井下违规抽烟?
  • 复杂工业场景误报率↓85%!陌讯多模态火焰识别算法实战解析
  • ⸢ 零 ⸥ ⤳ 安全体系构建内容结构
  • 卷积神经网络的基本概念