基于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

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

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

相关文章

tcp/ip分层模型

文章目录 tcp/ip分层模型封装和分用 tcp/ip分层模型 上面这个图主要介绍了osi七层模型和tcp/ip五层模型(有的资料上说的是tcp/ip四层模型,把物理层算在了硬件设备上,这篇文章还是按照五层模型来讲)。但osi七层模型实现起来比较复杂…

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

二叉树理论基础: https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE 104.二叉树的最大深度 题目链接:https://leetcode.cn/problems/maximum-depth-…

【TCP】传输控制协议

前言 TCP(Transmission Control Protocol)即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。它由IETF的RFC 793定义,为互联网中的数据通信提供了稳定的传输机制。TCP在不可靠的IP层之上实现了数据传输的可…

如何使用Docker部署导航页工具Dashy并实现任意浏览器远程访问——“cpolar内网穿透”

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航…

最大流解决二分图匹配问题

文章目录 零、前言一、二分图匹配转化为网络流模型1.1建模步骤1.2整数值最大流和二分图匹配的关系1.3代码实现 二、OJ练习P2756 飞行员配对方案问题P3254 圆桌问题 零、前言 阅读本文前,需具备以下知识: 二分图及染色法判定-CSDN博客 二分图最大匹配—…

【JavaSE】P114~P147 ArrayList集合,Scanner类,Random,字符串及相关常用方法,静态static

目录 1 ArrayList 集合装箱,拆箱及包装类 2 API 概述和使用Scanner类匿名对象Random生成随机数 3 字符串字符串的31种构造方法字符串的常量池equals和 字符串的获取相关方法字符串的截取方法字符串的转换相关方法字符串的分割方法 4 静态static关键字静态static的内…

对话泛能网程路:能源产业互联网,行至中程

泛能网的能源产业互联网的标杆价值还不仅于此。其在产业互联之外,也更大的特殊性在于其也更在成为整个碳市场的“辅助运营商”,包括电力、碳等一系列被泛能网帮助企业改造和沉淀的要素资产,都在构成着碳交易市场的未来底层。 这恰是产业互联…

PCL-IO输入输入模块

IO输入输入模块 一、概述二、点云数据格式1. PCD 格式2. PLY 格式3. OBJ 格式4. STL 格式5. OFF 格式 三、读取3D文件1. API 总览2. 示例 四、保存3D文件1. API 总览2. 示例 一、概述 PCL 库提供了一个模块用来对3D数据进行读写操作,这个库提供了一个模块&#xff…

2007-2022年全国货币供应量M2、失业率、CPI、第三方互联网支付、出口、人口等宏观经济指标数据(年度、季度)

2007-2022年全国货币供应量M2、失业率、CPI、第三方互联网支付、出口、人口等宏观经济指标数据(年度、季度) 1、时间:2007-2022年(季度、年度) 2、指标: 季度指标:时间、GDP不变价累计值(亿元…

性能优化-高通的Hexagon DSP和NPU

原文来自【 Qualcomm’s Hexagon DSP, and now, NPU 】 本文主要介绍Qualcomm Hexagon DSP和NPU,这些为处理简单大量运算而设计的硬件。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能&#xf…

多臂老虎机理论系列

[多臂老虎机理论](Lower bounds for non-adaptive exploration) 多臂老虎机之Lower bounds 定理 2.12: 定理的意义在于,对于任何不调整探索策略的算法,存在至少一个问题实例,使得随着时间的推移,该算法的预期遗憾将…

Linux常见的管理命令

1. whoami 作用: 显示出当前有效的用户名称,Linux是多用户多任务 语法:whoami(选项) 选项: --help:在线帮助 --version:显示版本信息和退出 场景使用: 1. 当用户想要查看当前登录系统的用户…

14.case条件测试语句(5)

case语句是在多个范围内匹 配数据,若匹配成功则执行相关命令并结束整个条件测试;如果数据不在所列出的范围内, 则会去执行星号(*)中所定义的默认命令(C语言中的default语句) 提示用户输入一个字…

爬取樱花动漫名侦探柯南最新剧场版ts格式

import os import requests import zipfile from tqdm import tqdm import tkinter as tkfilename 名侦探柯南\\ if not os.path.exists(filename):os.mkdir(filename) # https://vip.ffzy-online6.com/20231129/22304_740e70d0/2000k/hls/cedd2dc1ecb000001.ts # https://vip…

硬件基础:存储器

之前对存储器做过简单的汇总,参考这篇文章: 计算机/微机存储技术_路溪非溪的博客-CSDN博客 这次,我们从数字集成电路的角度再次补充学习一下存储器的知识。 定义和分类 从这里面我们能知道一些关键词。 存储介质主要是半导体器件和磁性材料。…

亿发中小型企业erp软件智能化赋能,专业助力广东制造行业生产流程管理

在当前经济全球化的环境下,广东省的中小型制造业企业正面临多方面的严峻挑战。包括产品质量的维护、分销渠道的稳定、生产成本降低以及减轻生产过程中的资源消耗等难题。目前,随着信息技术的迅速发展,一些先进的IT工具,比如企业资…

STM32实现软件IIC协议操作OLED显示屏(1)

时间记录:2024/1/25 一、IIC协议介绍 (1)协议介绍 IIC(又称I2C,Inter-Integrated Circuit),即集成电路总线,是一种两线式串行总线,由PHILIPS公司开发,用…

OSS上传下载乱码问题

配置headers: "Content-Disposition": attachment; filename*UTF-8${encodeURIComponent(file.file.name)},

【GitHub项目推荐--开源小游戏】【转载】

01 回合制生存游戏 Cataclysm-DDA 是一款回合制生存游戏,背景设置在后世界末日的世界中。虽然有些人将其描述为“僵尸游戏”,但《大灾变》远不止这些。努力在一个严酷、持久、程序生成的世界中生存。 为食物、设备寻找一个死去的文明的残余物。或者&am…

ThinkPHP+uni-app框架熊猫电竞赏金电竞系统源码PHP含APP+H5

熊猫电竞赏金电竞系统源码,包含APP、H5和搭建视频教程,支持运营级搭建,这套源码是基于ThinkPHPUniaapp框架开发的。 赏金电竞系统源码 APPh5搭建视频 可搭建!运营级! 赏金赛源码,用户通过平台打比赛&#x…