基于frp工具实现内网穿透,跨局域网远程SSH登录

文章目录

  • 一.概述
    • 1.1 为什么要内网穿透?
    • 1.2 什么是frp?
  • 二.frp安装管理流程
    • 2.1 frp下载
    • 2.2 部署
    • 2.3 通过systemd系统服务管理启动程序
  • 三.frp配置测试(通过SSH访问内网机器C)
    • 3.1 服务端配置文件frps.toml修改
    • 3.2 客户端配置文件frpc.toml修改
    • 3.3 启动 frps 和 frpc
  • 四 .一切就绪,执行测试
  • 五 .补充:测试网络端口工具
  • 六.参考链接

一.概述

1.1 为什么要内网穿透?

在这里插入图片描述

  如上图,假设我们想要通过主机A访问主机C(通过SSH登录),但是主机A和主机C在不同的局域网中,绑定的都是私有ip地址,所以它们之间是无法直接进行通信的。要想使得A和C能够进行通信,就需要用到内网穿透的技术。使得局域网内的设备C能够被“穿透”到公网中,被其他设备所访问,这就要用到内网穿透技术。
  内网穿透是一种网络技术,通常用于将位于局域网内部的服务、设备、或者应用程序暴露到公共网络(互联网)中,使得外部网络可以访问局域网内的资源。比如上图中,我们把公网中的服务器B作为代理桥梁沟通A和C,由于B是公网ip,因此A和C都可以主动访问到B,那么我们就可以在B和C之间建立通信信道,在A需要访问C时,将访问请求发给B,由B作为代理转发给C,这样就实现了A与C之间的通信,也就实现了C的内网穿透。
  现在有多种工具可以提供内网穿透服务,如ngrok,花生壳,frp等,本文将介绍通过frp实现内网穿透,简单免费、配置方便。

1.2 什么是frp?

  frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。

  通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,并享受以下专业特性

  • 多种协议支持:客户端服务端通信支持 TCP、QUIC、KCP 和 Websocket 等多种协议。
  • TCP 连接流式复用:在单个连接上承载多个请求,减少连接建立时间,降低请求延迟。
  • 代理组间的负载均衡。
  • 端口复用:多个服务可以通过同一个服务端端口暴露。
  • P2P 通信:流量不必经过服务器中转,充分利用带宽资源。
  • 客户端插件:提供多个原生支持的客户端插件,如静态文件查看、HTTPS/HTTP 协议转换、HTTP、SOCKS5 代理等,以便满足各种需求。
  • 服务端插件系统:高度可扩展的服务端插件系统,便于根据自身需求进行功能扩展。
  • 用户友好的 UI 页面:提供服务端和客户端的用户界面,使配置和监控变得更加方便。

代理类型: frp 支持多种代理类型,以适应不同的使用场景。以下是一些常见的代理类型:

  • TCP:提供纯粹的 TCP 端口映射,使服务端能够根据不同的端口将请求路由到不同的内网服务。
  • UDP:提供纯粹的 UDP 端口映射,与 TCP 代理类似,但用于 UDP 流量。
  • HTTP:专为 HTTP 应用设计,支持修改 Host Header 和增加鉴权等额外功能。
  • HTTPS:类似于 HTTP 代理,但专门用于处理 HTTPS 流量。
  • STCP:提供安全的 TCP 内网代理,要求在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
  • SUDP:提供安全的 UDP 内网代理,与 STCP 类似,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
  • XTCP:点对点内网穿透代理,与 STCP 类似,但流量不需要经过服务器中转。
  • TCPMUX:支持服务端 TCP 端口的多路复用,允许通过同一端口访问不同的内网服务。
    每种代理类型适用于不同的使用情境,您可以根据需求选择合适的代理类型来配置 frp。

二.frp安装管理流程

2.1 frp下载

  frp 采用 Go 语言编写,支持跨平台,只需下载适用于您平台的二进制文件即可执行,无需额外依赖。您可以从 GitHub 的 Release 页面中下载最新版本的客户端和服务器二进制文件。所有文件都打包在一个压缩包中,还包含了一份完整的配置参数说明,我的linux系统下载的是这个版本:

在这里插入图片描述
  下载并解压之后有如下文件几个文件,其中frpcfrpc.toml是客户端的执行程序和配置文件(仅在客户端使用),而frpsfrps.toml是服务端的执行程序和配置文件(仅在服务端使用);;
在这里插入图片描述

2.2 部署

  1. 解压下载的压缩包。
  2. frpcfrpc.toml复制到内网服务所在的机器上(客户端)。
  3. frpsfrps.toml复制到拥有公网 IP 地址的机器上(服务端),并将它们放在任意目录。

2.3 通过systemd系统服务管理启动程序

  在 Linux 系统下可以使用 systemd 来管理 frps 服务,包括启动停止配置后台运行设置开机自启动功能,非常方便。

1.安装 systemd

  如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如 yum(适用于 CentOS/RHEL)或 apt(适用于 Debian/Ubuntu)来安装它:

# 使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemd

2.创建 frps.service 文件

  使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frps.service 文件(同理,客户端是frpc.service),用于配置 frps 服务。

sudo vim /etc/systemd/system/frps.service   # 服务端sudo vim /etc/systemd/system/frpc.service   # 客户端

3.写入内容(以服务端为例)

[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml

[Install]
WantedBy = multi-user.target

4.使用 systemd 命令管理 frps 服务(以服务端为例)

# 启动frps
sudo systemctl start frps
# 停止frps
sudo systemctl stop frps
# 重启frps
sudo systemctl restart frps
# 查看frps状态
sudo systemctl status frps

5.设置 frps 开机自启动

sudo systemctl enable frps

  命令执行结果如下,可以看出设置开机启动实际就是在/etc/systemd/system/multi-user.target.wants/目录下面创建一个符号链接,即可实现开机自启动,不难分析出开机时系统加载会扫描改目录下的服务配置,从而实现开机自启动,实现原理简单,举一反三,对于自己的服务程序也可以封装成systemd管理方式,这样维护起来更加方便高效。

通过遵循上述步骤,您可以轻松地使用 systemd 来管理 frps 服务,实现启动、停止、自动运行和开机自启动。确保替换路径和配置文件名称以匹配您的实际安装。

三.frp配置测试(通过SSH访问内网机器C)

  在客户端和服务器分别部署好frp程序之后,下一步需要修改配置文件,即在服务端修改frps.toml,客户端修改frpc.toml

3.1 服务端配置文件frps.toml修改

  在公网服务器上部署 frps 并编辑 frps.toml 文件。以下是简化的配置,其中设置了 frp 服务器用于接收客户端连接的端口:

bindPort = 7000      # 用来接收客户端(被代理机器C)连接的端口

  默认配置就是7000,不用改动。

3.2 客户端配置文件frpc.toml修改

  在需要被访问的内网机器(客户端C)上部署 frpc,并编辑 frpc.toml 文件,假设 frps 所在服务器的公网 IP 地址为124.156.15.247,以下是示例配置:

serverAddr = "124.156.15.247"      # 公网服务器(服务端B)ip
serverPort = 7000                  # 公网服务器(服务端B)端口,上面设置的

[[proxies]]
name = "ssh"
type = "tcp-test"
localIP = "127.0.0.1"              # 客户端C本地ip,不用改,就是localhost地址
localPort = 22                     # 客户端C SSH监听端口,默认是22,通常都不用改
remotePort = 6000                  # 需要在服务端B上请求开通的监听端口,很关键,这个端口是给登录方A用的
  • localIPlocalPort配置为需要从公网访问的内网服务C的地址和端口。
  • remotePort 表示在 frp 服务端B监听的端口,访问此端口的流量将被转发到本地服务的相应端口,一定要注意公网服务端B的端口防火墙是否开启!!!。

3.3 启动 frps 和 frpc

  一定要先启动公网服务端B,在启动客户端C,不然C的启动会失败(因为连不上B)。
1.通过命令启动服务端Bfrps服务程序:

# 启动frps
sudo systemctl start frps

2.通过命令查看服务端frps运行状态:

# 查看frps状态
sudo systemctl status frps

结果如下则表示frps启动成功。
在这里插入图片描述
3.通过命令启动客户端Cfrpc服务程序:

# 启动frpc
sudo systemctl start frpc

4.通过命令查看客户端Cfrpc运行状态:

# 查看frpc状态
sudo systemctl status frpc

结果如下则表示frpc启动成功。
在这里插入图片描述
备注:只要客户端能启动成功,就说明连上了服务端B,就说明B和C之间的通信信道是打通的!!!

四 .一切就绪,执行测试

  在客户端和服务端程序都按照上述步骤启动成功后,就说明客户端C借助服务端B完成了内网穿透功能,接下来就可以在需要访问的机器A上进行远程SSH登录,访问局域网主机C,在A上执行以下程序:

ssh -p 6000 username@124.156.15.247    

注意,这里的6000是在frpc.toml中设置的服务端B监听端口,username是C的用户名,而不是B的,IP填的是B的公网IP(124.156.15.247)。由此完成B将端口6000的请求转发给C,完成内网穿透下的SSH登录!!!

五 .补充:测试网络端口工具

  可以通过一些端口或者网络命令来测试刚刚设置的一些网络端口是否能正常工作(6000,7000),包括:

sudo lsof -i:端口号   # 测试端口是否处在监听状态
netstat -tunlp |grep 端口号 # 用于查看指定的端口号的进程情况
telnet ip 端口号 # 用于测试网络端口是否可达

一些测试实例如下:
在这里插入图片描述
在这里插入图片描述
通过网络端口测试,可以辅助我们查找哪些端口没打开,方便我们查找问题,一定得学会用哦。

六.参考链接

  • https://gofrp.org/zh-cn/docs/overview/
  • https://blog.csdn.net/jiuweideqixu/article/details/120167410

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入解析HTTPS:安全机制全方位剖析

随着互联网的深入发展,网络传输中的数据安全性受到了前所未有的关注。HTTPS,作为HTTP的安全版本,为数据在客户端和服务器之间的传输提供了加密和身份验证,从而确保了数据的机密性、完整性和身份真实性。本文将详细探讨HTTPS背后的…

护眼落地灯哪个牌子更好更专业?经典落地灯排名

不知道各位家长有没有发现,近几年来小小年纪就戴眼镜的孩子真的越来越多了! 根据专家数据统计,在全国青少年近视率中小学生就占其40%比重,也代表了10个学生中就有4、5个是戴眼镜的。造成这个趋势的原因也不难理解,一是…

多个SSH-Key下,配置Github SSH-Key

首先,检查 github 的连接性,因为DNS污染的原因,很多机器ping不通github,就像博主的机器: 怎么解决DNS污染的问题,博主查了很多教程,测试出一个有效的方法,那就是修改hosts文件。host…

dubbo和eureka的区别

dubbo可以作为客户端,也可以作为服务端,因此他内置了很多序列化框架可供选择,通过配置可以进行选择。默认是hession,还有gson,fastJson,jdk自带的序列化。 eureka只能作为服务端,他序列要与客户…

01_ESP32 MicroPython开发环境搭建

一、工作原理 Python源代码->Python解释器(MicroPython)-->二进制代码(01010)-->硬件电路(ESP32)-->高低电平输出-->其他设备 二、准备工作: 硬件:ESP32开发版,有很多个版本可选,我这里用的是ESP-32开发板&…

关于一个微信自动回复的平台

这是去年整的项目,源码在此。那个时候刚好在学习golang,那么学了那不得用起来嘛?于是就mk代码。 基本功能如下 pc端:主要功能就是登陆微信。 微信小程序:主要是为了方便管理自动回复的状态,在pc端登陆完…

【CANoe使用大全】——报文发送(IG)

🙋‍♂️【CANoe使用大全】系列💁‍♂️点击跳转 文章目录 1.仿真报文概述2.IG模块的使用2.1.IG模块打开方式 3.添加报文4.添加报文后的配置4.1.发送方式配置4.1.1.鼠标触发4.1.2.键盘触发4.2.3.周期发送 4.3 信号值修改编辑 1.仿真报文概述 报文发送一…

每日一题——LeetCode1346.检查整数及其两倍数是否存在

方法一 循环查找 用indexOf查找每个元素的两倍是否存在在数组中&#xff0c;找到了就直接return true&#xff0c;循环结束还没找到就return false var checkIfExist function(arr) {for(let i0;i<arr.length;i){let index arr.indexOf(arr[i]*2)if(index>0 &&…

代码随想录算法训练营第十六天 |104.二叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数(待补充)

104.二叉树的最大深度 1、题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长…

可以实时监控电脑的软件有哪些?好用的四款电脑监控软件【高人气收藏分享】

在当今数字化时代&#xff0c;电脑已经成为我们工作和生活中不可或缺的工具。然而&#xff0c;有时候我们需要对电脑进行监控&#xff0c;以确保工作效率和保护个人隐私。因此&#xff0c;选择一款好的电脑监控软件非常重要。本文将介绍四款好用的电脑监控软件&#xff0c;并探…

06 栈

目录 1.栈 2.实现 3.OJ题 1. 栈 1. 栈的概念和结构 栈: 这一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&…

使用BootStrapBlazor组件搭建Bootstarp风格的Winform界面

项目地址https://gitee.com/zhang_jie_sc/my-blazor-winforms 1.安装Bootstrap.Blazor.Templates 模板 在power shell中输入dotnet new install Bootstrap.Blazor.Templates::7.6.1&#xff0c;安装7.6.1是因为版本8以后就要强制使用net8.0了&#xff0c;很多语法不一样&…

Java集合相关面试题

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于java面试题系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基…

BIGVGAN: A UNIVERSAL NEURAL VOCODER WITHLARGE-SCALE TRAINING——TTS论文阅读

笔记地址&#xff1a;https://flowus.cn/share/a16a61b3-fcd0-4e0e-be5a-22ba641c6792 【FlowUs 息流】Bigvgan 论文地址&#xff1a; BigVGAN: A Universal Neural Vocoder with Large-Scale Training Abstract 背景&#xff1a; 最近基于生成对抗网络&#xff08;GAN&am…

SpringBoot activemq收发消息、配置及原理

SpringBoot集成消息处理框架 Spring framework提供了对JMS和AMQP消息框架的无缝集成&#xff0c;为Spring项目使用消息处理框架提供了极大的便利。 与Spring framework相比&#xff0c;Spring Boot更近了一步&#xff0c;通过auto-configuration机制实现了对jms及amqp主流框架…

《WebKit技术内幕》学习之十五(3): Web前端之未来

3 Web应用和Web运行环境 3.1 Web应用 HTML5提供了强大的能力&#xff0c;而不是支持Web网页这么简单。就目前而言&#xff0c;它已经初步提供了支持Web网页向Web应用方向发展的能力。相对于本地应用&#xff08;Native Application&#xff09;&#xff0c;Web前端领域也能够…

NIO-Selector详解

NIO-Selector详解 Selector概述 Selector选择器&#xff0c;也可以称为多路复⽤器。它是Java NIO的核⼼组件之⼀&#xff0c;⽤于检查⼀个或多个Channel的状态是否处于可读、可写、可连接、可接收等。通过⼀个Selector选择器管理多个Channel&#xff0c;可以实现⼀个线程管理…

深入浅出AI落地应用分析:AI视频生成Top 5应用

接下俩会每周集中体验一些通用或者垂直的AI落地应用&#xff0c;主要以一些全球或者国外国内排行较前的产品为研究对象&#xff0c;「AI 产品榜&#xff1a; aicpb.com」以专题的方式在博客进行分享。 一、Loom 二、Runway 产品链接&#xff1a;https://app.runwayml.com/ …

企业职能部门员工忙闲不均,如何调动积极性?

案例企业背景&#xff1a; 某企业隶属于中国航天科技集团公司&#xff0c;致力于光纤陀螺系统、微机电惯性系统、光纤传感系统等高新技术产品的研发。公司具有雄厚的新型惯导和光电传感技术基础&#xff0c;多年来开创了我国光纤陀螺技术在武器、卫星和载人飞船等多个任务上的…

代码随想录Day32 | 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

代码随想录Day32 | 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II 122.买卖股票的最佳时机II55.跳跃游戏45.跳跃游戏II 122.买卖股票的最佳时机II 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a; 贪心算法也能解决股票问题&#xff01;LeetCode&#xff1a;122.…