frp内网穿透SSH

news2024/11/20 23:29:52

参考博客:
博客1(推荐): https://sspai.com/post/52523
博客2: https://blog.csdn.net/qq_36981760/article/details/115713179
博客3: https://blog.csdn.net/qq_36981760/article/details/115713179
参考视频
(推荐,比较详细): https://www.bilibili.com/video/BV1p94y1y7ft/

背景

由于寒假放假回家, 回家之后就不能连接学校的服务器了(可以不用,但是不能没有),所以最近了解frp内网穿透技术通过连接公网ip就可以连接学校的服务器。但是查阅博客中有一些细节我感觉没有讲清楚(可能是我比较菜, 配了挺久), 所以特此缝合一篇博客供大家使用。

frp介绍

frp可以通过利用公网IP的的主机(frp服务端)将内网的主机(frp客户端)暴露给互联网,从而实现通过外网能直接访问到内网主机;frp有服务端和客户端,服务端需要装在有公网ip的主机上,客户端装在内网主机上(重点!!!)。

frp案例:

情况1. 电脑在学校: 连接学校网的主机 --------> 学校服务器 (属于同一个局域网中可以直接连)

情况2. 电脑在家(和服务器不在一个局域网中): 家里面的主机 --------> 公网ip --------> 学校服务器 (需要使用frp)

如果你是情况1, 那么恭喜你不需要使用内网穿透,
如果你是情况2, 我们的目的是通过内网穿透(frp)技术,本地主机通过访问公网主机ip(106.55.xxx.xxx)即可访问服务器主机。 举例我在家连接学校服务器

准备工作

  • (frp服务端) 一台公网主机,一般是云服务器(阿里云、腾讯云等都行) 注意: 不能是192.168.xxx.xxx 这种ip地址开头的本地虚拟机主机,这样满足公网条件 (假设本案例使用的公网ip为 106.55.123.123)
  • (frp客户端)一台私网主机,一般是局域网里面服务器 注意: 可以是192.168这种ip地址开头的虚拟机主机 (假设服务器ip为 222.200.123.123)
  • 一台想要使用服务器的主机(ip理论上任意,可以访问公网即可)

环境说明: frp服务端, frp客户端都是Linux系统

1. frp服务端设置

说明: 内网穿透需要先配置frp服务端然后再配置frp客户端

1.1 frp的下载

官网下载地址: https://github.com/fatedier/frp/releases
选择适合的版本下载(以v0.33.0版本为例)
查看Linux主机版本为

arch 

查看结果,如果是“X86_64“即可选择”frp_0.33.0_linux_amd64.tar.gz

创建vpns目录用于存放frp服务端的安装包:(目录名称可以自定以)

mkdir vpns

切换到vpns目录下载frp服务端

cd vpns

1.1.1 双击下载

v0.33.0下载地址: https://github.com/fatedier/frp/releases/tag/v0.33.0

下载后上传到frp服务端的vpns目录中即可

1.1.2 wget命令下载

在frp服务端的vpns目录下进行下载

wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz

1.2 frp文件解压

tar -zvxf frp_0.33.0_linux_amd64.tar.gz

解压后如图所示

复制frp_0.33.0_linux_amd64文件夹并改名为frp,方便使用

cp -r frp_0.33.0_linux_amd64 frp

当前vpns目录下文件结构

1.3 删除冗余文件

cd frp

删除与frp服务端无关的文件

rm -rf frpc frpc.ini frpc_full.ini

删除后frp目录如下所示

1.4 配置frps.ini文件

vim frps.ini

默认初始化内容是这样的

[common]
bind_port = 7000

复制内容 添加到文件末尾

dashboard_port = 7500
token = 12345678
dashboard_user = admin
dashboard_pwd = admin
vhost_ssh_port = 6000
vhost_rdp_port = 7001
heartbeat_timeout = 60

更改后frps.ini 文件内容如下

[common]
bind_port = 7000
dashboard_port = 7500
token = 12345678
dashboard_user = admin
dashboard_pwd = admin
vhost_ssh_port = 6000
vhost_rdp_port = 7001
heartbeat_timeout = 60

:wq!保存退出
配置完如下

各个参数说明:

