FRP 内网穿透 | 实现远程访问与安全管理

唠唠闲话

内网穿透简介

在互联网上,两个不同主机进行通信需要知道对方的 IP 地址。由于世界人口和设备众多,IPv4 资源相对紧缺,因此绝大部分情况下是通过路由器或交换机转换公网 IP 后才上网

位于路由器或交换机后的设备通常是内网设备,其 IP 地址通常以 192.168、172.16 或 10.0 开头,这些属于内网 IP。如果要让内网设备对外提供服务,就需要进行内网穿透。

为什么需要内网穿透?
  1. 远程访问:在家里或出差时,想要访问公司或家庭网络中的文件、应用和服务。
  2. 开发和测试:开发人员需要在本地测试服务,并希望在公网环境中进行调试和展示。
  3. 安全需求:在确保安全的前提下,将内部服务暴露到公网进行访问,而不直接暴露内网设备。
  4. 物联网设备管理:对位于内网的物联网设备进行远程监控和管理。

常见的内网穿透工具包括 Ngrok、FRP 和 ZeroTier 等,本文将介绍 FRP 的使用方法。

相关阅读
利用frp工具实现内网穿透、随时随地访问内网服务
frp 内网穿透教程
内网穿透系列:ZeroTier技术初级

FRP 是什么

FRP 是一个专注于内网穿透的高性能反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。它可以将内网服务通过具有公网 IP 的节点以安全、便捷的方式暴露到公网。

基本原理

20230618223449

如上图所示:

  • 在带有公网 IP 的云服务器上部署 FRP 的服务端 frps
  • 在需要穿透的内网服务器上部署 FRP 的客户端 frpc
  • 每个客户端都有一个配置文件用于与服务器连接
  • 公网服务器充当代理服务器,当用户访问 公网 IP + 端口号时,公网服务器上的 frps 服务会根据端口号,自动转发到对应的内网服务器上,从而实现对内网服务的访问

下边通过实践,对这些概念做更具体的理解认识。

FRP 配置及使用

本教程使用的是 v0.52.3 版本,配置文件格式为 .toml,旧版本比如 0.49.0 使用的是 .ini 格式。

下载 FRP

访问 FRP 的 发行页面,根据您的系统选择合适的版本进行下载:

20231217210538

一般情况下,Linux 系统使用的是 AMD 架构。如果不确定,可以通过输入 arch 命令查看。如果返回值是 x86_64,则说明是 AMD 架构。

使用命令行下载:

wget -c https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
tar -zxvf frp_0.52.3_linux_amd64.tar.gz && rm frp_0.52.3_linux_amd64.tar.gz

文件结构如下:

.
├── frpc
├── frpc.toml
├── frps
├── frps.toml
└── LICENSE

将服务端和客户端文件分开,以便管理:

cd frp_0.52.3_linux_amd64
mkdir client server
mv frpc* client
mv frps* server

server 文件夹放在公网服务器上,将 client 文件夹放在内网服务器上。

配置服务端

以下是一个简单的配置文件示例,参数说明见注释。完整的配置文件请参考 frps_full_example:

bindAddr = "0.0.0.0"
bindPort = 7000
# 监控流量页面
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "username"
webServer.password = "password"# 授权码
auth.method = "token"
auth.token = "yourtoken"# 去除访问限速
transport.tcpMux = false# FRP 日志配置
log.to = "/home/user/software/frp/frps.log"
log.level = "info"
log.maxDays = 3

这里有几个参数需要根据具体需求进行手动修改:

  1. bindPort:FRP 服务端监听的端口,即服务入口,建议自定义。
  2. auth.token:授权码,这个授权码也会在客户端配置中使用。
  3. webServer.port:监控流量页面的端口,建议自定义。
  4. webServer.user:监控流量页面的用户名。
  5. webServer.password:监控流量页面的密码。
  6. log.to:日志文件路径,根据需要修改。

其中,auth.token 可以通过 pwgen -s 32 1 生成,这是连接服务使用的密钥,为了安全起见,务必进行修改。

服务端自启动

server 目录上传到公网服务器,并创建 frps.service 文件:

cd /lib/systemd/system
sudo vim frps.service

内容如下:

[Unit]
Description=FRPS Service
After=network.target syslog.target
Wants=network.target[Service]
Type=simple
ExecStart=/home/user/software/frp/frps -c /home/user/software/frp/frps.toml
Restart=always
RestartSec=15s[Install]
WantedBy=multi-user.target

请根据实际路径填写 ExecStart 中 FRPS 的可执行文件路径和配置文件路径。

编写完成后,执行以下命令以启用和启动服务:

sudo systemctl enable frps
sudo systemctl start frps

如果之后更改了配置文件,执行以下命令重启服务:

sudo systemctl daemon-reload
sudo systemctl restart frps

通常,可以通过以下命令查看服务状态:

sudo systemctl status frps  # 查看服务状态

客户端配置

client 目录上传到内网服务器,并编辑 frpc.toml 文件,示例如下,参数见注释。

