frp内网穿透配置以及相关端口、过程解释

介绍

假设现有外网笔记本、云服务器、内网工作站三台设备,希望使用外网笔记本通过云服务器转发,访问内网工作站;这里使用frp进行内网穿透。

云服务器端配置

  • 登录腾讯轻量型云服务器控制台,开放转发端口bind_port以及deshboad端口,其中deshboad端口用来测试,可以不写。

在这里插入图片描述

  • 测试与公网服务器ssh链接

    假设公网云服务器ip地址为xx.xxx.xxx.xxx,那么在外网笔记本的终端中,执行

    ssh ubuntu@xx.xxx.xxx.xxx
    
  • 公网服务器端安装frp程序包

    ssh进入云服务器中之后,执行

    wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.37.1_linux_amd64.tar.gz
    tar -zxvf frp_0.37.1_linux_amd64.tar.gz
    cp -r frp_0.37.1_linux_amd64 frp
    
  • 查看文件

    cd frp
    tree
    

    frp文件夹中,他们的文件结构是

    .                                     
    ├── frpc              
    ├── frpc_full.ini      
    ├── frpc.ini           
    ├── frps        #云服务器中使用
    ├── frps_full.ini         
    ├── frps.ini    #云服务器中使用  
    ├── LICENSE                      
    ├── nohup.out                  
    └── systemd          ├── frpc.service     ├── frpc@.service    ├── frps.service          └── frps@.service          
    1 directory, 12 files 
    
  • 修改frps.ini文件

    vim frps.ini
    

    修改为如下内容,注意,其中的端口6871,6289都是提前已经在防火墙中自定义好了的

    [common]
    # 云服务器仪表盘端口的用户
    dashboard_user = xxx
    # 云服务器仪表盘端口的密码
    dashboard_pwd = xxxxx
    dashboard_port = 6289
    # 云服务器和内网工作站之间的连接建立端口
    bind_port = 6000
    # 通讯口令,写复杂一些
    token = xxxxxx
    
  • 移动到系统文件夹下

    cd ..
    sudo mv frp  /usr/local/
    
  • 设置开机启动云服务器frps服务

    sudo vim /etc/init.d/frps_start.sh
    

    写入

    #!/bin/bash
    ### BEGIN INIT INFO
    # Provides:          tuzixini
    # Required-Start:    $local_fs $network
    # Required-Stop:     $local_fs
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: self define auto start
    # Description:       self define auto start
    ### END INIT INFO
    sudo nohup /usr/local/frp/frps -c /usr/local/frp/frps.ini &
    

    赋予权限

    sudo chmod 755 /etc/init.d/frps_start.sh
    

    设置自启动

    cd /etc/init.d
    sudo update-rc.d frps_start.sh defaults 90
    
  • 启动服务: 重启云服务器,或者执行以下指令

    **需要注意的是,**如果重启之后,云服务器的frp服务没有打开,就会导致个人工作站的frp服务启动失败,因此保证在启动内网工作站的时候,云服务器的frp一定要是打开的。

    cd /usr/local/frp
    sudo nohup ./frps -c frps.ini &
    
  • 查看服务,或者停止服务(optional)

    # 查看服务
    systemctl status frp
    # 或者以下,可以查看到刚才的任务的进程id,假设为32567
    ps -aux | grep frps
    # 杀掉进程
    kill -9 32567   
    
  • 测试

    在笔记本电脑中,打开浏览器输入你的公网ip:6289 输入账户密码,如果看到仪表盘就说明服务启动成功了

内网工作站配置

直接打开命令终端,或者你自己ssh进去,

  • 同样下载安装frp

    wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.37.1_linux_amd64.tar.gz
    tar -zxvf frp_0.37.1_linux_amd64.tar.gz
    cp -r frp_0.37.1_linux_amd64 frp
    
  • 修改frpc.ini文件

    [common]
    # 你的云服务器公网ip
    server_addr = xx.xxx.xxx.xxx
    # 云服务器端与工作站建立连接的端口,与bind_port一致
    server_port = 6000
    # 通信口令,与frps.ini文件中定义的一致
    token = xxxxxx[ssh]   
    type = tcp
    # 内网工作站在局域网中的ip,填写127.0.0.1就行,不用管具体的值
    local_ip = 127.0.0.1
    # 设置内网工作站 要监听ssh的端口
    local_port = 22
    # 云服务器监听外部访问的端口,即转发端口
    remote_port = 7000
    
  • 移动到系统文件夹下

    cd ..
    sudo mv frp  /usr/local/
    
  • 设置开机启动内网工作站frpc

    sudo vim /etc/init.d/frpc_start.sh
    

    写入

    #!/bin/bash
    ### BEGIN INIT INFO
    # Provides:          tuzixini
    # Required-Start:    $local_fs $network
    # Required-Stop:     $local_fs
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: self define auto start
    # Description:       self define auto start
    ### END INIT INFO
    sudo nohup /usr/local/frp/frpc -c /usr/local/frp/frpc.ini &
    

    赋予权限

    sudo chmod 755 /etc/init.d/frpc_start.sh
    

    设置自启动

    cd /etc/init.d
    sudo update-rc.d frpc_start.sh defaults 90
    
  • 重启内网工作站,或者执行以下指令启动服务

    **需要注意的是,**如果重启之后,云服务器的frp没有打开,就会导致个人工作站的frp服务启动失败,因此保证在启动内网工作站的时候,云服务器的frp一定要是打开的。

    cd /usr/local/frp
    sudo nohup ./frpc -c frpc.ini &
    
  • 查看服务,或者停止服务(optional)

    # 查看服务
    systemctl status frp
    # 或者以下,可以查看到刚才的任务的进程id,假设为32567
    ps -aux | grep frpc
    # 杀掉进程
    kill -9 32567   
    

