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

news2024/10/2 2:02:56

文章目录

  • 一.概述
    • 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

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

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

相关文章

开源模型部署及使用

开源模型部署及使用 1.Langchain-Chatchat1.环境2.运行3.效果 2.facefusion1.环境2.运行3.效果 3.Aquila1.环境2.运行 1.Langchain-Chatchat Langchain-Chatchat这里面可以调用许多模型,我本地下载了chatglm3模型文件,所以就用这个模型。 1.环境 根据…

Python如何实现队列的同步实现

队列 q Queue.Queue(maxsize 10) 创建一个“队列”对象。Queue.Queue类即是一个队列的同步实现。队列长度可为或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度。 q.put()方法在队尾插入一个项目。put()有两个参数&#x…

解决Windows系统本地端口被占用

目录 一、被程序占用端口 1.通过终端杀掉占用端口的进程 2.任务管理器 二、被系统列为保留端口 前言: 首先了解为什么会出现端口被占用的情况 端口被占用的情况可能出现的原因有很多,主要有以下几点: 1.多个应用程序同时启动&…

如何对图片进行引用。

问题描述:如何对图片进行引用。 问题解答: 在图片描述处和图片标题处引用即可。

【C++11并发】mutex 笔记

简介 在多线程中往往需要访问临界资源,C11为我们提供了mutex等相关类来保护临界资源,保证某一时刻只有一个线程可以访问临界资源。主要包括各种mutex,他们的命名大都是xx_mutex。以及RAII风格的wrapper类,RAII就是一般在构造的时…

光伏设计——光伏合作的几种方式

鹧鸪云 随着光伏产业的发展,越来越多的企业和组织选择通过合作来提高效率、降低成本、实现共赢。以下是几种常见的光伏合作方式: 合资企业:合资企业是一种常见的合作方式,两个或多个公司共同出资、共同经营,共享利润和…

学习笔记-李沐动手学深度学习(四)(12-13,权重衰退、L2正则化、Dropout)

总结 【trick】过拟合及正则化项参数的理解 实际数据都有噪音,一般有噪音后,模型实际学习到的权重w就会比 理论上w的最优解(即没有噪音时)大。(QA中讲的) 【好问题】 (1)不使用正…

Java强训day4(选择题编程题)

选择题 接口中的方法是为了让重写编程题 题目 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int a_b sc.nextInt();int b_c sc.nextInt();int ab sc.nextInt();int bc sc.nextInt();for(in…

HttpHeaders 源码中headers成员变量为什么声明为final

源码如下 public class HttpHeaders implements MultiValueMap<String, String>, Serializable {private final Map<String, List<String>> headers;public String getFirst(String headerName) {List<String> headerValues (List)this.headers.get(…

THM学习笔记——OSI模型和TCP/IP模型

全是文字 比较枯燥 建议视频 OSI模型由七个层次组成&#xff1a; 第7层 -- 应用层&#xff1a; OSI模型的应用层主要为在计算机上运行的程序提供网络选项。它几乎专门与应用程序一起工作&#xff0c;为它们提供一个界面以用于传输数据。当数据传递到应用层时&#xff0c;它…

3dmax效果图渲染出现曝光怎么解决?

在使用3ds Max完成效果图渲染工作时&#xff0c;有时会遇到曝光过度的问题&#xff0c;这会使得渲染的图像出现光斑或者过亮&#xff0c;损害了效果的真实感和美观度。那么解决解决3dmax曝光问题呢&#xff1f;一起看看吧&#xff01; 3dmax效果图渲染出现曝光解决方法 1、相机…

yml配置文件怎么引用pom.xml中的属性

目录 前言配置测试 前言 配置文件中的一些参数有时要用到pom文件中的属性&#xff0c;做到pom文件变配置文件中也跟着变&#xff0c;那如何才能做到呢&#xff0c;下面咱们来一起探讨学习。 配置 1.首先要在pom.xml中做如下配置&#xff0c;让maven渲染src/main/resources下配…

YOLOv5全网独家首发:Powerful-IoU更好、更快的收敛IoU,效果秒杀CIoU、GIoU等 | 2024年最新IoU

💡💡💡本文独家改进:Powerful-IoU更好、更快的收敛IoU,是一种结合了目标尺寸自适应惩罚因子和基于锚框质量的梯度调节函数的损失函数 💡💡💡MS COCO和PASCAL VOC数据集实现涨点 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category_1251193…

力扣1143. 最长公共子序列

动态规划 思路&#xff1a; 假设 dp[i][j] 是 text1[0:i] 和 text2[0:j] 最长公共子序列的长度&#xff1b;则 dp[0][j] 0&#xff0c;&#xff08;空字符串和任何字符串的最长公共子序列的长度都是 0&#xff09;&#xff1b;同理 dp[i][j] 0&#xff1b;状态转移方程&…

腾讯云服务器上发送邮件连接超时

腾讯云会将服务器25端口禁用&#xff08;腾讯云默认禁用&#xff09;&#xff0c;开启后发送正常 https://console.cloud.tencent.com/secctrl 参考 腾讯云服务器上发送邮件连接超时&#xff08;无法发送&#xff09;的相关问题

深度强化学习(王树森)笔记02

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…

防御保护---NAT实验

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一. 练习 PC4配置 FW2配置 sys int g0/0/0 ip add 192.168.100.3 24 service-manage all permit sys int l0 ip add 1.1.1.1 24 int g0/0/0 ip add 12.0.0.1 24 int g0/0/2 ip add 21.0.0.1 …

Qlik Sense : Store With Retry (保存重试机制)

Background sometime you cannot store the file directly ,maybe there are another process are reading/storeing the file , so you would need to wait another proecess done and retry . then we come up this solution . 有时您不能直接存储文件&#xff0c;可能还有…

四、Kotlin 表达式

1. 常量 & 变量 1.1 可读写变量&#xff08;var&#xff09; var x initValue // x 称为可读写变量注意&#xff1a;当 var 声明的变量做成员属性时&#xff0c;默认提供 setter/getter 方法。 1.2 只读变量&#xff08;val&#xff09; val x initValue // x 称为只…

vivado 预设文件、IP设置(_P)、用户参数、以太网时钟处理、GT位置限制、当前可识别板的IP列表

了解预设文件 预设文件有助于在特定配置中自定义IP核心。PS7、axi_emc和当linear_flash或DDR3_SDRAM 界面是在Vivado IP集成商的Board选项卡中选择的。预设文件使用XML格式。preset_file是为特定的Board文件定义的&#xff0c;可以是用于将预设应用于多个IP。 <ip_presets…