# bind_port 表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到。
bind_port = 7000
# dashboard_port 是服务端仪表板的端口,在配置完成服务启动后可以通过公网ip:7500 进行访问
dashboard_port = 7500
# token是用于客户端和服务端连接的口令,自行设置并记录,稍后会用到。
token = 12345678
# dashboard_user 和 dashboard_pwd 表示打开仪表板页面(7500端口)
# 登录的用户名和密码 可以自定义
dashboard_user = admin
dashboard_pwd = admin
# vhost_ssh_port 表示要用6000端口 作为ssh服务端口
vhost_ssh_port = 6000
# vhost_ssh_port 表示要用7001端口 作为rdp服务端口
vhost_rdp_port = 7001
# 心跳连接: 建议配置, frp 0.43.0版本如果不加,60秒就会自动断开连接!
# frp服务端就加这一条,frp客户端每个服务都要加。
heartbeat_timeout = 60

1.5 防火墙开放端口

防火墙相关操作: https://blog.csdn.net/qq_45056135/article/details/128172916
查看当前开放的端口

firewall-cmd --zone=public --list-ports

将7000, 7500, 6000, 7001端口开放
开放 7000 端口(frps服务端和frpc客户端建立连接)

firewall-cmd --zone=public --add-port=7000/tcp --permanent

开放7500端口(配置完成启动服务后可以通过浏览器访问 x.x.x.x:7500 , 其中x.x.x.x为frp服务端的ip, 查看frp服务运行信息。例如的是106.55.123.123:7500)

firewall-cmd --zone=public --add-port=7500/tcp --permanent

开放 6000 端口(用于和frp服务端和frp端建立ssh连接协议, 之后会讲到)

firewall-cmd --zone=public --add-port=6000/tcp --permanent

开放 7001 端口(用于和frp服务端和frp端)

firewall-cmd --zone=public --add-port=7001/tcp --permanent

使其立即生效

firewall-cmd --reload

查看当前开放的端口

firewall-cmd --zone=public --list-ports

如下所示表示端口已经开放

如果你的frp服务端是云服务器,在防火墙设置中开放7000, 7500, 6000, 7001端口确保端口真的开放了(因为云服务器中利用命令开启端口可能无效)
如下所示

1.6 运行frps服务端

在frp目录下运行

./frps -c frps.ini

如下所示表示运行服务端成功

检查公网ip的7500端口是否可以正常访问
例如我的公网ip是: 106.55.123.123

106.55.123.123:7500

此时用浏览器访问 106.55.123.123:7500:7500 并使用自己设置的用户名密码登录(都是admin),即可看到仪表板界面
如下说明设置成功
在这里插入图片描述
到这里frp服务端设置已经完成

2. frp客户端设置

2.1 frp的下载

官网下载地址: https://github.com/fatedier/frp/releases
选择适合的版本下载(以v0.33.0版本为例)
查看Linux主机版本为

arch 

如下所示, 查看结果,如果是“X86_64“即可选择”amd64”

创建目录用于存放frp客户端安装包:

mkdir vpnc

切换到vpnc进行下载frp客户端

cd vpnc

2.1.1 双击下载

v0.33.0下载地址: https://github.com/fatedier/frp/releases/tag/v0.33.0

下载上传到frp客户端的vpnc目录中

2.1.2 wget命令下载

切换到frp客户端的vpnc目录中(目录名称可以自定义)
利用wget命令进行下载frp

wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz

2.2 frp文件解压

解压frp_0.33.0_linux_amd64.tar.gz文件

tar -zvxf frp_0.33.0_linux_amd64.tar.gz

解压之后目录结构如下

复制文件夹并改名为frp,方便使用

cp -r frp_0.33.0_linux_amd64 frp

当前vpnc目录下文件结构

2.3 删除冗余文件

cd frp

删除与frp客户端无关的文件 frps frps.ini frps_full.ini

rm -rf frps frps.ini frps_full.ini

删除后frp目录如下所示

2.4 配置frpc.ini文件

vim frpc.ini

frpc.ini默认是这样的

[common]
server_addr = 127.0.0.1
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

修改server_addr为frp服务端ip

server_addr = 106.55.123.123

添加toke口令和frp服务端的token口令一致

token = 12345678

复制内容,添加到文件末尾