第二个内网工作站

云服务器端

和第一个工作站配置相似,只是它的frps.ini中的bind_port和第一个工作站不相同,需要在云服务器上面手动开放对应的端口号

  • 重新创建一个新的frps.ini文件,假设为frps1.ini,里面写上新的口,再使用frps运行它

    # 随便设置一个不同的端口
    bind_port = 1212
    # 通信口令,可以跟第一个内网工作站不同,但是要和自己的相同
    token = XXXXXXX
    

内网工作站端

和第一个工作站配置相似,只是它的frpc.ini中的server_portremote_port都和第一个工作站不相同,需要在云服务器上面手动开放对应的端口号

  • 重新创建一个新的frpc.ini文件,假设为frpc1.ini,里面写上新的口,再使用frpc运行它

    # 随便设置一个不同的端口(需要提前在云服务器上手动开放)
    server_port = 1212
    # 通信口令,可以跟第一个内网工作站不同,但是要和自己的相同
    token = XXXXXXX[ssh]   
    type = tcp
    # 内网工作站在局域网中的ip,填写127.0.0.1就行,不用管具体的值
    local_ip = 127.0.0.1
    # 设置内网工作站frp要监听的端口
    local_port = 22
    # 不同的转发端口,同样需要提前在云服务器上手动开放
    remote_port = 5101
    
  • 自动启动方式,和第一个内网工作站相同。

使用

  • 在外网笔记本的终端中,输入

    ssh -p [转发端口][用户名]@[ip]
    

    其中,用户名是想要访问的内网工作站的对应账户名称,ip是云服务器公网ip;输入的密码也是内网工作站的密码,转发端口是上面提到的remote_port

内部基本流程和解释

基本概念

外网笔记本、云服务器、内网工作站,在frp穿透方法中,需要在云服务器和内网工作站上进行部署;在frp穿透方法中,将会在云服务器上部署frps(frp服务端),内网工作站上部署frpc(frp客户端);其中涉及到几个概念:

  • bind_port:定义在frps的配置文件中,用于指定云服务器上的一个端口,该端口用于监听内网工作站与该端口的连接请求,内网工作站会通过云服务器公网ip地址,向云服务器该端口发送连接请求,通过该端口发送token后建立与云服务器的连接。 (但是云服务端并不通过这个口向内网工作站转发外部数据)
  • server_port: 定义在frpc的配置文件中,用处是,告诉内网工作站:“应该向云服务器的哪个端口发送建立连接请求?” 本质上和bind_port相同,都指的是云服务器上的一个端口,只是定义位置不同。
  • remote_port: 定义在frpc的配置文件中,用于指定云服务器上的一个端口(即转发端口),假设remote_port=7000,它的作用是,在内网工作站和云服务器建立和保持连接之后,内网工作站根据自己配置文件中指定的remote_port=7000 告诉云服务器:“我要听传输到你7000端口的数据,请把你7000端口接收到的数据转发给我”,为什么定义到frpc配置中?
  • local_port:定义在frpc的配置文件中,假设local_port=22,它用于告诉云服务器:“你把7000端口接收的数据转发给我的22端口,我在那里听着”。
    在这里插入图片描述

基本流程

在云服务器上预先开放两个端口,一个7000端口作为bind_port,以及另一个6000端口作为接受外网访问的转发端口。

  1. 内网工作站通过frpc配置中的server_port和云服务器ip,通过一个随机端口发送token和连接请求;
  2. 建立连接后,内网工作站根据frpc配置中的remote_port=6000指向云服务器中已经开放的6000端口,告诉云服务器请求将该6000端口数据转发给自己的local_port端口;
  3. 云服务器随即监听请求中的6000端口接收到的数据,并通过自己的随机端口,将接收到的外部访问数据转发给内网工作站frpc配置中定义的local_port端口。
  4. 内网工作站根据转发的数据,判断是否通过ssh密码验证,是否建立ssh通讯。

