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

news2025/1/12 8:37:18

介绍

假设现有外网笔记本、云服务器、内网工作站三台设备,希望使用外网笔记本通过云服务器转发,访问内网工作站;这里使用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.coloradmin.cn/o/1240586.html

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

相关文章

【开源】基于JAVA的开放实验室管理系统

项目编号: S 013 ,文末获取源码。 \color{red}{项目编号:S013,文末获取源码。} 项目编号:S013,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实…

黑马React18: ReactRouter

黑马React: ReactRouter Date: November 21, 2023 Sum: React路由基础、路由导航、导航传参、嵌套路由配置 路由快速上手 1. 什么是前端路由 一个路径 path 对应一个组件 component 当我们在浏览器中访问一个 path 的时候,path 对应的组件会在页面中进行渲染 2. …

【开源】基于JAVA的音乐偏好度推荐系统

项目编号: S 012 ,文末获取源码。 \color{red}{项目编号:S012,文末获取源码。} 项目编号:S012,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 音乐档案模块2.1…

基于爬行动物算法优化概率神经网络PNN的分类预测 - 附代码

基于爬行动物算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于爬行动物算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于爬行动物优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

SSM之Mybatis框架

1 概述 1.1 什么是Mybayis 它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低。 1.2 什么是ORM ORM(…

黑马点评笔记 redis实现缓存

文章目录 什么是缓存?为什么要使用缓存 如何使用缓存功能实现缓存模型和思路代码实现 缓存更新策略数据库缓存不一致解决方案代码实现 什么是缓存? 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码(例如: 例1:Static fi…

SpringBoot:kaptcha生成验证码

GitHub项目地址:GitHub - penggle/kaptcha: kaptcha - A kaptcha generation engine. kaptcha介绍 kaptcha官网(Google Code Archive - Long-term storage for Google Code Project Hosting.)对其介绍如下, kaptcha十分易于安装…

刚刚!OpenAI官宣!Sam Altman回归OpenAI 担任CEO

大家好我是二狗,就在刚刚! OpenAI宣布,Sam Altman将重新回到 OpenAI 担任CEO。 并组建由Bret Taylor(主席)、Larry Summers 和 Adam DAngelo 组成的新的初始董事会。 Sam Altman第一时间做了石锤回应: Sa…

office word 使用笔记

office word 使用笔记 1. 功能1.1 格式快捷键1.2 复选框 2 遇到过的问题2.1 表格标题和表格距离过大 1. 功能 1.1 格式快捷键 复制格式:ctrl shift c 粘贴格式:ctrl shift v 1.2 复选框 方框位置和类型:“插入——高级符号——字体”选…

pikachu靶场Table pikachu.member doesn’t exist:解决

背景: 第一次搭建pikachu靶场,搭建好后访问index.php后,尝试练习,发现界面显示Table pikachu.member doesn t exist,后来找了很多教程,没有解决,后来发现是自己没有进行初始化,给大家…

【JDK源码阅读】什么是 avoid getfield opcode ?

说明:JDK源码版本为 Oracle JDK 8 1. 背景 阅读 java.lang.String 的源码,会发现有些地方注释为/* avoid getfield opcode */,此处的代码是将当前类定义的成员变量引用为本地变量,从字面意思理解,是为了避免使用 get…

千云物流 - 使用k8s负载均衡openelb

openelb的介绍 具体根据官方文档进行安装官方文档,这里作为测试环境的安装使用. OpenELB 是一个开源的云原生负载均衡器实现,可以在基于裸金属服务器、边缘以及虚拟化的 Kubernetes 环境中使用 LoadBalancer 类型的 Service 对外暴露服务。OpenELB 项目最初由 KubeSphere 社区…

Echarts实现散点图

效果图如下&#xff1a; <html><head><meta charsetutf-8><link rel"stylesheet" href"js/leaflet1.7.1/dist/leaflet.css"/><script src"js/leaflet1.7.1/dist/leaflet.js"></script><script src"…

【C++入门到精通】 Lambda表达式 C++11 [ C++入门 ]

阅读导航 引言一、C98中的一个例子二、Lambda表达式1. Lambda表达式语法&#xff08;1&#xff09;Lambda表达式各部分说明&#xff08;2&#xff09;捕获列表说明 三、Lambda表达式的底层原理温馨提示 引言 当今软件开发行业的快速发展和日益复杂的需求&#xff0c;要求程序员…

新能源车将突破2000万辆,汉威科技为电池安全保驾护航

近年来&#xff0c;我国新能源汽车销量持续突破新高。据中汽协数据&#xff0c;1~10月&#xff0c;国内新能源汽车销量达728万辆&#xff0c;同比增长37.8%&#xff0c;市场占有率达到30.4%。随着第四季度车市传统旺季的到来&#xff0c;新能源消费需求将进一步释放&#xff0c…

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

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

图神经网络与图注意力网络

随着计算机行业和互联网时代的不断发展与进步&#xff0c;图神经网络已经成为人工智能和大数据的重要研究领域。图神经网络是对相邻节点间信息的传播和聚合的重要技术&#xff0c;可以有效地将深度学习的理念应用于非欧几里德空间的数据上。本期推送围绕图神经网络与图注意力网…

老生常谈之 JavaScript 中 0.1 + 0.2 != 0.3 的原因

先来一个模棱两可的说法&#xff1a;因为精度丢失、存储溢出的问题 先复习一下二进制的转换方法&#xff1a; 整数&#xff1a;除以基数&#xff0c;取余&#xff0c;自底向上小数&#xff1a;乘以基数&#xff0c;取整&#xff0c;自顶向下 接着&#xff0c;复习一下双精度…

QTableWidget——编辑单元格

文章目录 前言熟悉QTableWiget&#xff0c;通过实现单元格的合并、拆分、通过编辑界面实现表格内容及属性的配置、实现表格的粘贴复制功能熟悉QTableWiget的属性 一、[单元格的合并、拆分](https://blog.csdn.net/qq_15672897/article/details/134476530?spm1001.2014.3001.55…

ios qt开发要点

目前关于ios qt的开发资料比较少&#xff0c;这里整理了几个比较重要的开发要点&#xff0c;基于MacOS14 Xcode15 Qt15.5 cmake iphone真机。 cmake报错&#xff0c;报错信息如下 CMake Error at /Users/user/Qt/5.15.5/ios/lib/cmake/Qt5Core/Qt5CoreConfig.cmake:91 (m…