[rdp]
type = tcp
local_ip = 127.0.0.1           
local_port = 3389
remote_port = 7001
heartbeat_timeout = 60

更改后frpc.ini文件内容如下

[common]
server_addr = 106.55.123.123
server_port = 7000
token = 12345678
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
heartbeat_timeout = 60
[rdp]
type = tcp
local_ip = 127.0.0.1           
local_port = 3389
remote_port = 7001
heartbeat_timeout = 60

注意: [ssh] [rdp] 这种头不能重名
文件各个参数说明:

[common]
# server_addr 表示frp服务端的ip地址
server_addr = 106.55.123.123
# 表示frp服务端的bind_port 7000
server_port = 7000
# token 口令 frp服务端客户端需要一致
token = 12345678
[ssh]
# 连接类型 一般都是tcp
type = tcp
# frp客户端ip地址 写127.0.0.1或者222.200.123.123 都可以
local_ip = 127.0.0.1
# 表示frp客户端的22端口号和frp服务的6000端口号相对应
# 如果需要使用ssh服务frp客户端需要开放22端口,同时frp服务端需要开放6000端口
local_port = 22
remote_port = 6000
# 心跳连接: 建议配置, frp 0.43.0版本如果不加,60秒就会自动断开连接!
# frp服务端就加这一条,frp客户端每个服务都要加。
heartbeat_timeout = 60
[rdp]
# 连接类型 一般都是tcp
type = tcp
# frp客户端ip地址 写127.0.0.1或者222.200.123.123 都可以
local_ip = 127.0.0.1   
# 表示frp客户端的3389端口号和frp服务的7001端口号相对应
# 如果需要使用rdp服务,frp客户端需要开放3389端口,同时frp服务端需要开放7001端口        
local_port = 3389
remote_port = 7001
# 心跳连接: 建议配置, frp 0.43.0版本如果不加,60秒就会自动断开连接!
# frp服务端就加这一条,frp客户端每个服务都要加。
heartbeat_timeout = 60

2.5 防火墙开放端口

防火墙相关操作: https://blog.csdn.net/qq_45056135/article/details/128172916
查看当前开放的端口

firewall-cmd --zone=public --list-ports

将7000, 7500, 6000, 7001端口开放
开放 7000 端口(frp客户端和frps服务端建立连接)

firewall-cmd --zone=public --add-port=7000/tcp --permanent

开放22端口(用户建立ssh连接)

firewall-cmd --zone=public --add-port=22/tcp --permanent

开放3389端口(用户建立rdp连接)

firewall-cmd --zone=public --add-port=3389/tcp --permanent

使其立即生效

firewall-cmd --reload

检查是否成功开启

firewall-cmd --zone=public --list-ports

如下表示成功开启7000, 3389, 22端口

2.6 运行frps客户端

注意: 运行客户端之前一定要保证frp服务端是开启的
运行frps客户端

./frpc -c frpc.ini

如下所示一直在等待的情况说明内frp服务端frp客户端建立连接成功(可能是配置问题,或者是防火墙的问题)

如下图所示表示frp服务端frp客户端建立连接成功

到了这里基本上就差不多成功了

服务端和客户端配置文件的对应关系

在这里插入图片描述
如果我们需要修改bind_port等参数,服务端和客户端的值对应即可
注意: 修改完端口参数之后要开放相应的防火墙端口!!!

1,2步配置成功说明frp服务端frp客户端已经建立了连接
通过刚刚的配置
本地主机连接公网: 106.55.123.123:6000 等价于连接 222.200.123.123:22
本地主机连接公网: 106.55.123.123:7001 等价于连接 222.200.123.123:3389
这里的本地主机可以是任意主机,只要可以连接公网即可!!!

3. 本地主机(第三台主机)连接服务器

SSH服务为例: 本地主机需要连接内网服务器的ssh服务之前是连接222.200.123.123的22端口,现在只要通过连接106.55.123.123的6000端口即可
在这里插入图片描述
我这里是使用xshell连接服务器主机222.200.123.12322端口
注意: 利用本地主机连接公网时 (必须保证frp服务端和客户端都是开启状态, 而且是成功开启的, 稍后我们会讲解如何后台运行)

3.1 设置连接信息

我们通过连接frp服务端的106.55.123.123的6000端口即可访问
222.200.123.123的22端口

