当前位置: 首页 > article >正文

Linux下frp内网穿透实战:从零搭建安全高效的远程访问通道

1. 为什么你需要frp内网穿透想象一下这个场景你在家里搭建了一个NAS存储服务器存满了珍贵的家庭照片和工作文档或者你在办公室的Linux服务器上部署了一个内部使用的Web应用。这些服务运行得非常好但有个致命问题——它们都在内网环境中没有公网IP地址。这意味着当你出差在外或者想在家里访问公司服务器时就会遇到望洋兴叹的尴尬。frpFast Reverse Proxy就是为解决这个问题而生的神器。它就像一位专业的快递小哥能够把内网的服务打包送到公网上让外部用户也能访问。我最初接触frp是因为需要远程维护客户的服务器经过多次实践后发现相比其他方案frp具有配置简单、性能稳定、安全性高等显著优势。2. 环境准备与安装2.1 硬件与网络需求在开始之前你需要准备两台机器服务端一台具有公网IP的VPS或云服务器推荐1核1G以上配置客户端需要穿透的内网机器可以是树莓派、NAS或任何Linux设备我建议选择距离你较近的云服务商比如阿里云、腾讯云的轻量应用服务器实测延迟会更低。网络方面确保服务端的7000端口默认frp通信端口没有被防火墙屏蔽。2.2 下载与解压frp访问frp的GitHub发布页面获取最新版本。这里有个小技巧使用-L参数让wget自动跟随重定向# 服务端操作 wget -L https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz tar -zxvf frp_0.65.0_linux_amd64.tar.gz mv frp_0.65.0_linux_amd64 frp cd frp对于ARM架构的设备如树莓派需要下载linux_arm64版本。解压后你会看到这些关键文件frps/frpc服务端/客户端主程序frps.toml/frpc.toml配置文件frps_full.toml完整的配置示例强烈建议阅读3. 服务端配置详解3.1 基础配置编辑frps.toml时安全是首要考虑因素。这是我的生产环境配置bindAddr 0.0.0.0 bindPort 7000 auth.token YourStrongTokenHere! # 务必修改为复杂字符串 # 仪表盘配置 webServer.addr 0.0.0.0 webServer.port 7500 webServer.user CustomAdminName webServer.password ComplexPassword123! # 端口限制 allowPorts [ { start 20000, end 29999 } # 只开放这个范围 ]几个关键点auth.token相当于门禁密码客户端必须提供相同的token才能连接限制端口范围可以防止滥用我习惯预留10000个端口实际可能只用几个仪表盘密码不要使用默认值建议用密码管理器生成3.2 系统服务配置使用systemd管理frps是最可靠的方式。创建/etc/systemd/system/frps.service[Unit] Descriptionfrp server Afternetwork-online.target Wantsnetwork-online.target [Service] Typesimple ExecStart/path/to/frps -c /path/to/frps.toml Restarton-failure RestartSec30 StandardOutputappend:/var/log/frps.log StandardErrorappend:/var/log/frps.log [Install] WantedBymulti-user.target这里有几个优化点将日志统一输出到/var/log/目录设置30秒重启间隔避免频繁重启使用绝对路径确保可靠性启用服务并检查状态sudo systemctl daemon-reload sudo systemctl enable frps sudo systemctl start frps sudo systemctl status frps # 应该显示active (running)4. 客户端配置实战4.1 基础代理配置假设我们要暴露内网的SSH服务22端口和Web服务8080端口serverAddr your.server.ip serverPort 7000 auth.token YourStrongTokenHere! # 必须与服务端一致 [[proxies]] name ssh-tunnel type tcp localIP 127.0.0.1 localPort 22 remotePort 20001 # 必须在服务端allowPorts范围内 [[proxies]] name web-app type tcp localIP 192.168.1.100 localPort 8080 remotePort 20002注意事项remotePort必须在服务端允许的端口范围内如果服务在内网其他机器上修改localIP即可每个[[proxies]]代表一个独立的代理规则4.2 高级功能配置frp还支持很多实用功能比如1. 健康检查避免连接无效服务[[proxies]] # ...其他配置... healthCheck.type tcp healthCheck.timeoutSeconds 3 healthCheck.maxFailed 32. 负载均衡多个客户端提供相同服务[[proxies]] # ...其他配置... loadBalancer.group web-servers loadBalancer.groupKey 1234563. 加密与压缩提升安全性transport.useEncryption true transport.useCompression true5. 安全加固与优化5.1 防火墙配置在服务端使用UFW或firewalld严格限制访问# UFW示例 sudo ufw allow 7000/tcp # frp主端口 sudo ufw allow 20000:29999/tcp # 代理端口范围 sudo ufw allow 7500/tcp # 仪表盘 sudo ufw enable对于云服务器还需要在安全组中开放这些端口。建议设置源IP限制只允许特定IP访问管理端口7500。5.2 连接保活与故障转移在客户端配置中添加这些参数可以提升稳定性transport.heartbeatInterval 30 transport.heartbeatTimeout 90 transport.dialServerTimeout 10实测发现设置合理的心跳间隔可以防止NAT超时断开连接。如果网络不稳定可以启用自动重连transport.connectServerMaxTimes 0 # 0表示无限重试 transport.reconnectDelaySeconds 56. 常见问题排查问题1客户端无法连接服务端检查serverAddr和serverPort是否正确确认服务端防火墙和云安全组已开放端口使用telnet your.server.ip 7000测试连通性问题2连接成功但无法访问服务确认localIP和localPort正确检查内网服务本身是否正常运行查看客户端日志/var/log/frpc.log问题3高延迟或频繁断开尝试启用压缩transport.useCompression true调整心跳间隔建议30-60秒考虑更换网络质量更好的服务端7. 实际应用案例7.1 远程开发环境搭建作为开发者我常用frp暴露内网的开发服务器[[proxies]] name vscode-server type tcp localIP 127.0.0.1 localPort 8080 # VS Code Web版端口 remotePort 20003这样在任何地方都能通过浏览器访问开发环境配合VS Code的Remote SSH插件体验几乎和本地开发无异。7.2 家庭监控系统接入家里的摄像头NVR通常只有内网访问[[proxies]] name nvr-web type tcp localIP 192.168.50.100 localPort 80 remotePort 20004 [[proxies]] name nvr-rtsp type tcp localIP 192.168.50.100 localPort 554 remotePort 20005这样既可以通过网页查看实时画面也能在手机APP中添加RTSP流地址。

