内网穿透 FRP 配置指南

关键词:内网穿透、FRP配置、frps、frpc、远程访问、自建服务器、反向代理、TCP转发、HTTP转发

在开发或部署项目时,我们经常遇到内网设备无法被公网访问的问题,例如你想从外网访问你家里的 NAS、远程调试开发板,或是访问本地测试环境。这时候,一个轻量、易用、高效的开源工具 —— FRP (Fast Reverse Proxy) 就派上用场了。

本文将手把手教你如何使用 FRP 实现内网穿透,支持 **TCP / HTTP ** 协议的穿透。


一、FRP 是什么?

FRP(Fast Reverse Proxy) 是一个高性能的反向代理应用,专为内网穿透而设计。你可以通过它将内网服务映射到公网服务器,实现从外网访问内网服务的需求。

FRP 包含两个核心组件:

  • frps:部署在公网服务器上,作为服务端。
  • frpc:部署在内网主机上,作为客户端。

在这里插入图片描述

二、FRP 应用场景

  • 从公网访问位于 NAT/防火墙后的内网服务
  • 家庭网络中远程访问内网电脑或 NAS
  • IoT 设备远程调试
  • 本地开发环境暴露给互联网使用
  • 内网网站、API接口暴露给第三方服务

三、准备工作

1. 准备一台 公网服务器

  • 操作系统:Linux(例如 Ubuntu 20.04)
  • 能开放指定端口(例如 7000、80、443)
  • 安装 SSH,方便远程管理

2. 一台内网主机

  • 比如你家里的电脑、树莓派、或公司内网中的服务器

3. 下载 FRP 工具

访问:https://github.com/fatedier/frp/releases

选择对应系统版本进行下载,例如:

# 以 Linux 64 位为例
wget https://github.com/fatedier/frp/releases/download/v0.63.0/frp_0.63.0_linux_amd64.tar.gz
tar -zxvf frp_0.63.0_linux_amd64.tar.gz

四、服务端配置(公网服务器)

进入 frp_0.63.0_linux_amd64 目录:

编辑 frps.toml

bindPort = 15700
vhostHTTPPort = 14144

启动 frps:

# 后台启动frp服务端应用
nohpu ./frps -c frps.toml &#利用tail 命令查看启动日志
tail -f nohup.out

出现如下内容则表示启动成功:

[1;34m2025-07-23 18:50:38.146 [I] [frps/root.go:105] frps uses config file: frps.toml
[0m[1;34m2025-07-23 18:50:38.307 [I] [server/service.go:237] frps tcp listen on 0.0.0.0:15701
[0m[1;34m2025-07-23 18:50:38.308 [I] [server/service.go:305] http service listen on 0.0.0.0:14144
[0m[1;34m2025-07-23 18:50:38.308 [I] [frps/root.go:114] frps started successfully

✅ 建议将其配置为 Systemd 服务,实现开机自启。


五、客户端配置(内网主机)

在内网主机中进入对应解压后的 frp 目录。

编辑 `frpc.toml:

1. 穿透 HTTP 服务(比如本地 8080)
serverAddr = "公网IP"
serverPort = 15700[[proxies]]
name = "web01"
type = "http"
localIP = "127.0.0.1"
localPort = 8080
customDomains = ["指定到公网的域名"]

启动成功后,可以通过 http://公网IP:14144 内网http服务!

2. 穿透 SSH 服务(远程 SSH 到内网设备)
serverAddr = "公网地址"
serverPort = 15700[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort =16000

启动 frpc:

./frpc -c frpc.toml

启动成功后,ssh 公网IP -p 16000 来访问内网ssh服务!


六、设置自启动(Systemd 配置)

1. 服务器

创建 /etc/systemd/system/frps.service

[Unit]
Description=FRP Server
After=network.target[Service]
ExecStart=/opt/frp/frps -c /opt/frp/frps.toml
Restart=on-failure[Install]
WantedBy=multi-user.target

2.客户端

创建 /etc/systemd/system/frpc.service

[Unit]
Description=FRP Client
After=network.target[Service]
ExecStart=/opt/frp/frpc -c /opt/frp/frpc.toml
Restart=on-failure[Install]
WantedBy=multi-user.target

执行:

sudo systemctl daemon-reexec
sudo systemctl enable frps
sudo systemctl start frps

客户端同理。


七、常见问题排查

问题可能原因解决办法
frpc 连接不上 frps防火墙或端口未开放检查安全组、防火墙设置
HTTP 映射失败域名未解析或未配置 vhost_http_port检查 DNS 和配置
SSH 登录失败remote_port 已被占用修改 remote_port
frps/frpc 启动失败配置文件格式错误仔细检查 toml 文件格式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91913.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 信用卡检测、OpenAI gym、OCR结合、DICOM图形处理、知识图谱、农业害虫识别实战

信用卡欺诈检测通常使用公开数据集 数据准备与预处理 信用卡欺诈检测通常使用公开数据集如Kaggle的信用卡交易数据集。数据预处理包括处理缺失值、标准化数值特征、处理类别特征。在Spring Boot中,可以使用pandas或sklearn进行数据预处理。 // 示例:使用Spring Boot读取CS…

使用 Docker 部署 Golang 程序

Docker 是部署 Golang 应用程序的绝佳方式,它可以确保环境一致性并简化部署流程。以下是完整的指南: 1. 准备 Golang 应用程序 首先确保你的 Go 应用程序可以正常构建和运行。一个简单的示例 main.go: package mainimport ("fmt""net/http" )func ha…

从零开始的CAD|CAE开发: LBM源码实现分享

起因:上期我们写了流体仿真的经典案例: 通过LBM,模拟计算涡流的形成,当时承诺: 只要验证通过,就把代码开源出来;ok.验证通过了,那么我也就将代码全都贴出来代码开源并贴出:public class LidDrivenCavityFlow : IDisposable{public LidDrivenCavityFlow(int width 200, int hei…

仓库管理系统-17-前端之物品类型管理

文章目录 1 表设计(goodstype) 2 后端代码 2.1 Goodstype.java 2.2 GoodstypeMapper.java 2.3 GoodstypeService.java 2.4 GoodstypeServiceImpl.java 2.5 GoodstypeController.java 3 前端代码 3.1 goodstype/GoodstypeManage.vue 3.2 添加菜单 3.3 页面显示 1、goodstype表设…

共识算法深度解析:PoS/DPoS/PBFT对比与Python实现

目录 共识算法深度解析:PoS/DPoS/PBFT对比与Python实现 1. 引言:区块链共识的核心挑战 2. 共识算法基础 2.1 核心设计维度 2.2 关键评估指标 3. PoS(权益证明)原理与实现 3.1 核心机制 3.2 Python实现 4. DPoS(委托权益证明)原理与实现 4.1 核心机制 4.2 Python实现 5. P…

3.JVM,JRE和JDK的关系是什么

3.JVM,JRE和JDK的关系是什么 1.JDK(Java Development Kit),是功能齐全的Java SDK,包含JRE和一些开发工具(比如java.exe,运行工具javac.exe编译工具,生成.class文件,javaw.exe,大多用…

深度学习技术发展思考笔记 || 一项新技术的出现,往往是为了解决先前范式中所暴露出的特定局限

深度学习领域的技术演进,遵循着一个以问题为导向的迭代规律。一项新技术的出现,往往是为了解决先前范式中所暴露出的特定局限。若将这些新技术看作是针对某个问题的“解决方案”,便能勾勒出一条清晰的技术发展脉络。 例如,传统的前…

Promise的reject处理: then的第二个回调 与 catch回调 笔记250804

Promise的reject处理: then的第二个回调 与 catch回调 笔记250804 Promise 错误处理深度解析:then 的第二个回调 vs catch 在 JavaScript 的 Promise 链式调用中,错误处理有两种主要方式:.then() 的第二个回调函数和 .catch() 方法。这两种方…

Maven模块化开发与设计笔记

1. 模块化开发模块化开发是将大型应用程序拆分成多个小模块的过程,每个模块负责不同的功能。这有助于降低系统复杂性,提高代码的可维护性和可扩展性。2. 聚合模块聚合模块(父模块)用于组织和管理多个子模块。它定义了项目的全局配…

sqli-labs:Less-21关卡详细解析

1. 思路🚀 本关的SQL语句为: $sql"SELECT * FROM users WHERE username($cookee) LIMIT 0,1";注入类型:字符串型(单引号、括号包裹)、GET操作提示:参数需以)闭合关键参数:cookee p…

大模型+垂直场景:技术纵深、场景适配与合规治理全景图

大模型垂直场景:技术纵深、场景适配与合规治理全景图​​核心结论​:2025年大模型落地已进入“深水区”,技术价值需通过 ​领域纵深(Domain-Deep)​、数据闭环(Data-Driven)​、部署友好&#x…

Kotlin Daemon 简介

Kotlin Daemon 是 Kotlin 编译器的一个后台进程,旨在提高编译性能。它通过保持编译环境的状态来减少每次编译所需的启动时间,从而加快增量编译的速度。 Kotlin Daemon 的主要功能增量编译: 只编译自上次编译以来发生更改的文件,节…

鸿蒙南向开发 编写一个简单子系统

文章目录 前言给设备,编写一个简单子系统总结 一、前言 对于应用层的开发,搞了十几年,其实已经有点开发腻的感觉了,翻来覆去,就是调用api,页面实现,最多就再加个性能优化,但对底层…

超详细:2026年博士申请时间线

博士申请是一场持久战,需要提前规划。那么,如何科学安排2026年博士申请时间线?SCI论文发表的最佳时间节点是什么?今天给所有打算申博的同学们,详细解析下,每个时间节点的重点内容。2025年4月:是…

Python爬虫实战:研究tproxy代理工具,构建电商数据采集系统

1. 引言 1.1 研究背景 在大数据与人工智能技术快速发展的背景下,网络数据已成为企业决策、学术研究、舆情监控的核心资源。据 Statista 统计,2024 年全球互联网数据总量突破 180ZB,其中 80% 为非结构化数据,需通过爬虫技术提取与转化。Python 凭借其简洁语法与丰富的爬虫…

HighgoDB查询慢SQL和阻塞SQL

文章目录环境文档用途详细信息环境 系统平台:N/A 版本:6.0,5.6.5,5.6.4,5.6.3,5.6.1,4.5.2,4.5,4.3.4.9,4.3.4.8,4.3.4.7,4.3.4.6,4.3.4.5,4.3.4.4,4.3.4.3,4.3.4.2,4.3.4,4.7.8,4.7.7,4.7.6,4.7.5,4.3.2 文档用途 本文介绍了如何对数据库日志进行分析…

day15 SPI

1串行外设接口概述1.1基本概念SPI(串行外设接口)是一种高速、全双工、同步的串行通信协议。串行外设接口一般是需要4根线来进行通信(NSS、MISO、MOSI、SCK),但是如果打算实现单向通信(最少3根线&#xff09…

阿里云微服务引擎 MSE 及 API 网关 2025 年 7 月产品动态

点击此处,了解微服务引擎 MSE 产品详情。

RFID技术在汽车倍速链中的应用:驱动智能制造的隐形引擎

RFID技术在汽车倍速链中的应用:驱动智能制造的隐形引擎某汽车汽车倍速链现场存在问题:(1)条形码需人工扫描,数据采集延迟率高达15%,导致生产调度与实际工况脱节;(2)涂装车…

ES集群调优策略

Index(写)调优 副本数置0 如果是集群首次灌入数据,可以将副本数设置为0,写入完毕再调整回去,这样副本分片只需要拷贝,节省了索引过 程。 PUT /my_temp_index/_settings { "number_of_replicas": 0 } 自动生成doc ID  通过Elast…