3.2 设置用户名信息

这里是frp客户端的用户名和密码
这里是frp客户端的用户名和密码
这里是frp客户端的用户名和密码


如下图所示表示成功访问服务器主机: (内网穿透成功)

4. frp 客户端服务端放在后台运行

在进行后台运行之前最好是证明你前面三步都是成功的,不建议一开始就后台运行,因为这样如果出现问题比较难发现

4.1 开启服务端后台运行

frp服务端后台运行(按Ctrl+C退出后会依然运行)

nohup ./frps -c frps.ini &

查看是否运行成功

ps -ef | grep frp

如下所示表示服务端后台运行成功

同时frp目录下会多一个nohup.out文件

关闭后台运行(查到到frps进程号关闭即可)

kill -9 12096

4.2 开启客户端后台运行

frp客户端后台运行(按Ctrl+C退出后会依然运行)

nohup ./frpc -c frpc.ini &

如下所示表示frp客户端后台成功运行

同时frp目录下会多一个nohup.out文件

关闭后台运行(查到到frpc进程号关闭即可)

kill -9 15166

5. PyChram

如果你使用pychram连接,同理
将以前的222.200.123.123的22端口(私网)
改为106.55.123.123的6000端口即可(公网)

如果你还遇到其他问题可以参考以下博客
参考博客:
博客1(推荐): https://sspai.com/post/52523
博客2: https://blog.csdn.net/qq_36981760/article/details/115713179
博客3: https://blog.csdn.net/qq_36981760/article/details/115713179
参考视频
(推荐,比较详细): https://www.bilibili.com/video/BV1p94y1y7ft/

本人水平有限,如有错误欢迎指正交流!!!

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

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

相关文章

谈谈inline(内联函数)

目录1、例子抛出2、 了解inline2.1 宏替换的副作用2.2 内联函数2.3 有意思的点3、总结4、 感谢您的阅读!1、例子抛出 我们知道可以用宏定义来代替一个变量或者函数块: #define A 20 #define MYFUNC(a,b) ((a) > (…

Kubernetes双主集群的部署(二)

Kubernetes单主集群的部署(一)_Evens7xxX的博客-CSDN博客 上期完成了单主架构集群的部署,本期将在单主架构的基础上添加Master和负载均衡器 目录 二、k8s双主架构集群的部署 1.另一台Master同样做初始化配置 2.配置 Master02 3.配置负载均…

算法与数据结构31:DC3算法生成后缀数组

算法与数据结构31:DC3算法生成后缀数组什么是后缀数组引出DC3算法DC3算法具体实现DC3算法模板DC3模板的用法一个可以使用DC3的题什么是后缀数组 假设有字符串 aabaabaa 那么从每个位置开始,到结尾位置,截取后缀串,可得 a aa baa …

四面阿里巴巴如愿拿到offer定级P7,为此我筹备了半年

前言 每个程序员都有一个大厂的梦,而互联网大厂首当其冲自然是阿里巴巴最吃香,今天小编就来分享一个小伙进阿里巴巴的面经! “不想进大厂的程序员不是好程序员”哈哈哈 春节过后,本是金三银四之际,大部分人也都准备好…

【RealSense】L515学习记录

Intel RealSense™ SDK 2.0的安装 1、注册服务器的公钥: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8…

ChatGPT:chatGPT本地部署、运行和接口调用

文章目录从 github 下载环境配置conda 创建虚拟环境官方步骤配置环境安装 revChatGPT更改 config.json.example -> config.json将 config.json 移动到 revChatGPT 路径下cookie 信息写入 config.json方式1:使用账号密码作为登录的方法方式2: 使用 ses…

软件测试期末测试题及解析(五套试题共两万余字)

