使用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…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
Python学习(8) ----- Python的类与对象
Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...

数据分析六部曲?
引言 上一章我们说到了数据分析六部曲,何谓六部曲呢? 其实啊,数据分析没那么难,只要掌握了下面这六个步骤,也就是数据分析六部曲,就算你是个啥都不懂的小白,也能慢慢上手做数据分析啦。 第一…...
【java】【服务器】线程上下文丢失 是指什么
目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失? 直观示例说明 为什么上下文如此重要? 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程,代码应该如何实现 推荐方案:使用 ManagedE…...