注意点

  • 建立连接后,云服务器,一律将访问remote_port的ssh类型数据转发到内网工作站local_port端口上;内网工作站local_port不管,也不知道是云服务器上到底哪个port跟自己通讯的,甚至不知道是从云服务器上过来的数据,还是同一个内网的访问数据,local_port 只是接收请求,但是能不能进一步建立ssh连接还需要进行密码验证。
  • bind_port 端口和remote_port端口的设定不用担心安全问题;bind_port 端口的通讯建立需要通过frpc以及frps配置文件中的token相互匹配验证。云服务器remote_port端口本身就是要暴露在外部接收外部访问的,它只是转发remote_port端口的接受数据,与内网工作站的ssh建立需要通过内网工作站自身的账户密码验证。
  • 通过内网穿透的方式,实现了将自己内网工作站的账户暴露在公网中,此时知道公网ip、转发端口的人,都可以使用常见的“用户名+密码”组合尝试登录你的内网工作站,因此自己内网工作站的密码需要非常复杂,否则可能会被外部暴力尝试攻破。

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

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

相关文章

opencv-图像轮廓

轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。 • 为了更加准确,要使用二值化图像。在寻找轮廓之前,要进行阈值化处理或者 Canny 边界检…

php文件上传例子

目录结构&#xff1a; index.html代码&#xff1a; <!DOCTYPE html> <html><head><title>文件上传</title><meta charset"utf-8"></head><body><form action"./up.php" method"post" encty…

安防视频EasyCVR平台太阳能供电+4G摄像头视频监控方案的建设

在工地、光伏、风电站、水库河道等场景中&#xff0c;以及一些偏远地区的项目现场&#xff0c;会存在无网无电情况&#xff0c;大大制约了视频监控系统建设的效率及可行性。在这种场景中&#xff0c;我们也可以通过太阳能供电4G监控摄像机的方案&#xff0c;满足偏远地区无网无…

【bug 回顾】上传图片超时

测试 bug 问题分析 - 上传图片超时 最近在测试上遇到一个莫名奇妙的问题&#xff0c;最后也没有得到具体是哪块的原因&#xff0c;看各位大佬有没有思路&#xff1f;&#xff1f; 一 、背景 现在我们有三台服务器&#xff0c;用来布两套环境。其中另外一台服务器3配置的 tom…

JVM中判断对象是否需要回收的方法

在堆里面存放着Java 世界中几乎所有的对象实例&#xff0c;垃圾收集器在对堆进行回收前&#xff0c;第一件事情就是要确定这些对象之中哪些还“ 存活 ” 着&#xff0c;哪些已经 “ 死去 ”。 引用计数算法 引用计数法是一种内存管理技术&#xff0c;它是通过对每个对象进行引用…

likeshop单商户商城系统 任意文件上传漏洞复现

0x01 产品简介 likeshop单商户标准商城系统适用于B2C、单商户、自营商城场景。完美契合私域流量变现闭环交易使用。 系统拥有丰富的营销玩法&#xff0c;强大的分销能力&#xff0c;支持电子面单和小程序直播等功能。无论运营还是二开都是性价比极高的100%开源商城系统。 0x02…

java--飞翔的小鸟

游戏玩法&#xff1a;通过鼠标点击使小鸟上下移动穿过柱子并完成得分&#xff0c;小鸟碰到柱子或掉落到地面上都会结束游戏。 游戏内图片 Brid类&#xff1a; package bird;import org.omg.CORBA.IMP_LIMIT;import javax.imageio.ImageIO; import java.awt.image.BufferedIma…

Eclipse常用设置-乱码

在用Eclipse进行Java代码开发时&#xff0c;经常会遇到一些问题&#xff0c;记录下来&#xff0c;方便查看。 一、properties文件乱码 常用的配置文件properties里中文的乱码&#xff0c;不利于识别。 处理流程&#xff1a;Window -> Preferences -> General -> Ja…

golang学习笔记——罗马数字转换器

文章目录 罗马数字转换器代码 参考LeetCode 罗马数字转整数代码 罗马数字转换器 编写一个程序来转换罗马数字&#xff08;例如将 MCLX 转换成 1,160&#xff09;。 使用映射加载要用于将字符串字符转换为数字的基本罗马数字。 例如&#xff0c;M 将是映射中的键&#xff0c;其值…

c++学习之哈希