软件测试期末考试复习题题目软件测试期末考试复习题(一)一、单项选择题:二、判断题:三、简答题期末考试复习题(二)一、单项选择题:二、判断题:三、简答题期末考试复习题(…

并查集最重要的优化:路径压缩

本文章将直接讲解优化,对并查集还不理解或忘记的同学可以看以下两篇文章 并查集基础 优化:启发式合并 先赞后看好习惯 今天我们要来说另一种对并查集的优化:路径压缩 也许有些同学看了启发式合并会说:其实优化的也不多啊&…

定时器: Timer (Java)

定时器: Timer一、定时器是什么二、标准库中的定时器三、实现定时器3.1 定时器的构成3.2 实现细节3.3 完整代码一、定时器是什么 定时器也是软件开发中的一个重要组件。类似于一个 “闹钟”,即达到一个设定的时间之后,就执行某个指定好的代码。 定时器…

收藏 | 自然语言处理(NLP)数据集汇总(附下载链接)

🎄🎄【自然语言处理NLP】简介 🎄🎄 自然语言处理(Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门…

自制CPU

CPU是计算机的核心部件,其发展历程就是人类文明的发展史。 随着计算机技术的不断发展, CPU也从一开始的功能简单,到现在已经变成功能强大、应用广泛的芯片。 但要想更深入了解 CPU,你需要知道它是如何工作以及为什么这么做的。 你…

数据结构003:有效的数独

原文链接:数据结构003:有效的数独 题目 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3…

Lecture7:随机梯度下降算法问题及解决、dropout正则化、学习率的选择、迁移学习

目录 1.随机梯度下降算法问题及解决 1.1 随机梯度下降算法SGD的问题 1.2 具有动量的梯度下降算法SGDMomentum 1.3 Nesterov加速梯度法 1.4 AdaGrad 1.5 RMSProp 1.6 融合!Adam算法 2. 学习率的选取 3. 正则化 3.1 dropout正则化 4. 迁移学习 1.随机梯度下…

一篇文章带你了解python数据分析岗位怎么样

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 分析目标 各城市对数据分析岗位的需求情况 不同细分领域对数据分析岗的需求情况 数据分析岗位的薪资状况 工作经验与薪水的关系 公司都要求什么掌握什么技能 岗位的学历要求高吗 不同规模的…

详解C语言中的自定义类型(结构体,枚举,联合)

目录 1. 结构体 1.1 结构的声明 1.2 结构的自引用 1.3 结构体变量的定义和初始化 1.4 结构体内存对齐 (计算结构体的大小) 1.5 结构体传参 2. 位段(结构体实现位段) 2.1 什么是位段 2.2 位段的内存分配 2.3 位段的跨平台问题 3. 枚举 …

node.js-http模块学习

目录 1.什么是 http 模块 2.进一步理解 http 模块的作用 3.用node.js创建最基本的 web 服务器 req 请求对象: res 响应对象: 解决中文乱码问题: 根据不同的url响应 不同的html页面 1.什么是 http 模块 http 模块是 Node.js 官方提供的、…

3.Nacos系列之配置管理

上文中我们学习到服务的注册&#xff0c;本文我们进行服务的调用及配置管理相关的实践 1. 服务调用实践 接着上篇文章的代码&#xff0c;我们新建模块nacos-service-consumer 在pom.xml目录下新增依赖 <dependencies><dependency><groupId>org.springfra…

Bean 作用域和生命周期 · Bean 作用域存在的问题 · Bean 六种作用域 · 执行流程 · 生命周期演示

Spring 是用来存储和读取 Bean&#xff0c;因此 Spring 中 Bean 是最核心的操作资源&#xff0c;我们需要深入学习一下 Bean 对象。 一、Bean 的作用域问题1.1 原因分析1.2 作用域定义二、Bean 的六种作用域singleton 单例作用域prototype 原型作用域request 请求作用域session…

【OpenCV学习】第16课:图像边缘提取 - Sobel算子详细剖析(图像梯度)

仅自学做笔记用,后续有错误会更改 理论 卷积的应用 - 图像边缘提取&#xff1a; 边缘是什么&#xff1a;是像素值发生跃迁的地方&#xff0c; 是图像的显著特征之一&#xff0c; 再图像特征提取丶对象检测丶模式识别等方面都有重要作用如何捕捉/提取边缘&#xff1a;对图像求…

关于LuaGC算法的演化概述

2年不用&#xff0c;就忘了&#xff0c;在这记录下。 5.0版本的双色标记清除算法 此算法中&#xff0c;每个对象会有两种标记态&#xff1a;白色和黑色&#xff1b;新创建的对象都是白色 过程&#xff1a; 1.初始化阶段&#xff1a;将root链表中的所有对象放入待检链表中&am…