Linux学习20 使用FRP进行内网穿透实现远程访问

Linux学习20 使用FRP进行内网穿透实现远程访问

  • 一、FRP简介
    • 1. 简介
    • 2. 准备环境
    • 3. toml文件
    • 4. toml文件语法
      • (1)表(Table)
      • (2)键值对
      • (3)数组
      • (4)布尔值
      • (5)数值
      • (6)日期和时间
      • (7)注释
  • 二、安装和配置FRP
    • 1. 下载
    • 2. 配置远程登陆SSH服务
      • (1)Server端配置
        • i. 配置文件: frps.toml
        • ii. 配置服务
        • iii. 启动和开机启动
      • (2)Clinet 配置
        • i. 配置文件 frpc.toml
        • ii. 配置服务
      • (3)实现远程访问
    • 3. 在外网访问内网 Web 服务
      • (1)修改 frps.toml
      • (2)配置frpc.toml
    • 4. 配置简单 http 文件服务
      • 修改 frpc.toml
  • 三、web控制台
    • 服务端配置:
    • 客户端配置

在这里插入图片描述

在网络架构中,有时候需要远程访问位于内网的设备或服务,但由于网络拓扑或安全限制,直接从外部访问内网设备可能会受到限制。FRP(Fast Reverse Proxy)是一款开源的内网穿透工具,通过建立反向代理通道,使得内网服务可以通过公网访问。本文将介绍如何使用FRP进行内网穿透,实现远程访问内网设备的目的。

一、FRP简介

1. 简介

Fast Reverse Proxy(FRP) 是一款由fatedier开发的高性能的反向代理工具,用于穿透防火墙、NAT等网络障碍,将内网服务映射到公网上。FRP支持TCP、UDP、HTTP等多种协议,操作简单,适用于各种场景。

开源地址: https://github.com/fatedier/frp

FRP的架构:
在这里插入图片描述

2. 准备环境

两台Ubuntu系统:

  • Server:位于公网
  • Client: 位于内网

3. toml文件

frp新版本使用toml格式作为配置文件。

TOML(Tom’s Obvious Minimal Language)是一种用于配置文件的轻量级数据格式,设计得易读、易写。TOML 的目标是成为一种容易理解和编写的配置文件格式,同时保持足够的表达能力。

TOML 特点:

  1. 易读性: TOML 文件的语法设计旨在保持简洁、直观且易读。它使用了明显的层次结构,不依赖于标点符号过于复杂的语法。

  2. 最小化: TOML 遵循最小化的设计原则,尽量减少冗余和复杂性,使得配置文件的编写和阅读变得更加简单。

  3. 易于集成: TOML 被设计为易于机器处理,便于在不同的编程语言中解析和生成。因此,许多编程语言都提供了 TOML 的解析器和生成器。

  4. 扩展性: TOML 具有一定的扩展性,允许在语法中添加一些自定义的元素以适应特定的应用场景。

TOML 的文件以 .toml 扩展名结尾,其中包含了键值对、表(Table)、数组等元素。下面是一个简单的 TOML 示例:

[owner]
name = "Tom"
dob = 1985-05-27T07:32:00Z[database]
server = "localhost"
ports = [8000, 8001, 8002]
connection_max = 5000
enabled = true

4. toml文件语法

TOML(Tom’s Obvious Minimal Language)有一套简洁而直观的规则,用于定义配置文件。以下是 TOML 的主要规则:

(1)表(Table)

  • 表的定义: 使用 [ ] 包裹表名,例如 [owner] 表示一个名为 “owner” 的表。
  • 嵌套表: 表可以嵌套,形成层次结构,例如 [owner.address] 表示 “owner” 表下的 “address” 子表。

