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

news2025/6/26 21:03:58

唠唠闲话

内网穿透简介

在互联网上,两个不同主机进行通信需要知道对方的 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.coloradmin.cn/o/1822738.html

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

相关文章

Kettle根据分类实现Excel文件拆分——kettle开发31

将整理好的一份供应商付款明细Excel文件,按供应商拆分成多个Excel文件。 实现思路 本文我们首先将供应商付款明细表,按照“名称”拆分成多份Excel文件。拆分Excel文件打算用两个转换实现,一个用来将Excel数据读取到参数中,另外一…

2.4G低功耗无线收发SOC芯片-SI24R03

随着物联网产业对集成度的需求越来越高, 也在不断地完善公司产品生态。 “射频MCU”产品组合--无线SOC芯片(MCU),简化了系统设计。只需要少量的外围器件,用户即可实现产品的开发,有效减少了PCB板的占用…

热门开源项目推荐: diffusionbee

随着AI技术的快速发展,深度学习和机器学习已经成为各领域的热门话题。Stable Diffusion是一种强大的深度学习模型,它能够在图像生成和处理方面展现出惊人的效果。为了让更多用户能够轻松地使用Stable Diffusion,Diffusion Bee应运而生&#x…

Instagram怎么打不开?IP被限制怎么解决?

Instagram作为跨境电商的主要推广平台之一,账号安全关系重大。了解并掌握账号管理及防IP封禁的知识可以有效防止Ins账号被限制访问。因此本文将重点介绍 Instagram账号的管理技巧以及如何通过代理IP等工具防封禁,帮助新手用户更好地享受这个社交平台的乐…

python django初步搭建(一)

记录一次简单的python django使用,后续调用api相关的暂时不想写。。。 一、环境 windows python 3.11.7 django 二、初步搭建 2.1 新建空文件夹 为了方便本次记录,新建了一个空的文件夹来使用。 直接在这里输入cmd 然后按下回车 2.2 安装virtual…

【小米商城】页面编写笔记(自用)

页面展示&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>body{margin: 0;}img{width:100%;height: 100%;}.header{/*height: 38px;*…

Linux开机自启/etc/init.d和/etc/rc.d/rc.local

文章目录 /etc/init.d和/etc/rc.d/rc.local的区别/etc/init.dsystemd介绍 /etc/init.d和/etc/rc.d/rc.local的区别 目的不同&#xff1a; /etc/rc.d/rc.local&#xff1a;用于在系统启动后执行用户自定义命令&#xff0c;适合简单的启动任务。 /etc/init.d&#xff1a;用于管理…

Vulnhub-DC-5

靶机IP:192.168.20.139 kaliIP:192.168.20.128 网络有问题的可以看下搭建Vulnhub靶机网络问题(获取不到IP) 信息收集 nmap扫下端口及版本 dirsearch扫下目录 LinuxphpNginx 环境 我们再去看前端界面&#xff0c;发现在contact界面有能提交的地方&#xff0c;但是经过测试不…

开源项目QAnything:全能型本地知识库问答系统

在当今信息爆炸的时代&#xff0c;如何高效地管理和检索大量数据成为了一个重要课题。网易有道推出的开源项目QAnything&#xff0c;正是为了解决这一问题而生。QAnything是一个本地知识库问答系统&#xff0c;支持多种文件格式和数据库&#xff0c;允许用户在离线状态下进行安…

“探索机器学习的多面世界:从理论到应用与未来展望“

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;机器学习 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 目录 一、机器学习基础理论 1.机器学习的定义与分类 监督学习 无监督学…

[c++刷题]贪心算法.N01

题目如上: 首先通过经验分析&#xff0c;要用最少的减半次数&#xff0c;使得数组总和减少至一半以上&#xff0c;那么第一反应就是每次都挑数组中最大的数据去减半&#xff0c;这样可以是每次数组总和值减少程度最大化。 代码思路:利用大根堆去找数据中的最大值&#xff0c;…

MPLS提高网络服务质量的原理

MPLS&#xff08;Multiprotocol Label Switching&#xff0c;多协议标签交换&#xff09;是一种网络技术&#xff0c;它能够提高网络的服务质量&#xff08;Quality of Service&#xff0c;QoS&#xff09;以及整体性能。MPLS通过以下几种方式来提升网络服务质量&#xff1a;标…

CorelDRAW2024破解版下载 设计界的神器,你值得拥有!

数字艺术家们&#xff0c;你们有没有遇到过这样的困扰&#xff1a;想要创作出令人惊叹的数字艺术作品&#xff0c;但却受限于工具的选择&#xff1f;&#x1f914; 好消息来了&#xff01;CorelDRAW2024这款强大的设计软件终于问世了&#xff01;&#x1f389; 作为一名热衷于探…

Python基础教程(十一):数据结构汇总梳理

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

信号与系统实验MATLAB-实验2-连续时间系统的时域分析

实验二 连续时间系统的时域分析 一、实验目的 1、掌握连续时间信号卷积及其MATLAB实现方法&#xff1b; 2、掌握连续系统的冲激响应、阶跃响应及其MATLAB实现方法&#xff1b; 3、掌握利用MATLAB求LTI系统响应的方法&#xff1b; 4、掌握利用MATLAB求函数卷积和解微分方程…

【递归、搜索与回溯】综合练习一

综合练习一 1.找出所有子集的异或总和再求和2.全排列 II3.电话号码的字母组合4.括号生成 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.找…

Django序列化器详解:普通序列化器与模型序列化器的选择与运用

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…

Go Gin框架

一、Gin介绍 Gin是一个用Go编写的HTTPweb框架。它是一个类似于martini但拥有更好性能的API框架, 优于httprouter&#xff0c;速度提高了近 40 倍。点击此处访问Gin官方中文文档。 二、安装 1、安装Gin go get -u github.com/gin-gonic/gin 2、代码中引入 import "githu…

Aptos Builder Jam 亚洲首站|议程公布,无限畅想 Aptos 生态未来

作为一个新兴的 Layer1 公链&#xff0c;Aptos 自诞生之日起的理想便是 “A Layer 1 for everyone” 当 Web3 深陷熊市阴影之时&#xff0c;Aptos 奋力为开发者找到了全新的技术路径&#xff0c;正有 200 项目正在开发&#xff0c;并且已有大量 DeFi 项目落实部署工作&#xff…

席卷的B站《植物大战僵尸杂交版》V2.0.88整合包,PC和手机可用,含通关存档和视频教程!

今天给大家安利一款席卷B站&#xff0c;火爆全网的游戏——《植物大战僵尸杂交版》2.0.88整合包。 这个是网络上现存植物大战僵尸杂交版的最全整合&#xff0c;包含了修改工具&#xff0c;超强通关存档和高清工具。工具包有安装视频教程&#xff0c;支持手机版和pc多端使用&am…