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

手把手教你用frp把家里的NAS或树莓派服务“搬到”公网(CentOS7实战)

家庭服务器公网化实战:基于frp的安全内网穿透方案

深夜加班时想调取家中NAS的电影资源?出差在外需要查看智能家居摄像头画面?这些需求的核心在于如何安全地将家庭内网服务暴露到公网。本文将手把手带您实现这一目标,无需复杂网络知识,只需一台云服务器和基础Linux操作能力。

1. 环境准备与基础概念

在开始配置前,我们需要明确几个关键组件:

  • 家庭服务器:可以是树莓派、旧电脑改造的NAS或专业存储设备,运行着Jellyfin、Nextcloud等自托管服务
  • 云服务器:建议选择1核1G以上配置,位于距离您较近的机房(如阿里云香港节点)
  • 域名:虽然非必须,但使用域名能大幅提升使用体验(后文会介绍免费方案)

提示:云服务器选择时注意带宽限制,1Mbps带宽仅适合基础文件传输,视频流建议5Mbps以上

frp工作原理简析:

公网用户 <--> [云服务器:frps] <--> [家庭网络:frpc] <--> 本地服务

关键端口规划表:

服务类型默认端口建议修改范围
frp服务端通信700050000-60000
HTTP代理80保留
HTTPS代理443保留
WebSocket自定义5000-10000

2. 云服务器端配置详解

2.1 安全加固基础

在安装frp前,建议先完成这些安全措施:

# 创建专用用户 sudo useradd -m frpuser -s /sbin/nologin sudo passwd -l frpuser # 配置SSH密钥登录 sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config sudo systemctl restart sshd

2.2 frp服务端安装

使用最新版本(示例为v0.51.3):

mkdir -p /opt/frp && cd /opt/frp wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz tar zxvf frp_0.51.3_linux_amd64.tar.gz cd frp_0.51.3_linux_amd64

精简文件后配置frps.ini

[common] bind_port = 58723 # 替换为自定义高端口 token = your_secure_token_123 # 必须设置认证令牌 vhost_http_port = 80 vhost_https_port = 443 max_pool_count = 10 # 限制连接数提升安全性 # 可视化面板(可选) dashboard_port = 7500 dashboard_user = admin dashboard_pwd = dashboard_password_456

2.3 系统服务集成

创建systemd服务更可靠:

sudo tee /etc/systemd/system/frps.service <<EOF [Unit] Description=Frp Server Service After=network.target [Service] User=frpuser Restart=on-failure ExecStart=/opt/frp/frp_0.51.3_linux_amd64/frps -c /opt/frp/frp_0.51.3_linux_amd64/frps.ini [Install] WantedBy=multi-user.target EOF sudo systemctl daemon-reload sudo systemctl enable --now frps

3. 家庭客户端高级配置

3.1 多服务分流方案

典型frpc.ini配置示例:

[common] server_addr = your.server.ip server_port = 58723 token = your_secure_token_123 # Jellyfin媒体服务 [jellyfin] type = http local_ip = 192.168.1.100 local_port = 8096 custom_domains = media.yourdomain.com # Nextcloud文件同步 [nextcloud] type = https local_ip = 192.168.1.100 local_port = 443 custom_domains = cloud.yourdomain.com # 智能家居控制台 [homeassistant] type = tcp local_ip = 192.168.1.200 local_port = 8123 remote_port = 58123 # 公网访问端口

3.2 WebSocket优化配置

针对实时视频流等场景:

[surveillance] type = tcpmux custom_domains = cam.yourdomain.com multiplexer = httpconnect local_ip = 192.168.1.50 local_port = 8888

性能调优参数(根据网络状况调整):

[common] tcp_mux = true pool_count = 3 health_check_type = tcp health_check_interval_s = 10

4. 安全增强与域名整合

4.1 免费域名方案

使用Cloudflare API实现动态DNS:

#!/bin/bash API_KEY="your_api_key" ZONE_ID="your_zone_id" RECORD_NAME="home.yourdomain.com" CURRENT_IP=$(curl -s http://ipv4.icanhazip.com) RECORD_IP=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$RECORD_NAME" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" | jq -r '.result[0].content') if [ "$CURRENT_IP" != "$RECORD_IP" ]; then RECORD_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$RECORD_NAME" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" | jq -r '.result[0].id') curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ --data "{\"type\":\"A\",\"name\":\"$RECORD_NAME\",\"content\":\"$CURRENT_IP\"}" fi

4.2 HTTPS加密方案

