当前位置: 首页 > 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.jsqmd.com/news/659106/

相关文章:

  • ENVI 混合像元分解:从理论到实践的完整工作流解析
  • 010、工具调用模块(一):Function Calling原理与实现
  • 量化小白也能懂:用CZSC 0.6.8的Python库,5分钟搞定缠论三买选股
  • 低功耗验证实战:基于VCS NLP与UPF的动态仿真与覆盖率分析
  • 2026年3月室外护栏品牌选哪家,不锈钢护栏/道路护栏/景观护栏/室外护栏/河道护栏/防撞护栏,室外护栏厂家推荐 - 品牌推荐师
  • 如何配置文件描述符限制_limits.conf中Oracle用户配置
  • AI写春联实测:春联生成模型-中文-base生成效果惊艳案例
  • 达梦数据库外部链接实战:从配置到测试的完整指南
  • 当ARM CPU彻底挂死,DS-5连不上怎么办?手把手教你用CSAT命令行工具救场
  • AD9253数字采集系统避坑指南:SPI配置、时钟设计与电源管理的常见误区
  • STM32F103驱动WS2812:从时序解析到流水灯实战
  • 2026年质量好的玉环斜轨数控机床/斜导轨数控机床长期合作厂家推荐 - 品牌宣传支持者
  • 代码版权归属混沌期(2024–2026):开发者、企业、平台三方权责切割图谱首次公开
  • 从并行到串行:深入解析RGMII与SGMII接口的演进与选型指南
  • Vue 3 中集成 Three.js 场景的完整实践指南
  • ArcGIS字段值精准拆解:VB与Python脚本的实战应用
  • 极域电子教室优化工具:3步实现课堂多任务自由学习
  • 5分钟掌握Umi-OCR:免费高效的离线文字识别终极指南
  • 2026年比较好的动力刀塔数控机床/数控车铣复合机床/斜导轨数控机床/玉环斜导轨数控机床厂家精选合集 - 行业平台推荐
  • RaiseCOM(瑞斯康达)交换机实战配置指南:从基础到高级
  • 别再只盯着CMOS了!聊聊LVDS在FPGA高速接口设计中的那些‘坑’与实战技巧
  • 从元器件到高速PCB:我的硬件工程师书单升级之路(附避坑指南)
  • 手把手教你用树莓派4B搭建OpenBMC开发环境(Ubuntu 20.04版,含编译加速技巧)
  • 阅读APP书源终极指南:解锁全网小说资源的完整解决方案
  • 3分钟快速安装Figma中文界面插件:设计师必备的免费汉化工具
  • 【智能代码生成个性化适配策略】:20年架构师亲授3层动态适配模型,解决92%的IDE场景错配问题
  • Python+Selenium实战:突破某网专利数据爬取的多重技术壁垒
  • 告别裸机点灯:用LVGL在STM32F4 Discovery板上做个炫酷的仪表盘(源码已开源)
  • 告别轮询:在S32K144上使用can_pal组件实现高效CAN中断接收与环形队列
  • AI Agent 长链工作流的最大隐形黑洞:Claude 提示缓存的架构纪律拆解