使用frp实现内网穿透
1、介绍
当我们想把内网的一些资源暴露在公网上时,可以使用内网穿透功能。比如公司的内网服务器,部署了平时需要开发的项目,但是回到家中无法访问,就可以使用内网穿透,将公司内网的接口映射到一台公网的服务器上,用这台公网服务器做转发即可实现在家中也能外网访问。这样的就不需要我们在公网上部署一套一模一样的服务了,费时费力,而且还要同步数据。
2、准备工作
想要实现内网穿透功能首先我们需要准备:
- 一台公网服务器(用作frp的服务端)
- 一台需要做转发的内网服务器(用作frp的客户端)
3、frp服务端安装及配置
3.1 下载frp服务端
注意frp服务端是安装在公网服务器上的!!!
服务端下载地址:https://github.com/fatedier/frp/releases

可以看到有很多版本,我的外网服务器是Linux的,可以输入命令查看服务器架构版本:
arch

x86_64 直接下载 frp_0.51.2_linux_amd64.tar.gz 后缀为 amd64 这个版本即可。可以手动下载到本地,然后通过scp命令传到服务器,也可以直接在外网服务器上下载。
通过scp传送到外网服务器命令(如果开放了账号密码登录):
scp -P ssh开放的端口(如果为22,可以不用带此参数) 下载的frp_0.51.2_linux_amd64.tar.gz的位置 登录的账号@外网服务器ip:你要拷贝到的外网服务器的位置
如:
scp -P 22 C:\Users\dxc\Downloads\frp_0.51.2_linux_amd64.tar.gz root@xxx.xxx.xxx.xxx:/home/frp
按下回车,再输入密码即可(注意大小写)。
通过scp传送到外网服务器命令(只开放了通过证书登录的方式):
scp -i 你证书的位置 -P ssh开放的端口(如果为22,可以不用带此参数) -r 下载的frp_0.51.2_linux_amd64.tar.gz的位置 登录的账号@外网服务器ip:你要拷贝到的外网服务器的位置
如:
scp -i C:\Documents\server-pro\ecmarkets-universal.pem -P 22 C:\Users\dxc\Downloads\frp_0.51.2_linux_amd64.tar.gz root@81.xxx.xxx.xxx:/home/frp
直接在外网服务器上下载命令:
wget https://github.com/fatedier/frp/releases/download/v0.51.2/frp_0.51.2_linux_amd64.tar.gz
下载完成后解压,输入命令:
tar -zxvf frp_0.42.0_linux_amd64.tar.gz
解压完成后cd进入目录:
cd frp_0.42.0_linux_amd64
查看当前目录下的文件:
ll
我们能看到有如下这些文件:

其中作为服务端,我们只需要关注 frps 和 frps.ini 文件。
3.2 frps配置
其中 frps.ini 文件就是我们服务端的配置文件,我们需要根据自己情况稍作修改。输入命令:
vim frps.ini
默认配置如图:

我们可以根据自己的场景稍作修改:
[common]
bind_port = 7001
dashboard_port = 7501
dashboard_user = root
dashboard_pwd = 123456
token = qwer1234
其中:
- bind_port:客户端和服务端连接的端口,在配置客户端的时候要用到。
- dashboard_port:服务端可视化界面的端口,若使用7501端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7501。
- dashboard_user:打开服务端可视化界面的用户名,可自行设置。
- dashboard_pwd:打开服务端可视化界面的密码,可自行设置。
- token:用于客户端和服务端连接的口令,可以自行设置,不用和我保持一样,但需要记住,配置客户端的时候会用到。
注意:配置项并未介绍完,详情请参见官方文档。

3.3 frps启动
输入启动命令,启动frp服务端:
./frps -c frps.ini
如果看到控制台输出如图,代表启动成功:

此时,我们打开浏览器输入:
xxx.xxx.xxx(你的外网服务器ip):你配置的dashboard_port端口
即可看到如下弹框(如果你的打不开,请确认防火墙关闭,或者在你的云服务器上开放端口号):
查看防火墙状态:
systemctl status firewalld
关闭防火墙:
systemctl stop firewalld

输入配置的账号密码,点击登录,进入仪表盘:

此时frp的服务端我们就配置完毕了,接下来开始配置客户端。
4、frp客户端配置及启动
4.1 下载frp客户端及配置
此处我用的是本地电脑作为客户端,本地电脑为win10,64位操作系统,其他操作系统流程几乎一致。客户端下载地址和服务端一样,均为:https://github.com/fatedier/frp/releases
此处我下载 frp_0.51.2_windows_amd64.zip 这个版本。

解压文件,进入frp_0.51.2_windows_amd64目录,我们需要关心的文件为 frpc.exe 和 frpc.ini,用编辑器打开 frpc.ini 文件:


这是默认的客户端的配置,接下来我们需要修改一下:
[common]
server_addr = xxx.xxx.xxx
server_port = 7001
token = qwer1234[rbac_study]
type = tcp
local_ip=127.0.0.1
local_port = 3781
remote_port=6001
其中:
- server_addr:你外网服务器的ip。
- server_port:外网服务器配置的bind_port。
- token:外网服务器配置的token。
- [xxx]:表示一个规则的名称,可以自己定义,此处我定义为我项目的名称。
- type:表示转发的协议类型,有tcp、udp等选项可以选择。此处我选择tcp。
- local_ip:本地的ip。
- local_port:本地服务的端口号。
- remote_port:服务端开放的端口号,可以自己配置。到时候我们通过访问外网服务器(frps)的ip + 该端口号就能转发到本地服务器(frpc)的服务 local_ip + local_port 配置的端口上。

配置好后点击保存。
4.2 frpc启动
打开win10的 Windows PowerShell 工具(win10自带,不用下载,在左下角的搜索框中搜索打开即可)。切到我们frp客户端的配置文件 frpc.ini 所在目录:
cd E:\CommonSoftware\frp_0.51.2_windows_amd64
输入启动命令,启动frp客户端(请不要直接双击frpc.exe文件打开!!!):
./frpc -c frpc.ini
看到控制台输出如图,代表启动成功:

5、测试
到此处,frps和frpc的所有配置和启动事项都完成了,接下来我们可以通过访问我们的外网服务器(frps)ip + 我们在本地服务器(frpc)中配置的 remote_port 端口,就能直接转发到我们的本地服务上了。
我用本地的Java项目测试:

我本地启动了一个端口为 3781 的 rbac_study 服务,接下来我访问外网服务器的ip + 本地服务器(frpc)中配置的 remote_port 端口,能看到穿透成功。如图:

相关文章:
使用frp实现内网穿透
1、介绍 当我们想把内网的一些资源暴露在公网上时,可以使用内网穿透功能。比如公司的内网服务器,部署了平时需要开发的项目,但是回到家中无法访问,就可以使用内网穿透,将公司内网的接口映射到一台公网的服务器上&a…...
安装 opendr 踩坑记
复现早期的优化算法需要用到opendr,踩坑一天记录!!! 测试是否成功安装的命令 >>> import opendr >>> opendr.demo("texture")失败案例 python 3.8.15 numpy1.23.0 mayavi4.8.1 chumpy0.70 cpython…...
各地区-各行业法人单位、区划数63个指标(2010-2022年)
一、数据介绍 数据名称:各地区-各行业法人单位、区划数63个指标 数据年份:2010-2022年(法人单位至2021年) 数据样本:404条 数据来源:自我整理 二、指标说明 行政区划代码 地区 长江经济带 经度 纬…...
W5500-EVB-PICO作为TCP Client 进行数据回环测试(五)
前言 上一章我们用W5500-EVB-PICO开发板通过DNS解析www.baidu.com(百度域名)成功得到其IP地址,那么本章我们将用我们的开发板作为客户端去连接服务器,并做数据回环测试:收到服务器发送的数据,并回传给服务器…...
web前端面试--递归(斐波那契数列)
web面试题 本人是一个web前端开发工程师,主要是vue框架,整理了一些面试题,今后也会一直更新,有好题目的同学欢迎评论区分享 ;-) web面试题专栏:点击此处 文章目录 web面试题定义源码测试示例 之前去笔试&…...
Vue3 Props组件简单应用(父组件获取子组件数据)
去官网学习→Props | Vue.js 运行示例: 代码:App.vue <template><img alt"Vue logo" src"./assets/logo.png"><h2>Vue Props数据传递</h2><h4>子组件中的数据:{{ content }}</h4>…...
Mybatis查询
返回实体类,必须指定返回类型, resultType不能省略,并且数据库字段名与实体类不一致会填充NULL,实体类我们一般都是驼峰,数据库字段一般都是下划线,所以在查询的时候可以起别名解决,属性填充本质上调用的是…...
如何让ES低成本、高性能?滴滴落地ZSTD压缩算法的实践分享
前文分别介绍了滴滴自研的ES强一致性多活是如何实现的、以及如何提升ES的性能潜力。由于滴滴ES日志场景每天写入量在5PB-10PB量级,写入压力和业务成本压力大,为了提升ES的写入性能,我们让ES支持ZSTD压缩算法,本篇文章详细展开滴滴…...
[数据集][目标检测]PCB板缺陷目标检测数据集VOC格式693张6类别
数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):693 标注数量(xml文件个数):693 标注类别数:6 标注类别名称:["missing_hole",…...
Linux 安装中文输入法
在linux安装ibus输入法 在linux安装ibus输入法 加入开机自启动 运行以下命令以编辑IBus配置文件:如果没有该文件,则可以创建一个新文件。 nano ~/.xprofile将以下内容添加到文件中:这些命令将设置相应的环境变量并启动IBus守护进程。 ex…...
redisson
redisson 使用 1,导入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.12.5</version> </dependency>2,创建配置类 package com.woniu.config;impor…...
源码分析——HashMap(JDK1.8)源码+底层数据结构分析
文章目录 HashMap 简介底层数据结构分析JDK1.8之前JDK1.8之后 HashMap源码分析构造方法put方法get方法resize方法 HashMap常用方法测试 HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。 JDK1.8 之前 HashM…...
企业举办活动邀请媒体的意义和重要性
传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 企业举办活动并邀请媒体的意义和重要性是多方面的,主要有以下一些: 1. 品牌曝光与宣传:邀请媒体参与企业活动可以提高企业的品牌曝光度。媒体报道能够…...
从零开始学python(十六)爬虫集群部署
前言 今天讲述Python框架源码专题最后一个部分,爬虫集群部署,前面更新了十五个从零开始学python的系列文章,分别是: 1.编程语法必修篇 2.网络编程篇 3.多线程/多进程/协程篇 4.MySQL数据库篇 5.Redis数据库篇 6.MongoDB数据库篇 …...
flutter
1.dart语言基础 数据类型 //fluttenum a 10;double b 10.0;int x 10;num c 10.0;//字符串拼接方式。和kotlin的是一样的。 也可以和java中一样做拼接。String testString "aaaaaaaaaaaaaaaaaaaaaaaaaaaa";String bbbbb "aaaaaaaaaaaaaaccccc";S…...
iOS 开发-编译第三方库 openssl及curl
1、前提 iOS编译库需要三个架构,arm64,arm64e,x86_64,其中x86_64为模拟器所需 iOS编译库需要下载xcode及对应的command line tool(执行命令时可以自动下载),下载失败需要去官网搜索下载 2、openssl 参考iOS如何编译OpenSSL静态…...
运维监控学习笔记1
1、监控对象: 1、监控对象的理解;CPU是怎么工作的; 2、监控对象的指标:CPU使用率;上下文切换; 3、确定性能基准线:CPU负载多少才算高; 2、监控范围: 1、硬件监控&#x…...
由于找不到vcruntime140.dll,无法继续执行代码,三种修复方法
为什么我们很多人都遇到过打开电脑软件时候突然电脑就提示找不到vcruntime140.dll,或许vcruntime140.dll丢失,那么vcruntime140.dll到底是什么?为什么会丢失,丢失了要怎么解决修复呢?下面小编都会一一介绍给大家&#…...
【FPGA零基础学习之旅#10】按键消抖模块设计与验证(一段式状态机实现)
🎉欢迎来到FPGA专栏~按键消抖模块设计与验证 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大…...
【EI复现】基于阶梯碳交易的含P2G-CCS耦合和燃气掺氢的虚拟电厂优化调度(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