相关文章:

Linux下frp内网穿透实战:从零搭建安全高效的远程访问通道

1. 为什么你需要frp内网穿透? 想象一下这个场景:你在家里搭建了一个NAS存储服务器,存满了珍贵的家庭照片和工作文档;或者你在办公室的Linux服务器上部署了一个内部使用的Web应用。这些服务运行得非常好,但有个致命问题…...

CUDA编程避坑指南:共享内存Bank Conflict的实战排查与优化(附NVIDIA Nsight工具使用)

CUDA共享内存性能调优实战:从Bank Conflict诊断到Nsight工具链深度解析 当你的CUDA Kernel性能提升陷入瓶颈时,共享内存可能是那个既熟悉又陌生的关键因素。作为GPU编程中最接近寄存器速度的内存资源,共享内存理论上能带来数量级的加速&…...

微信小程序滚动加载实战:如何避免列表卡顿(附完整代码)

微信小程序滚动加载实战:如何避免列表卡顿(附完整代码) 在移动互联网时代,用户体验的流畅度直接决定了产品的留存率。对于微信小程序开发者而言,列表滚动卡顿是一个常见但棘手的问题,尤其是在电商商品列表、…...

Mininet与OpenFlow控制器集成指南:从Floodlight到OpenDaylight

Mininet与OpenFlow控制器集成指南:从Floodlight到OpenDaylight 引言 在软件定义网络(SDN)的研究与开发中,Mininet作为轻量级网络仿真工具已成为不可或缺的利器。它能在单台机器上快速构建包含虚拟主机、交换机和控制器的完整网络环…...

Python新手必看:如何快速解决‘str‘ object has no attribute ‘to‘错误(附真实案例)

Python新手必看:如何快速解决str object has no attribute to错误(附真实案例) 刚接触Python编程时,遇到各种报错信息总是让人头疼不已。其中AttributeError: str object has no attribute to这类错误尤为常见,它看似简…...

YOLOv8实战:从检测框到中心坐标的精准提取与应用

1. 为什么需要提取物体中心坐标? 在目标检测任务中,我们通常使用边界框(bounding box)来标识物体的位置。但很多时候,仅仅知道物体的边界框是不够的。比如在做物体追踪时,我们需要一个更简洁的表示方式——…...

GME-Qwen2-VL-2B软件重构指南:识别并改善代码中的耦合过度问题

GME-Qwen2-VL-2B软件重构指南:识别并改善代码中的耦合过度问题 你是不是也遇到过这样的场景?接手一个老项目,想改一个功能,结果发现牵一发而动全身,改A模块的代码,B、C、D模块都跟着报错。或者&#xff0c…...

信号与系统实战:5个拉普拉斯变换典型例题解析(附MATLAB验证代码)