使用Let's Encrypt免费证书:

sudo apt install certbot sudo certbot certonly --standalone -d media.yourdomain.com -d cloud.yourdomain.com

Nginx反向代理配置示例:

server { listen 443 ssl; server_name media.yourdomain.com; ssl_certificate /etc/letsencrypt/live/media.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/media.yourdomain.com/privkey.pem; location / { proxy_pass http://127.0.0.1:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

5. 运维监控与故障排查

5.1 状态监控方案

frp内置面板结合Prometheus:

# frps.ini添加 enable_prometheus = true prometheus_port = 7400

常用监控命令:

# 查看连接状态 ss -antp | grep frp # 实时流量监控 iftop -i eth0 -f "port 58723 or port 80" # 日志分析 journalctl -u frps -f -n 50

5.2 常见问题处理指南

  • 连接超时:检查云服务器安全组规则,确认端口已开放
  • 证书错误:定时更新Let's Encrypt证书(certbot renew
  • 带宽不足:限制客户端上传速度(local_ip = 127.0.0.1 bandwidth_limit = 2MB
  • 内存泄漏:定期重启服务(sudo systemctl restart frps

实际部署中发现,为每个服务配置独立子域名比使用端口分流更稳定。当家庭网络变动时,frpc的自动重连机制通常能在30秒内恢复服务,配合微信通知脚本可以实时掌握连接状态。

http://www.cnnetsun.cn/news/1955680.html

相关文章:

  • 从真空到介质:揭秘绝对折射率与相对折射率的物理本质
  • ngrok内网穿透实战:从零到一,打通Windows与Linux本地服务公网访问
  • 从新手到高手:解锁SCI/EI文献的五大高效获取路径
  • 深入Keil的串口调试:除了重写fputc,你的printf还能这样玩出花
  • 自动控制原理:从经典到现代,数学模型如何驱动智能系统演进
  • 从Vue插槽到渲染函数:探索组件动态渲染的进阶之路
  • 从逻辑漏洞到清晰闭环:我是如何用流程图拯救复杂业务需求的(含避坑指南)
  • JS实战:精准监听用户无操作行为的优化方案
  • 别再手动配环境了!用Docker Compose一键部署Hadoop 3.x集群(附完整YAML文件)
  • BAPI_PRICES_CONDITIONS、IDOC_INPUT_COND_A与RV_CONDITION_COPY:三种SAP条件记录创建BAPI的实战对比与选型指南
  • 智能代码生成≠自动复用:3个被99%开发者忽略的上下文耦合陷阱,今天必须修复
  • 现在不掌握AI日志生成,半年后将失去SRE岗位准入资格:2026奇点大会认证体系倒计时启动
  • Qwen3.5-9B-AWQ-4bit开源镜像教程:无需Python环境,纯Web交互使用
  • 别再死磕手册了!STM32F429以太网实战:从MAC地址到PHY选型(DP83848/LAN8720对比)
  • 代码版权归属混沌期(2024–2026):开发者、企业、平台三方权责切割图谱首次公开
  • 别再被.pth文件坑了!PyTorch加载预训练模型的三种正确姿势(附ResNet18/50实战)
  • 【技术解析】潜在扩散模型(LDM)中的图像压缩:从VAE到VQ-GAN的演进之路
  • 香橙派5 RK3588 RKNN实战:从零搭建YOLOv8模型转换与NPU部署全流程 (2024.11)
  • SeqGPT-560M实操教程:使用LangChain封装SeqGPT作为RAG pipeline中的结构化召回模块
  • 从SPI到IIC:7脚OLED屏幕接口改造实战指南
  • 【Linux】Linux环境基础开发工具使用
  • AutoSpotting终极指南:如何在AWS上节省90%EC2成本
  • Payment扩展开发:如何自定义支付网关和添加新支付渠道
  • 沙特阿拉伯王储主持的沙特公共投资基金(PIF)董事会通过并公布PIF 2026-2030年战略
  • AZ-104-MicrosoftAzureAdministrator:从零开始的Azure管理员终极指南
  • 基于PaddlePaddle与PaddleHub的OCR实战:从环境搭建到结果解析
  • 全面掌握FanControl:Windows风扇控制终极指南,告别噪音与高温困扰
  • A2UI 技术详解:下一代自适应用户界面框架
  • 一文讲清,TPM管理是什么意思?TPM管理的核心内涵与目标
  • 告别选择困难!从电路设计角度拆解:买USB HUB到底该看哪些参数?