(2)键值对

  • 键值对的定义: 使用 key = value 的形式定义键值对。
  • 字符串: 字符串可以用双引号 "" 或单引号 '' 括起来,例如 name = "Tom"name = 'Tom'
  • 多行字符串: 使用三个双引号 """ 或三个单引号 ''' 来定义多行字符串。

(3)数组

  • 数组的定义: 使用方括号 [] 包裹,例如 ports = [8000, 8001, 8002]
  • 不同类型的数组元素: 数组中的元素可以是不同类型的值。

(4)布尔值

  • 布尔值: 使用 truefalse 表示布尔值。

(5)数值

  • 整数和浮点数: TOML 支持整数和浮点数,例如 age = 30pi = 3.14

(6)日期和时间

  • 日期和时间: TOML 支持日期和时间的表示,例如 dob = 1985-05-27T07:32:00Z

(7)注释

  • 注释: 使用 # 进行单行注释,例如 # This is a comment

在 frp 的配置里,[]表放的是通用设置,[[proxies]]数组用于定义代理。 允许设置多个代理。

二、安装和配置FRP

1. 下载

从 https://github.com/fatedier/frp/releases 可以下载到对应操作系统的编译版本。
下载后解压缩即可。
本示例程序安装位置:
/opt/frp_0.53.0_linux_amd64/

2. 配置远程登陆SSH服务

(1)Server端配置

i. 配置文件: frps.toml

vim /opt/frp_0.53.0_linux_amd64/frps.toml

bindPort = 7000 # Server的绑定端口
webServer.addr = "0.0.0.0" # 0.0.0.0绑定所有网卡
webServer.port = Server的WEB服务端口
# dashboard's username and password are both optional
webServer.user = "Cient登陆账号"
webServer.password = "Client登陆密码"
transport.useEncryption = true
transport.useCompression = true
ii. 配置服务

sudo vim /etc/systemd/system/frps.service

[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,路径要匹配
ExecStart = /opt/frp_0.53.0_linux_amd64/frps -c /opt/frp_0.53.0_linux_amd64/frps.toml
[Install]
WantedBy = multi-user.target
iii. 启动和开机启动
# 启动frp
systemctl start frps
# 配置frps开机自启
systemctl enable frps

(2)Clinet 配置

vim /opt/frp_0.53.0_linux_amd64/frpc.toml

i. 配置文件 frpc.toml
serverAddr = "Server地址"
serverPort = 7000 	# server的bindPort
[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000 	# frpc在client上的端口
ii. 配置服务

sudo vim /etc/systemd/system/frpc.service

[Unit]
# 服务名称,可自定义
Description = frp client
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,路径要匹配
ExecStart = /opt/frp_0.53.0_linux_amd64/frpc -c /opt/frp_0.53.0_linux_amd64/frpc.toml
[Install]
WantedBy = multi-user.target

(3)实现远程访问

ssh -oPort=6000 Client登陆账号@Server地址

3. 在外网访问内网 Web 服务

(1)修改 frps.toml

bindPort = 7000
vhostHTTPPort = 8080
vhostHTTPSPort = 8090 # 如果需要配置https proxy就设置这个

(2)配置frpc.toml

# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000[[proxies]]
name = "web"
type = "http"
localPort = 80
customDomains = ["www.example.com"]

www.example.com 域名需要配置 CNAME 记录指向 ServerIP。

4. 配置简单 http 文件服务

简单http文件服务可以直接提供静态文件访问。

修改 frpc.toml

# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000[[proxies]]
name = "test_static_file"
type = "tcp"
remotePort = 6000
[proxies.plugin]
type = "static_file"
localPath = "/tmp/files"
stripPrefix = "static"
httpUser = "abc"
httpPassword = "abc"

frp还可以配置私有服务、P2P服务等,这里不再详细介绍。

三、web控制台

服务端配置:

webServer.port = 7500
# dashboard's username and password are both optional
webServer.user = "admin"
webServer.password = "admin"
webServer.tls.certFile = "server.crt"
webServer.tls.keyFile = "server.key"

访问网页 https://[serverAddr]:7500 可以看到如下控制台。
在这里插入图片描述

客户端配置

webServer.addr = "127.0.0.1"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"

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

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

相关文章

高等数学:无穷小/大、极限运算/存在法则、连续性/间断点

参考课程:【建议收藏】同济七版《高等数学》精讲视频 | 期末考试 | 考研零基础 | 高数小白_哔哩哔哩_bilibili 仅供本人学习之用 无穷小 无穷小不是指趋近于负无穷,而是趋近于0 比如 这里x-2就叫做x趋近于2时的无穷小;1/x就叫做x趋近于无穷时…

代码随想录Day35 | 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

代码随想录Day35 | 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球 860.柠檬水找零406.根据身高重建队列vector与list 452.用最少数量的箭引爆气球 860.柠檬水找零 文档讲解:代码随想录 视频讲解: 贪心算法,看上去复杂&am…

20240130在ubuntu20.04.6下给GTX1080安装最新的驱动和CUDA

20240130在ubuntu20.04.6下给GTX1080安装最新的驱动和CUDA 2024/1/30 12:27 缘起,为了在ubuntu20.4.6下使用whisper,以前用的是GTX1080M,装了535的驱动。 现在在PDD拼多多上了入手了一张二手的GTX1080,需要将安装最新的545的驱动程…

怎么控制Element的数据树形表格展开所有行;递归操作,打造万能数据表格折叠。

HTML <el-button type"success" size"small" click"expandStatusFun"> <span v-show"expandStatusfalse"><i class"el-icon-folder-opened"></i>展开全部</span><span v-show"expan…

为什么需要 SSL 证书?

网站需要 SSL 证书来确保用户数据的安全&#xff0c;验证网站的所有权&#xff0c;防止攻击者创建虚假网站版本&#xff0c;以及将信任传达给用户。 如果网站要求用户登录、输入个人详细信息&#xff08;例如其信用卡号&#xff09;或查看机密信息&#xff08;例如&#xff0c…

C++入门(一)— 使用VScode开发简介

文章目录 C 介绍C 擅长领域C 程序是如何开发编译器、链接器和库编译预处理编译阶段汇编阶段链接阶段 安装集成开发环境 &#xff08;IDE&#xff09;配置编译器&#xff1a;构建配置配置编译器&#xff1a;编译器扩展配置编译器&#xff1a;警告和错误级别配置编译器&#xff1…

Ubuntu 20.04 Server 使用命令行设置 IP 地址

1、编辑 /etc/netplan/ 目录下的配置文件00-installer-config.yaml (修改之前&#xff0c;把原来的文件备份) 按照对应的配置进行修改IP地址和网关 2、运行命令使其生效 sudo netplan apply 修改完成后&#xff0c;永久有效。重启后配置不会丢失

关于bypassuac的探究——基础知识

用户帐户控制(User Account Control)是Windows Vista&#xff08;及更高版本操作系统&#xff09;中一组新的基础结构技术&#xff0c;可以帮助阻止恶意程序&#xff08;有时也称为“恶意软件”&#xff09;损坏系统&#xff0c;同时也可以帮助组织部署更易于管理的平台。 使用…

【网站项目】基于SSM的204面向工程教育专业认证的毕业生跟踪调查反馈系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

PyTorch的nn.Module类的详细介绍

在PyTorch中&#xff0c;nn.Module 类是构建神经网络模型的基础类&#xff0c;所有自定义的层、模块或整个神经网络架构都需要继承自这个类。nn.Module 类提供了一系列属性和方法用于管理网络的结构和训练过程中的计算。 1. PyTorch中nn.Module基类的定义 在PyTorch中&#xff…

谷达冠楠:抖音开店卖什么退货率低

在抖音开设电商店铺&#xff0c;选择合适的商品对于降低退货率至关重要。商品的质量和满足消费者需求是保证低退货率的关键因素。例如&#xff0c;日常必需品如个人护理用品、家居清洁工具等因其使用频率高和需求稳定&#xff0c;通常拥有较低的退货率。另外&#xff0c;独特性…

HiveSQL题——窗口函数(lag/lead)

目录 一、窗口函数的知识点 1.1 窗户函数的定义 1.2 窗户函数的语法 1.3 窗口函数分类 1.4 前后函数:lag/lead 二、实际案例 2.1 股票的波峰波谷 0 问题描述 1 数据准备 2 数据分析 3 小结 2.2 前后列转换&#xff08;面试题&#xff09; 0 问题描述 1 数据准备 …

JavaWeb中的Filter(过滤器)和 Listener(监听器)

提示&#xff1a;这两个东西听起来似乎很难&#xff0c;实际上是非常简单的&#xff0c;按照要求写就行了&#xff0c;一定不要被新名词给吓到了。 JavaWeb中的Filter&#xff08;过滤器&#xff09; 一、Filter&#xff08;过滤器&#xff09;1.如何编写 Filter2.Filter 中的细…

1002. HarmonyOS 开发问题:鸿蒙 OS 技术特性是什么?

1002. HarmonyOS 开发问题&#xff1a;鸿蒙 OS 技术特性是什么? 硬件互助&#xff0c;资源共享 分布式软总线 分布式软总线是多种终端设备的统一基座&#xff0c;为设备之间的互联互通提供了统一的分布式通信能力&#xff0c;能够快速发现并连接设备&#xff0c;高效地分发…

方案:将vue项目放在SpringMVC中,并用tomcat访问

需要先将项目生成一次war包才能访问项目的webapp文件夹下的资源&#xff0c;否则tomcat的webapp文件夹下面不会生成对应资源文件夹就无法访问。 问题&#xff1a;目录如下&#xff1a; 今天我测试了一下将vue打包后&#xff0c;放入webapp下面访问&#xff0c;却发现vue项目无…

关于Spring Boot和MyBatis常见的十道面试题

拦截器和过滤器有什么区别&#xff1f; 拦截器&#xff08;Interceptor&#xff09;和过滤器&#xff08;Filter&#xff09;都是用于在请求道道目标资源的之前或之后进行处理的组件。主要区别有以下几点&#xff1a; 依赖对象不同&#xff1a;过滤器是来时Servlet&#xff0…

备战蓝桥杯--数据结构及STL应用(基础)

今天轻松一点&#xff0c;讲一讲stl的基本操作吧&#xff01; 首先&#xff0c;让我们一起创建一个vector容器吧&#xff01; #include<bits/stdc.h> using namespace std; struct cocoack{ int coco,ck; } void solve(){vector<cocoack> x;for(int i0;i<5;i){…

私有化部署pdf工具箱

功能简介 用于合并/拆分/旋转/移动PDF及其页面的完全交互式GUI。 将多个 PDF 合并到一个生成的文件中。 将 PDF 拆分为多个文件&#xff0c;并按指定的页码或将所有页面提取为单个文件。 将 PDF 页面重新组织为不同的顺序。 以 90 度为增量旋转 PDF。 删除页面。 多页布局…

《HTML 简易速速上手小册》第7章:HTML 多媒体与嵌入内容(2024 最新版)

文章目录 7.1 在HTML中嵌入视频和音频7.1.1 基础知识7.1.2 案例 1&#xff1a;嵌入视频文件7.1.3 案例 2&#xff1a;嵌入音频文件7.1.4 案例 3&#xff1a;创建一个视频和音频混合的播放列表 7.2 使用 <iframe> 嵌入外部内容7.2.1 基础知识7.2.2 案例 1&#xff1a;嵌入…

超越传统—Clean架构打造现代Android架构指南

超越传统—Clean架构打造现代Android架构指南 1. 引言 在过去几年里&#xff0c;Android应用开发经历了巨大的变革和发展。随着移动设备的普及和用户对应用的期望不断提高&#xff0c;开发人员面临着更多的挑战和需求。传统的Android架构在应对这些挑战和需求时显得有些力不从…