基于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协议及配置、IP地址、子网掩码、网关地址、DNS与DHCP介绍

管理员必备技能: 一、云计算的介绍 什么是服务器 •能够为其他计算机提供服务的更高级的电脑 –机架式 –塔式 –机柜式 –刀片式 典型服务模式 •C/S,Client/Server架构 –由服务器提供资源或某种功能 –客户机使用资源或功能 二、TCP/IP协议及配置 •…

tcp/ip分层模型

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

SQL 关键字参考手册(三)

目录 SQL 关键字 SQL INSERT INTO 关键字 INSERT INTO SQL INSERT INTO SELECT 关键字 INSERT INTO SELECT SQL IS NULL 关键字 IS NULL SQL IS NOT NULL 关键字 IS NOT NULL SQL JOIN 关键字 INNER JOIN LEFT JOIN RIGHT JOIN FULL OUTER JOIN SQL LIKE 关键字…

代码随想录算法训练营第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 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航…

linux-apt 2

文章目录 一、删除包(Removing Packages )1、apt remove package_name2、apt remove package1 package2 package3 ...3、apt purge package14、apt autoremove(没有包名参数) 二、查询1、apt search package_name2、apt show pack…

UR20机械臂学习笔记

UR20机械臂学习笔记 UR20机械臂学习笔记一.使用UR系列机器人第三方库二.UR机器人的初始化 1.连接UR机器人2.设置机器人末端法兰(tcp)3.设置机器人末端负载 三.机器人运动程序 1.机器人移动 (1) MoveJ(2) MoveL(3) MoveP(4) MoveC(5) Translate(6) Stop 2…

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

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

PHP报错信息

PHP 推荐链接Thinkphp报错:SplFileInfo::getSize(): stat failed for 推荐链接 链接目录 Thinkphp报错:SplFileInfo::getSize(): stat failed for 先执行 move() 移动文件后,导致文件移除之后又执行了:$size $file->getSize…

【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不变价累计值(亿元…

python ffmpeg将mp4文件实时转码为ts,并指定pid等信息,输出到udp

要将MP4文件实时转码为TS格式,并将PID等信息指定为UDP输出,可以使用subprocess模块和ffmpeg命令行工具来实现。以下是一个示例代码,用于实时转码并将输出发送到UDP服务器: import subprocess import timeinput_file "input.…

性能优化-高通的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…