【计算机网络】12、frp 内网穿透

文章目录
- 一、服务端设置
- 二、客户端设置
frp :A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet。是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
背景:从公网中访问自己的私有设备向来是一件难事儿。
自己的主力台式机、NAS等等设备,它们可能处于路由器后,或者运营商因为IP地址短缺不给你分配公网IP地址。如果我们想直接访问到这些设备(远程桌面,远程文件,SSH等等),一般来说要通过一些转发或者P2P组网软件的帮助。
我有一台计算机位于一个很复杂的局域网中,我想要实现远程桌面和文件访问,目前来看其所处的网络环境很难通过简单的端口映射将其暴露在公网之中,有如下方法:
- TeamViewer、向日葵、ToDesk:需要两端都有此软件,不方便
- 蒲公英VPN软件进行组网,可用,但免费版本网络速度极慢,体验不佳,几乎无法正常使用。
- 花生壳软件进行DDNS解析,可用,但同第二点所述,免费版本有带宽限制,无法实际使用。
- 搭建frp服务器进行内网穿透,可用且推荐,可以达到不错的速度,且理论上可以开放任何想要的端口,可以实现的功能远不止远程桌面或者文件共享。
准备工作:搭建一个完整的frp服务链,我们需要
- VPS一台(也可以是具有公网IP的实体机)
- 访问目标设备(就是你最终要访问的设备)
一、服务端设置
服务端设置如下:
SSH连接到VPS之后运行arch命令查看处理器架构,根据架构下载不同版本的frp
wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_linux_amd64.tar.gz # 根据架构不同,选择相应版本并进行下载(如果是“X86_64“即可选择”amd64”)
tar -zxvf frp_0.22.0_linux_amd64.tar.gz #解压
cp -r frp_0.22.0_linux_amd64 frp # 文件夹改个名,方便使用
cd frp # 把解压出来的文件夹复制到你想要的目录下,为了方便我直接放在用户目录下了,进入该目录
ls -a # 查看一下文件
我们只需要关注如下几个文件:frps、frps.ini、frpc、frpc.ini
前两个文件(s结尾代表server)分别是服务端程序和服务端配置文件,后两个文件(c结尾代表client)分别是客户端程序和客户端配置文件。
rm frpc frpc.ini # 因为我们正在配置服务端,可以删除客户端的两个文件
vim frps.ini # 然后修改frps.ini文件
# 端口均可使用默认值,token、user和password项请自行设置
[common]
bind_port = 7000 # 表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到
dashboard_port = 7500 # 服务端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500 (其中x.x.x.x为VPS的IP)查看frp服务运行信息
token = 12345678 # 客户端和服务端连接的口令,请自行设置并记录,稍后会用到
dashboard_user = admin # 打开仪表板页面登录的用户名和密码,自行设置即可
dashboard_pwd = admin # 同上
vhost_http_port = 10080 # 反向代理HTTP主机时使用,本文不涉及HTTP协议,因而照抄或者删除这两条均可。
vhost_https_port = 10443 # 同上
然后 nohup ./frps -c frps.ini 启动 frps 服务端,如果看到屏幕输出这样一段内容,即表示运行正常
2023/01/01 15:22:39 [I] [service.go:130] frps tcp listen on 0.0.0.0:7000
2023/01/01 15:22:39 [I] [service.go:172] http service listen on 0.0.0.0:10080
2023/01/01 15:22:39 [I] [service.go:193] https service listen on 0.0.0.0:10443
2023/01/01 15:22:39 [I] [service.go:216] Dashboard listen on 0.0.0.0:7500
2023/01/01 15:22:39 [I] [root.go:210] Start frps success
此时访问 x.x.x.x:7500 并使用自己设置的用户名密码登录,即可看到仪表板界面
二、客户端设置
frp的客户端就是我们想要真正进行访问的那台设备,本文用Windows主机做例子,Linux配置方法类似。
同样 wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_windows_amd64.zip 下载包,删除其中的frps和frps.ini文件
vim frpc.ini 如下:[common] # common字段下的三项即为服务端的设置
server_addr = x.x.x.x # 服务端IP地址,填入即可
server_port = 7000 # 服务器端口,填入你设置的端口号即可,如果未改变就是7000
token = won517574356 # 在服务器上设置的连接口令,原样填入即可# rdp、smb字段都是自己定义的规则,自定义端口对应时格式如下:
# “[xxx]”表示一个规则名称,自己定义,便于查询即可。
# “type”表示转发的协议类型,有TCP和UDP等选项可以选择,如有需要请自行查询frp手册。
# “local_port”是本地应用的端口号,按照实际应用工作在本机的端口号填写即可。
# “remote_port”是该条规则在服务端开放的端口号,自己填写并记录即可。
[rdp] # RDP,即Remote Desktop 远程桌面,Windows的RDP默认端口是3389,协议为TCP,建议使用frp远程连接前,在局域网中测试好,能够成功连接后再使用frp穿透连接。
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7001
[smb] # SMB,即Windows文件共享所使用的协议,默认端口号445,协议TCP,本条规则可实现远程文件访问。
type = tcp
local_ip = 127.0.0.1
local_port = 445
remote_port = 7002
实际使用时,会按照端口号进行对应的转发,原理如下图:

配置完成frpc.ini后,就可./frpc -c frpc.ini 启动frpc了,windows 可用 bat 脚本在后台运行,之后直接运行这个 .bat 文件即可启动frpc并隐藏窗口(可在任务管理器中退出)。至于开机启动,把这个 .bat 文件直接扔进Windows的开机启动文件夹即可。bat 脚本如下:
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM
cd C:\frp # 将cd后的路径更改为你的frpc实际存放的目录
frpc -c frpc.ini
exit
正常日志如下:
2023/01/01 16:14:56 [I] [service.go:205] login to server success, get run id [2b65b4e58a5917ac], server udp port [0]
2023/01/01 16:14:56 [I] [proxy_manager.go:136] [2b65b4e58a5917ac] proxy added: [rdp smb]
2023/01/01 16:14:56 [I] [control.go:143] [smb] start proxy success
2023/01/01 16:14:56 [I] [control.go:143] [rdp] start proxy success
强烈建议你在使用frp直接测试内网穿透前,先在局域网内测试好相关功能的正常使用,并配置好可能会影响的Windows防火墙等内容,在内网调试通过后再使用frp进行内网穿透测试。
此时可以在局域网外用相应程序访问 x.x.x.x:xxxx (IP为VPS的IP,端口为自定义的remote_port)即可访问到相应服务
相关文章:
【计算机网络】12、frp 内网穿透
文章目录 一、服务端设置二、客户端设置 frp :A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet。是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且…...
Pytest 重复执行用例插件----pytest-repeat
前言 在自动化过程中,想要重复执行一条脚本,查看他的稳定性,如果是在unittest框架中,可能会使用for一直循环这条用例,但是当我们使用pytest框架后,我们就可以通过某些插件来实现这个功能了。今天介绍的这个…...
【软件工程】5 ATM系统测试
目录 5 ATM系统测试 5.1 单元测试 5.1.1 制定单元测试计划 5.1.2 设计单元测试用例 编辑 5.1.3 执行单元测试 5.1.4 单元测试报告 5.2 集成测试 5.2.1 制定集成测试计划 5.2.2 设计集成测试用例 5.2.3 执行集成测试 5.2.4 集成测试总结 5.3 系统测试 5.3.1 制定…...
opencv读取MP4文件和摄像头数据
文章目录 前言一、waitKey函数二、VideoCapture类总结前言 本篇文章来讲解opencv读取MP4文件和摄像头数据,opencv主要用于处理图像数据那么本篇文章就来讲解opencv读取MP4文件和摄像头数据。 一、waitKey函数 waitKey()函数是OpenCV中常用的一个函数,它用于等待用户按键输…...
Qt实现自定义QDoubleSpinBox软键盘
在Qt应用程序开发中,经常会遇到需要自定义输入控件的需求。其中,对于QDoubleSpinBox控件,如果希望在点击时弹出一个自定义的软键盘,以便用户输入数值,并将输入的值设置给QDoubleSpinBox,该如何实现呢&#…...
小研究 - 微服务系统服务依赖发现技术综述(一)
微服务架构得到了广泛的部署与应用, 提升了软件系统开发的效率, 降低了系统更新与维护的成本, 提高了系统的可扩展性. 但微服务变更频繁、异构融合等特点使得微服务故障频发、其故障传播快且影响大, 同时微服务间复杂的调用依赖关系或逻辑依赖关系又使得其故障难以被及时、准确…...
2023-08-07力扣今日八题
链接: 剑指 Offer 50. 第一个只出现一次的字符 题意: 如题 解: map存下标,由于存在下标0,所以用find,或者记录下标1也可以 实际代码: #include<bits/stdc.h> using namespace std;…...
Segment Anything【论文翻译】
文章目录 论文基础信息如下Abstract1. Introduction2. Segment Anything Task3. Segment Anything Model4. Segment Anything Data Engine5. Segment Anything Dataset6. Segment Anything RAI Analysis7. Zero-Shot Transfer Experiments7.1. Zero-Shot Single Point Valid Ma…...
银河麒麟QT连接DM8数据库
1. 安装达梦8 官网下载, 按照官方文档进行安装即可. 2. 安装unixodbc 1> 下载odbc安装包 unixODBC-2.3.7pre.tar.gz 2> 解压 tar -xvf unixODBC-2.3.7pre.tar.gz3> 编译 ./configure -prefix /usr/local make && make install4> 查找配置 odbcinst -j5…...
并发编程1:线程安全性概述
目录 1、什么是线程安全性? 2、操作的原子性:避免竞态条件 3、锁机制:内置锁和可重入 4、如何用锁来保护状态? 5、同步机制中的活跃性与性能问题 编写线程安全的代码,其核心在于对状态访问操作进行管理࿰…...
(论文复现)DeepAnt模型复现及应用
DeepAnt论文如下,其主要是用于时间序列的无监督粗差探测。 其提出的模型架构如下: 该文提出了一个无监督的时间序列粗差探测模型,其主要有预测模块和探测模块组成,其中预测模块的网络结构如下。 预测结构是将时间序列数据组…...
【机器学习】在 MLOps构建项目 ( MLOps2)
My MLOps tutorials: Tutorial 1: A Beginner-Friendly Introduction to MLOps教程 2:使用 MLOps 构建机器学习项目 一、说明 如果你希望将机器学习项目提升到一个新的水平,MLOps 是该过程的重要组成部分。在本文中,我们将以经典手写数字分类…...
【MySQL】聚合函数与分组查询
文章目录 一、聚合函数1.1 count 返回查询到的数据的数量1.2 sum 返回查询到的数据的总和1.3 avg 返回查询到的数据的平均值1.4 max 返回查询到的数据的最大值1.5 min 返回查询到的数据的最小值 二、分组查询group by2.1 导入雇员信息表2.2 找到最高薪资和员工平均薪资2.3 显示…...
conda 环境 numpy 安装报错需要 Microsoft Visual C++ 14.0
到公司装深度学校环境。项目较旧,安装依赖,一堆报错(基于 conda 环境): numpy 安装报需要 C 14.0 No module named numpy.distutils._msvccompiler in numpy.distutils; trying from distutilserror: Microsoft Visu…...
算法工程师-机器学习面试题总结(5)
什么是信息熵? 信息熵是信息理论中用来衡量一个随机变量的不确定度或者信息量的概念。它是在给定一组可能的事件中,对每个事件发生的概率进行加权平均得到的值。 在信息熵的计算中,概率越大的事件所带来的信息量越小,概率越小的事…...
论文阅读 RRNet: A Hybrid Detector for Object Detection in Drone-captured Images
文章目录 RRNet: A Hybrid Detector for Object Detection in Drone-captured ImagesAbstract1. Introduction2. Related work3. AdaResampling4. Re-Regression Net4.1. Coarse detector4.2. Re-Regression 5. Experiments5.1. Data augmentation5.2. Network details5.3. Tra…...
js执行机制
JavaScript 的执行机制是基于单线程的事件循环模型。这意味着 JavaScript 代码会按照顺序一行一行地执行,同时只能执行一个任务。让我们更详细地了解 JavaScript 的执行机制: 调用栈(Call Stack): JavaScript 使用调用…...
关于策略模式的注入问题
上面抄别人的 当在实现策略方法时,报null,排查后发现是接口实现有多个,需要添加别名 注入时添加Qeualifier,指定名称,如下图;如图上修改, 测试类中不用new具体行为策略了,注入别名即…...
通用Mapper的四个常见注解
四个常见注解 1、Table 作用:建立实体类和数据库表之间的对应关系。 默认规则:实体类类名首字母小写作为表名,如 Employee -> employee 表 用法:在 Table 注解的 name 属性中指定目标数据库的表名; 案例&#…...
二进制安装K8S(单Master集群架构)
目录 一:操作系统初始化配置 1、项目拓扑图 2、服务器 3、初始化操作 二: 部署 etcd 集群 1、etcd 介绍 2、准备签发证书环境 3、master01 节点上操作 (1)生成Etcd证书 (2)创建用于存放 etcd 配置文…...
成本控制实战:OpenClaw+Qwen3.5-9B的Token消耗优化指南
成本控制实战:OpenClawQwen3.5-9B的Token消耗优化指南 1. 为什么需要关注Token消耗? 第一次用OpenClaw执行整夜自动化任务时,早上看到账单差点从椅子上跳起来——单次任务消耗了接近18万Token。这让我意识到,如果不加控制&#…...
Transformer 原理与实现(二):从代码看透 Transformer
在上一篇文章 [Transformer 原理与实现(一):从 Attention 到编码解码机制](https://blog.csdn.net/Cha0DD/article/details/159753362) 中,我们从概念层面深入理解了 Transformer 的核心机制。 今天,我们将通过实际的…...
森利威尔SL3073替代RT2862 4-65V超宽压3A降压芯片
在电源管理领域,寻找高效、可靠且功能丰富的DC-DC转换器是设计工程师们不懈追求的目标。当面临将36V电压转换为更低电压并保持3A持续输出电流的应用场景时,传统上可能会选择如RT2862这样的同步降压转换器。然而,随着技术的不断进步࿰…...
空间多组学解决方案发展提速:未来六年CAGR锁定15.3%,行业增长预期持续向好
在生命科学领域,精准医学和个性化治疗的需求日益增长,对生物组织和细胞在空间维度上的深入理解成为关键。空间多组学解决方案作为这一需求的核心支撑技术,正受到全球科研和产业界的广泛关注。据恒州诚思调研统计,2025年全球空间多…...
2026最权威的AI科研神器解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在当下的学术环境当中,把论文AI网站进行高效利用,已然成为了研究者去…...
Ostrakon-VL-8B环境配置:Ubuntu 22.04 + CUDA 12.1 + PyTorch 2.3 验证清单
Ostrakon-VL-8B环境配置:Ubuntu 22.04 CUDA 12.1 PyTorch 2.3 验证清单 想快速在Ubuntu系统上跑通Ostrakon-VL-8B这个强大的视觉理解模型,但被各种环境依赖搞得头大?别担心,这份清单就是为你准备的。 Ostrakon-VL-8B是一个专门…...
VisualCppRedist AIO:一个文件解决Windows运行库的十年难题
VisualCppRedist AIO:一个文件解决Windows运行库的十年难题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾在打开心爱的游戏或专业软件时&a…...
如何设计高效的Emscripten与WebAssembly接口:平衡简洁与完整的终极指南
如何设计高效的Emscripten与WebAssembly接口:平衡简洁与完整的终极指南 【免费下载链接】emscripten Emscripten: An LLVM-to-WebAssembly Compiler 项目地址: https://gitcode.com/gh_mirrors/em/emscripten Emscripten作为一款强大的LLVM-to-WebAssembly编…...
Whistle Mock实战:精准模拟流式JSON接口的响应头与数据体
1. 为什么我们需要精准模拟流式JSON接口 在前后端分离的开发模式下,前端工程师经常需要模拟后端接口进行开发调试。特别是遇到流式JSON数据这种特殊场景时,简单的数据Mock往往无法满足需求。我遇到过不少这样的情况:明明数据内容完全正确&…...
深度解析 Claude Code v2.1.88 源码:技术栈与底层实现全揭秘(基于流出架构资料)
深度解析 Claude Code v2.1.88 源码:技术栈与底层实现全揭秘(基于流出架构资料) 摘要:2026年3月31日,Claude Code v2.1.88 相关技术资料(含TypeScript工程架构、核心模块实现逻辑,合计51.2万行代码量级)公开流出,包含其核心架构、工具系统、安全机制等全部实现细节。…...