目录 1.关于unordered系列关联式容器 2.关于unordered_map 3.哈希&#xff08;散列&#xff09;表的实现 一&#xff0c;直接定址法 二&#xff0c;除留余数法 方法一&#xff1a;闭散列&#xff1a;开放定址法 方法二&#xff1a;闭散列&#xff1a;哈希桶/拉链法 4.哈希…

机器学习/sklearn 笔记:K-means,kmeans++

1 K-means介绍 1.0 方法介绍 KMeans算法通过尝试将样本分成n个方差相等的组来聚类&#xff0c;该算法要求指定群集的数量。它适用于大量样本&#xff0c;并已在许多不同领域的广泛应用领域中使用。KMeans算法将一组样本分成不相交的簇&#xff0c;每个簇由簇中样本的平均值描…

hadoop shell操作 hdfs处理文件命令 hdfs上传命令 hadoop fs -put命令hadoop fs相关命令 hadoop(十三)

hadoop fs -help rm 查看rm命令作用 hadoop fs 查看命令 1. 创建文件夹&#xff1a; # hdfs前缀也是可以的。更推荐hadoop hadoop fs -mkdir /sanguo 2.上传至hdfs命令&#xff1a; 作用&#xff1a; 从本地上传hdfs系统 &#xff08;本地文件被剪切走&#xff0c;不存在了&…

模拟量采集----测量输入的电流

生活中的模拟量有很多 大多都为电压信号和电流信号 今天讲如何测量输入的电流信号 通过欧姆定律可知 电流测量的测量&#xff1a;是将电流加载在固定阻值的电阻上&#xff0c;来测量这个电阻二端的电压 最后反算出电流的大小 所用的公式是IU/R 我们使用仿真软件来看测量…

Visual Studio(VS) C++程序LNK2005错误,提示“error LNK2005: _XXX已经在xxx.obj中定义”解决方案

1.问题如图 2.出现原因 项目中有多个源文件或头文件&#xff0c;include后导致有些变量重复定义&#xff0c;加上Visual Studio新版版要求更严格 3.解决办法 查询到的解决办法很多不好用&#xff0c;此处记录解决自己问题的一个办法&#xff1a;直接让编译器忽略第二次定义的…

图形数据库的实战应用:如何在 Neo4j 中有效管理复杂关系

关系数据库管理系统( RDBMS ) 代表了最先进的技术&#xff0c;这在一定程度上要归功于其由周边技术、工具和广泛的专业技能组成的完善的生态系统。 在这个涵盖信息技术(IT) 和运营技术(OT) 的技术革命时代&#xff0c;人们普遍认识到性能方面出现了重大挑战&#xff0c;特别是…

初识JVM(简单易懂),解开JVM神秘的面纱

目录 一、什么是JVM&#xff08;Java虚拟机&#xff09;&#xff1f; 二、JVM的功能 三、JVM的功能-即时编译 四、常见的JVM 五、JVM的组成 五、JVM的工作流程 参考资料 一、什么是JVM&#xff08;Java虚拟机&#xff09;&#xff1f; 在Java的世界里&#xff0c;Java虚…

代码文档浏览器 Dash mac中文版软件特色

Dash mac是一个基于 Python 的 web 应用程序框架&#xff0c;它可以帮助开发者快速构建数据可视化应用。Dash 的工作原理是将 Python 代码转换成 HTML、CSS 和 JavaScript&#xff0c;从而在浏览器中呈现交互式的数据可视化界面。Dash 提供了一系列组件&#xff0c;包括图表、表…

如何将设置为静态IP的VMware虚拟机进行克隆以便可以复刻相应的环境

一定要关闭需要克隆的虚拟机右键要选择克隆的虚拟机&#xff0c;选择管理->克隆&#xff0c;进入克隆虚拟机向导 设定克隆出来的虚拟机名称以及位置&#xff0c;选择完成 克隆完成之后将会生成虚拟机&#xff0c;示例中生成的虚拟机为ubuntu-dev2 因为原本的虚拟机为静态ip的…

区域人员超限AI算法的介绍及TSINGSEE视频智能分析技术的行业应用

视频AI智能分析已经渗透到人类生活及社会发展的各个方面。从生活中的人脸识别、停车场的车牌识别、工厂园区的翻越围栏识别、入侵识别、工地的安全帽识别、车间流水线产品的品质缺陷AI检测等&#xff0c;AI智能分析技术无处不在。在某些场景中&#xff0c;重点区域的人数统计与…

Java集合拓展01

1、List&#xff0c;Set&#xff0c;Map三者的区别 List&#xff1a;一个有序&#xff08;元素存入集合的顺序和取出的顺序一致&#xff09;容器&#xff0c;元素可以重复&#xff0c;可以插入多个null元素&#xff0c;元素都有索引。常用的实现类有 ArrayList、LinkedList 和…