信号与系统实战:5个拉普拉斯变换典型例题解析(附MATLAB验证代码) 拉普拉斯变换作为信号与系统课程的核心工具,其工程价值往往被理论教学的抽象性所掩盖。许多电子信息工程专业的学生能够熟练背诵变换公式,却在面对实际…...

保姆级教程:用OpenVINO在Intel显卡上跑通PP-OCRv5文字识别(附环境配置避坑指南)

保姆级教程:用OpenVINO在Intel显卡上跑通PP-OCRv5文字识别(附环境配置避坑指南) 在数字化转型浪潮中,光学字符识别(OCR)技术已成为企业文档处理、票据识别和自动化办公的核心工具。飞桨推出的PP-OCRv5以其…...

【C#避坑实战系列文章08】C#并行处理资源瓶颈诊断:用PerformanceCounter定位CPU/内存热点,优化并行度与算法

1. 从监控到诊断:PerformanceCounter的进阶玩法 很多C#开发者都遇到过这样的场景:你的并行处理程序在服务器上跑得风生水起,突然某天运维同事怒气冲冲地找上门——"你们的服务又把服务器CPU吃满了!"。你打开任务管理器&…...

病理图像处理新手必看:SVS和TIFF格式转换的5个实用技巧(附代码示例)

病理图像处理新手必看:SVS和TIFF格式转换的5个实用技巧(附代码示例) 在医学研究和人工智能开发领域,病理图像处理已成为不可或缺的关键环节。对于刚接触这一领域的研究人员和开发者来说,如何高效处理SVS和TIFF这两种主…...

HFSS仿真教程:用Ansys还原AirPods蓝牙天线设计(含LDS工艺参数)

HFSS仿真教程:用Ansys还原AirPods蓝牙天线设计(含LDS工艺参数) 当拆解AirPods时,最令人惊叹的莫过于其内部精密的天线设计——如何在如此紧凑的空间内实现稳定的蓝牙连接?这正是射频工程师需要掌握的三维电磁场仿真技术…...

信创实战:在麒麟V10上构建.NET 6与金仓数据库的完整应用栈

1. 环境准备:从零搭建国产化开发平台 第一次在麒麟V10上折腾.NET 6和金仓数据库时,我踩了不少坑。记得当时为了找个靠谱的安装指南,翻遍了各种论坛和技术文档。现在把完整流程梳理出来,希望能帮你少走弯路。 硬件配置建议&#xf…...

计算机组成原理实验避坑指南:原码乘法运算器的寄存器级联问题详解

计算机组成原理实验避坑指南:原码乘法运算器的寄存器级联问题详解 在计算机组成原理的实验课程中,原码乘法运算器的设计是一个经典而富有挑战性的项目。许多学生在完成这个实验时,往往会遇到各种意想不到的问题,尤其是在A寄存器和…...

Confluence数据安全指南:手动备份+定时任务全流程(附30天自动清理脚本)

Confluence数据安全实战:从手动备份到智能清理的完整方案 在数字化协作时代,Confluence作为企业知识管理的核心平台,承载着大量关键业务数据。一次意外的数据丢失可能导致数月的工作成果付诸东流,而合理的备份策略则是抵御这类风险…...

Solidworks装配体Toolbox标准件修改全攻略:从尺寸调整到材质替换

Solidworks装配体Toolbox标准件修改全攻略:从尺寸调整到材质替换 在机械设计领域,Solidworks的Toolbox标准件库堪称效率神器。但许多设计师在使用过程中都遇到过这样的困扰:为什么修改后的螺栓尺寸会自动还原?如何快速调整标准件…...

Druid连接池配置避坑指南:如何避免getConnection()无限等待导致服务崩溃

Druid连接池配置避坑指南:如何避免getConnection()无限等待导致服务崩溃 在微服务架构中,数据库连接池的配置不当往往是系统稳定性的隐形杀手。最近遇到一个典型案例:某电商平台的订单服务在高峰期频繁出现服务不可用,但日志中却没…...

ESP32+ENC28J60以太网Web服务器兼容库

1. 项目概述WebServer_ESP32_ENC 是一个专为 ESP32 平台设计的、面向 ENC28J60 以太网控制器的轻量级 Web 服务封装库。其核心定位并非从零构建 TCP/IP 协议栈,而是深度集成 ESP32 官方 SDK 中成熟的 LwIP 协议栈与硬件抽象层(HAL)&#xff0…...

VisionMaster 4.2.0新功能体验:图形化编程如何简化工业视觉项目开发