serverAddr = "公网IP地址"
serverPort = 7000# 监控流量页面
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "username"
webServer.password = "password"# 授权码
auth.method = "token"
auth.token = "yourtoken"# 设置心跳
auth.additionalScopes = ["HeartBeats"]# 去除访问限速
transport.tcpMux = false# FRP 日志配置
log.to = "/home/user/software/frp/frpc.log"
log.level = "info"
log.maxDays = 3

其中 serverAddr 为公网服务器的 IP 地址,其他内容与服务端配置文件保持一致。如果需要添加服务(如 SSH 穿透),在 frpc.toml 中添加相应的 proxies 字段,例如:

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 2222

客户端自启动

客户端自启动的配置类似于服务端,创建 frpc.service 文件:

cd /lib/systemd/system
sudo vim frpc.service

内容如下:

[Unit]
Description=FRPC Service
After=network.target syslog.target
Wants=network.target[Service]
Type=simple
ExecStart=/home/user/software/frp/frpc -c /home/user/software/frp/frpc.toml
Restart=always
RestartSec=15s[Install]
WantedBy=multi-user.target

根据实际路径填写 ExecStart 中 FRPC 的可执行文件路径和配置文件路径。

后续命令类似:

# 启用和启动服务
sudo systemctl enable frpc
sudo systemctl start frpc
# 更改配置文件后重启服务
sudo systemctl daemon-reload
sudo systemctl restart frpc
# 查看服务状态
sudo systemctl status frpc  

监控设置

默认情况下,可以通过 IP + 端口访问监控页面。如果有域名,可以在 Nginx 中添加如下配置:

server {listen 80;server_name your_domain;location / {proxy_pass http://localhost:7500;}
}

其中 your_domain 为你的域名,7500 为服务端配置文件中的 webServer.port 端口。

心跳设置

如果不设置心跳,FRP 创建的连接在长时间不活动后可能会断开,并且重新连接可能需要多次尝试才能成功。为了避免这种情况,可以在服务端设置一个定时任务,保持连接的活跃性。

在服务端输入 crontab -e,添加以下定时任务:

* * * * * curl localhost:8080 --max-time 5 >/dev/null 2>&1

该任务每分钟发送一个 curl 请求,访问服务器的 8080 端口,而该端口通过 FRP 穿透到内网服务。这样每分钟都会发送一次心跳请求,保持连接不断开。

在客户端的 frpc.toml 文件中,添加相应的 proxies 配置:

[[proxies]]
name = "heartbeat"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 8080

这样配置后,FRP 客户端将内网的 80 端口映射到公网的 8080 端口,使定时任务可以保持连接的活跃性,避免连接断开。

总结

最后做个小结。教程详细介绍了如何使用 FRP 实现内网穿透,内容包括以下几个方面:

  1. 下载与安装:如何根据系统选择合适的 FRP 版本并进行下载和安装。
  2. 配置服务端:如何编写和优化 FRP 服务端配置文件,以及在系统中设置自启动服务。
  3. 配置客户端:如何编写 FRP 客户端配置文件,添加所需的服务映射,并设置客户端自启动。
  4. 监控设置:如何通过 Nginx 配置使用域名访问 FRP 监控页面,方便管理和查看流量信息。
  5. 心跳设置:如何通过定时任务和配置文件设置,确保 FRP 连接的稳定性,避免长时间不活动导致的连接断开。

如有任何问题,欢迎参考 FRP 的官方文档或相关社区资源进行深入了解。

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

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

相关文章

Chroium 源码目录结构分析(1):源码目录体积一栏

获取源码 首先,我们拉一份最新的源代码(笔者是2024.6.6日拉取的): fetch --nohistory chromium 源码预处理 如果运行build,会生成许多生成的代码,因此我们不运行build。 然后,把干扰后续分析…

docker拉取镜像失败超时的解决方法,docker配置国内镜像源

更换国内源 创建或修改 /etc/docker/daemon.json 文件 安装docker后一般只有 /etc/docker 这个目录 下面并没有 daemon.json 文件 我们直接创建 : vim /etc/docker/daemon.json {"registry-mirrors" : ["https://registry.docker-cn.com"…

【redis】redis事务

目录 Redis事务四个命令redis事务特性redis事务执行原理 Redis 事务的使用基本使用watch 监控watch 实现原理补充 Redis事务 Redis事务是一种将多个命令打包成一个单独操作的机制,它保证了在执行这些命令期间,其他命令无法插入。 四个命令 Redis事务通…

基于Java+SpringBoot制作一个软考助手答题小程序

基于Java+SpringBoot制作一个软考小助手考试答题小程序。其中系统前端功能包括注册登录、公告通知、考试答题、视频课程、考试记录、题库、题目评论、错题统计、我的收藏和用户信息管理模块;系统后台功能包括用户管理、题库管理、答题管理、学习视频管理以及系统管理模块。 摘…

VRRP基础配置(华为)

#交换设备 VRRP基础配置 VRRP (Virtual Router Redundancy Protocol) 全称是虚拟路由规元余协议,它是一种容错协议。该协议通过把几台路由设备联合组成一台虚拟的路由设备,该虚拟路由器在本地局域网拥有唯一的一个虚拟 ID 和虚拟 IP 地址。实际上&…

线程池前置知识

并发和并行 并发是指在单核CPU上,多个线程占用不同的CPU时间片。线程在物理上还是串行执行的,但是由于每个线程占用的CPU时间片非常短(比如10ms),看起来就像是多个线程都在共同执行一样,这样的场景称作并发…

Spring对事务的支持

一、事务 事务防止进行操作时,数据库里面的数据丢失。 二、Spring事务注解方式 注解方式:在配置文件中配置事务管理器,利用注解,管理事务。 实例 银行转账:一个账户向另一个账户转账。 1)先在数据库my…

UE4/UE5像素流送云推流|程序不稳定、弱网画面糊怎么办?

看到不少反馈说像素流送技术在实际的应用中,存在一些问题,比如程序崩溃、画面模糊等。本文将探讨这些问题,并介绍点量云流软件提供了哪些有效的解决方案。 常见的像素流送技术问题 画面质量问题: 当快速操作UE模型或初次启动像素…

LVS – NAT 模式集群构建

目录 1 环境准备 1.1 准备四台服务器 1.2 IP与网关均按照下图配置 1.3 网卡配置 1.4 real server 安装 web服务 1.5 安装ipvsadm 管理工具 2 使用ipvsadm管理LVS 2.1 创建集群指定使用的算法 2.2 添加真实服务器指定工作原理 2.3 查看是否正确创建集群 2.4 开启FORWARD路由转发…

专项测试——web测试

1、web测试的总体策略 2、web测试的范围 功能性能界面安全性兼容性DB文档 2.1 功能测试 功能测试主要从链接、表单、cookie、设计语言、数据库、文件上传等方面进行。 2.1.1 链接 2.1.2 表单 2.1.3 cookie cookie是什么? 服务器发送到用户浏览器并保存在用户本…

Lecture2——最优化问题建模

一,建模 1,重要性 实际上,我们并没有得到一个数学公式——通常问题是由某个领域的专家口头描述的。能够将问题转换成数学公式非常重要。建模并不是一件容易的事:有时,我们不仅想找到一个公式,还想找到一个…

Windows搭建nacos集群

Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。 下载地址:Tags alibaba/nacos GitHub 链接:百度网盘 请输入提取码 提取码:8888 解压文件夹 目录说明&am…

Vue3中的常见组件通信之`$refs`、`$parent`

Vue3中的常见组件通信之$refs、$parent 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-mod…

webp2jpg网页在线图片格式转换源码

源码介绍 webp2jpg-免费在线图片格式转化器, 可将jpeg、jpg、png、gif、 webp、svg、ico、bmp文件转化为jpeg、png、webp、webp动画、gif文件。 无需上传文件,本地即可完成转换! 源码特点: 无需上传,使用浏览器自身进行转换批量转换输出we…

set与map的详细封装步骤

目录 一.set与map在STL中的源码 二.修改红黑树 1.插入与查找时的比较方式 2.插入时的返回值 3.补充成员函数 三.封装set与map 1.迭代器的实现 2.函数接口 3.map中的operator[] 四.完整代码 set.h map.h RBTree.h 一.set与map在STL中的源码 想要简单实现set与map 需…

【x264】变换量化模块的简单分析

【x264】变换量化模块的简单分析 1. 变换量化1.1 变换(transform)1.2 量化(quant) 2. 编码入口(x264_macroblock_encode)2.1 内部编码(macroblock_encode_internal)2.1.1 SKIP模式2.…

多源最短路径算法 -- 弗洛伊德(Floyd)算法

1. 简介 Floyd算法,全名为Floyd-Warshall算法,亦称弗洛伊德算法或佛洛依德算法,是一种用于寻找给定加权图中所有顶点对之间的最短路径的算法。这种算法以1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特弗洛伊德的名字命名。 2. 核心思…

从报名到领证:软考初级【信息系统运行管理员】报名考试全攻略

本文共计9991字,预计阅读33分钟。包括七个篇章:报名、准考证打印、备考、考试、成绩查询、证书领取及常见问题。 一、报名篇 报名条件要求: 1.凡遵守中华人民共和国宪法和各项法律,恪守职业道德,具有一定计算机技术…

centos7.9部署k8s的几种方式

文章目录 一、常见的k8s部署方式1、使用kubeadm工具部署2、基于二进制文件的部署方式3、云服务提供商的托管 Kubernetes 服务4、使用容器镜像部署或自动化部署工具 二、使用kubeadm工具部署1、硬件准备(虚拟主机)2、环境准备2.1、所有机器关闭防火墙2.2、…

sizeof和strlen

1.sizeof和strlen的对比 1.1sizeof sizeof是计算变量所占内存空间大小的,单位是:字节 如果操作数是类型的话,计算的是使用类型创建的变量所占内存空间的大小。 sizeof只关注占用内存空间的大小,不在乎内存中存放的是什么数据 …