VisionMaster 4.2.0新功能深度解析:图形化编程如何重塑工业视觉开发效率 工业视觉系统开发正经历一场静默革命——传统需要数百行代码实现的检测逻辑,如今通过拖拽模块和连线就能完成。VisionMaster 4.2.0的图形化编程界面将这一变革推向新高度&#xff…...

突破视觉局限:多光谱AI检测技术全栈实践

突破视觉局限:多光谱AI检测技术全栈实践 【免费下载链接】multispectral-object-detection Multispectral Object Detection with Yolov5 and Transformer 项目地址: https://gitcode.com/gh_mirrors/mu/multispectral-object-detection 传统计算机视觉系统如…...

MCP与VS Code深度协同实战:从环境搭建到实时双向调试,7步完成企业级开发闭环

第一章:MCP与VS Code深度协同的核心价值与适用场景MCP(Microsoft Cloud Platform)工具链与 VS Code 的深度协同,本质上是将云原生开发范式无缝嵌入开发者日常编码环境的关键实践。这种集成并非简单插件叠加,而是通过语…...

Asian Beauty Z-Image Turbo 开发环境搭建:Ubuntu 20.04系统配置全攻略

Asian Beauty Z-Image Turbo 开发环境搭建:Ubuntu 20.04系统配置全攻略 最近有不少朋友在问,想在自己的服务器上跑一些AI图像生成的应用,比如这个挺火的Asian Beauty Z-Image Turbo镜像,但第一步就被环境搭建给卡住了。确实&…...

实测Face Analysis WebUI:3步完成人脸检测+年龄预测+性别识别,效果惊艳

实测Face Analysis WebUI:3步完成人脸检测年龄预测性别识别,效果惊艳 1. 开箱即用:一个能“看懂”人脸的智能工具 你有没有想过,让电脑像人一样“看”懂一张照片里的人物信息?不是简单地识别出这是个人,而…...

Phi-3 Forest Laboratory 在STM32嵌入式开发中的应用猜想:代码注释与协议解析

Phi-3 Forest Laboratory:让STM32嵌入式开发更“聪明”的桌面助手 每次面对STM32那密密麻麻的寄存器手册,或者是一段十年前、注释寥寥无几的祖传代码时,你是不是也感到一阵头大?尤其是当你手头只有一块像STM32F103C8T6这样的最小…...

Fast Video Cutter Joiner7.0.4:多格式免费视频编辑

Fast Video Cutter Joiner7.0.4 汉化版是主打视频剪切与视频合并的专业免费无损视频编辑工具,软件兼容多主流视频格式,支持极速无损处理,搭配多样化编辑选项,操作简单且全程无广告,能全方位满足个人与专业人士的各类视…...

源码编译:在现代化环境中部署PostgreSQL 11的实战指南

1. 为什么需要源码编译PostgreSQL 11? 在当前的数据库运维实践中,我们经常会遇到一个尴尬的情况:项目需要使用某个特定版本的数据库,但官方已经停止提供该版本的二进制安装包。就像我去年遇到的一个金融项目,他们的核心…...

面试官总问的MESI协议,我用Go写了个模拟器帮你彻底搞懂

用Go模拟MESI协议:从代码运行中理解缓存一致性 记得第一次被问到MESI协议时,我支支吾吾地背出了四个状态名称,却完全不明白它们在实际系统中如何流转。直到后来在调试一个多核并发bug时,亲眼看到缓存不一致导致的数据错误&#xf…...

影刀RPA高级考试实战:用Python绕过反爬,把电影票房数据自动存进MySQL数据库

影刀RPA高级认证实战:Python爬虫与MySQL数据库自动化集成指南 当电影票房数据成为投资决策和市场分析的重要依据时,如何高效获取并结构化存储这些信息就成了技术团队面临的现实挑战。本文将深入探讨如何利用影刀RPA平台结合Python技术栈,构建…...

从零理解UDS故障码:手把手教你解读0x19服务返回的DTC状态位

汽车诊断技术实战:深入解析UDS协议中的DTC状态位机制 1. 汽车电子诊断技术基础 现代汽车已演变为高度复杂的电子系统集合体,平均每辆新车包含超过100个电子控制单元(ECU),这些ECU通过车载网络相互连接。当这些系统出现异常时,统一…...

好写作AI | 学术共同体对AI辅助写作的接纳度与规范共识研究

学术圈怎么看待AI写论文?——有人拥抱,有人警惕,但共识正在形成“我们系现在允许学生用AI查文献、润色语言,但核心论证必须自己写。”“我们导师说,用AI一律按作弊处理。”“我们学校刚出了新规定:使用AI必…...