应用台导航页
  • 主页
  • 博客
  • 知识库
  • 工作台
  • 集萃
  • 友链
  • 关于
我是如何搭建家庭服务器的

我是如何搭建家庭服务器的

技术
更新于 2026-06-18
— 4474 字
返回

知识库目录

  • FRP 部署教程
    FRP 部署教程

    更新于2026-06-22

为什么需要家庭服务器:我之前开发的web 应用都是部署在 vercel 上,长时间以来,十几个应用的用量都没有超过 vercel 的免费额度,但近两个月,由于在抖音得到了不少视频博主的推广, 高校分布可视化平台 这个应用的访问量突增,用量已大幅超出免费额度。升级了 pro plan 之后,包含的每月 20刀 的默认额度也 cover 不住了,还产生了不少额外费用。

VPS 价格贵,配置低。通常优惠的都是 2C 2G,跑不了几个业务。而且往往只能申请一次。

  1. 用来做什么:主力业务肯定不行,目前用来部署 umami 做统计分析等。

所需硬件及配置

我购买的迷你主机配置为:J1900 8+256G 。虽然 CPU 性能很差,但足够大的内存能支撑我部署很多玩具应用了。

我是在淘宝 科比特迷你电脑小主机 这家店买的,价格只需 387 元,再加上转接头也不到 400 元,让客服预装 ubuntu server 26 ,答复说 26 装不下,只能装 24 ,就很智障。

我的家庭服务器
我的家庭服务器

整个过程额外引入的硬件有:

  • 一根网线
  • 一台迷你主机
  • DP 转 HDMI 转接头(我购买的迷你主机没有 HDMI口,只有DP,而显示器又没有 DP 口,所以需要用到转接头)。

效果和试用体验

硬件功耗真很低,几乎感受不到什么发热量。

安装部署过程解决国内网络环境问题。

配置、使用过程中,安装 ddns-go 、拉取 docker 镜像等过程,国内都会遇到网络访问障碍。可参考 为服务器配置科学上网 这篇教程,通过安装 Mihomo ,来解决网络环境问题。

家庭服务器如何实现公网访问

ipv6 DDNS + ipv4 frp 。

  • DDNS-Go 配置AAAA 记录,自动更新 IPv6 地址到域名

使用 DDNS 动态解析域名到 IPv6 地址

虽然公网 ipv4 对于家庭宽带用户基本是不可指望的,但 ipv6 地址却是触手可及的,于是可以将域名解析到公网 ipv6 地址,用户最终使用 ipv6 访问服务。

根据我有限的经验,移动基本是默认开启ipv6的,电信似乎则不然。虽然 ipv6 可能会变,但可以定时自动根据 ipv6 地址更新域名解析。这个我几年前就写过 shell 脚本实现过,我最近才知道这种技术叫做 DDNS ,还了解到有一个叫 DDNS-GO 的工具可以很方便地配置实现这个功能,试了下果然 一分钟就配好了,比自己折腾脚本要方便多了。

无线路由器之前已经改成桥接模式,网关直接获取 ip 地址,基本不会变。

获取运营商光猫超级管理员密码

为了确保 ipv6 开启,可能需要获取运营商光猫的管理员密码,以进行一些配置,比如关闭一些防火墙项等。

当然可以直接联系售后说明需求,但如若不成功,就需要自己尝试获取了。我使用的移动光猫是 HG6145D 这个型号,在这里也把我的经验分享出来。

HG6145D 如何获取超级管理员密码

超管账号的获取我主要参考: 移动光猫怎么改桥接模式? - 知乎 这篇文章获取。但实际过程还是有些出入,主要是打开 telnet 还需要带上 key 这个参数。具体步骤如下:

  1. 开启设备 telnet 连接:设备Telnet 默认是关闭的,需要用带 MAC 的特殊 URL 开启,浏览器地址栏访问:http://192.168.1.1/cgi-bin/telnetenable.cgi?telnetenable=1&key=AABBCCDDEEFF (替换 key= 后面为你的 MAC)
  2. 登录 Telnet:Windows 先开启 Telnet 功能1,然后:telnet 192.168.1.1
    • 用户名:admin
    • 密码:Fh@ + MAC 后6位(大写)
  3. 运行以下命令,会显示 CMCCAdmin / 超级密码,可登录网页管理页。
    bash
    load_cli factory
    show admin_pwd

安装 DDNS-GO

我的域名基本都使用了 Vercel 的域名解析服务器,ddns-go支持 Vercel API,这让我喜出望外, ddns-go 安装过程:

  1. 下载并解压:访问 ddns-go Releases 页面查看最新版本。这里以 v6.0.0 为例(请根据实际情况替换版本号):
    bash
    # 创建并进入安装目录
    mkdir -p /opt/ddns-go && cd /opt/ddns-go
    # 下载对应架构的包
    wget https://github.com/jeessy2/ddns-go/releases/download/v6.0.0/ddns-go_6.0.0_linux_x86_64.tar.gz
    # 解压文件
    tar -zxvf ddns-go_6.0.0_linux_x86_64.tar.gz
  2. 安装为系统服务:ddns-go 提供了自带的服务安装命令,非常方便:
    bash
    # 安装并启动服务
    sudo ./ddns-go -s install
  • 其他常用管理命令:
    • 卸载服务:sudo ./ddns-go -s uninstall
    • 启动服务:sudo systemctl start ddns-go
    • 停止服务:sudo systemctl stop ddns-go

安装成功后, ddns-go 都会默认在后台监听 9876 端口。如果你的 Ubuntu 开启了防火墙,需要允许 9876 端口通行:

bash
sudo ufw allow 9876/tcp

这之后进入 Web 界面配置,打开浏览器,访问对应服务器的9876 端口,在 web 界面中选择DNS 服务商(我使用的是 Vercel),填写对应的 Token/Secret Key。后,在 IPv6 的 Domains 栏输入你的域名,点击保存,右上角会立刻显示解析日志,提示是否解析成功。

ipv6 虽好,能轻易让家庭服务器达到远远大于低价 VPS 的上行带宽,但问题在于覆盖不全。许多网络环境下,ipv6 通信仍然不受支持。经过我的实践,尽管中国移动蜂窝网络大多都支持,但例如我在单位使用的电信的宽带也好,还有许多国内外的云服务器也罢,都不支持访问 ipv6 地址。这就意味着,如果域名只解析 ipv6 地址,部署服务后,访问会非常受限,不仅是没法作为生产环境供一般用户使用,就算只是自己个人使用,也非常不便。

使用 FRP 转发云服务器公网 ipv4 流量到内网服务器

所以回过头来,还是需要支持 ipv4 访问。而由于公网 ipv4 地址是不可得的,就必然需要第三方服务器做中转实现内网穿透。一旦依赖于第三方服务器,就涉及费用,免费或低价的方案,就会造成带宽受限(例如低价云服务器),或者由于服务器在境外而有较大时延(例如使用 Cloudflare Tunnel),总之都不会很理想,这就是为什么虽然 ipv6 不能覆盖所有网络环境,我也要解析的原因。

经权衡,最终我选择了使用国内云服务器安装 FRP 来做内网穿透。

FRP(Fast Reverse Proxy)是一个反向代理内网穿透程序。其原理是:

  1. 内网 frpc 主动连接公网 frps,注册本地服务;
  2. 外网用户访问云服务器公网地址 / 端口;
  3. frps 通过已建立的隧道,把请求转发到内网设备,实现双向通信。

参考 FRP 部署教程 | 花野猫的数字花园

云服务器Nginx与FRP端口冲突解决方案

云服务器作为 FRP 服务器,然后我的家庭服务器作为 FRP 客户端,可是云服务器的 80 和 443 端口已经被 Nginx 监听了,但是有的业务我还是想跑在家庭服务器上,并且使用 80 和 443 端口,这样的话要怎么办呢?能做到吗?

可以做到,核心是用Nginx做反向代理转发。先在云服务器frp配置里,把家庭服务器的80和443映射到云服务器的其他空闲端口,比如8080和8443。然后在Nginx里针对需要走家庭服务器的域名,配置反向代理到这两个映射端口,同时处理好SSL证书就行。

常用命令

查看所有监听端口

ss -tulnp
# 释义
# -t:TCP 端口
# -u:UDP 端口
# -l:仅监听状态
# -n:数字格式(不解析域名/端口名)
# -p:显示对应进程

ubuntu 防火墙开放端口

  1. 启用防火墙(如未启用)
bash
sudo ufw enable

注意:远程服务器先放行 ssh(22 端口)再 enable,否则可能断连。

  1. 查看防火墙状态
bash
sudo ufw status

没启用会显示 inactive。

  1. 开放一段端口(示例:7000–10000)
  • 只放 TCP:

    bash
    sudo ufw allow 7000:10000/tcp
  • TCP+UDP 都放:

    bash
    sudo ufw allow 7000:10000
  1. 只允许特定 IP 访问这段端口(更安全)
bash
sudo ufw allow from 192.168.1.0/24 to any port 7000:10000
  1. 删除这条规则(不用时)
bash
# 按编号删(推荐)
sudo ufw delete 编号
# 或直接删规则
sudo ufw delete allow 7000:10000/tcp‘

查看 CPU 架构

  1. 下载软件包需要知道自己 CPU 的CPU 架构,Linux 命令:uname -m 2
  • x86_64:64位 x86 架构(主流电脑/服务器)
  • i686/i386:32位 x86
  • aarch64/arm64:ARM64(树莓派、国产ARM服务器、手机类)
  • armv7l:32位 ARM
  • riscv64:RISC-V 架构

或者使用 lscpu查看详细硬件信息:

重点看这两行:

Architecture: # 架构(x86_64 / aarch64 等)
CPU op-mode(s): # 支持32/64位模式

nginx 配置

  1. sudo vi /etc/nginx/sites-available/umami 为什么我加了这个配置文件但不生效 ,还要 nginx sudo ln -s /etc/nginx/sites-available/umami /etc/nginx/sites-enabled/ 查看所有监听端口 ss -tulpn

脚注

  1. windows 默认不启用 telnet 功能,可使用 PowerShell 管理员执行 dism /online /Enable-Feature /FeatureName:TelnetClient 开启 ↩

  2. uname 为 Unix Name 的缩写,用于查询系统内核信息;参数 -m 取自英文 machine(机器硬件),该指令会读取内核 utsname 结构体中的机器硬件标识字段,输出当前 CPU 架构。 ↩

相关内容

  • FRP 部署教程

    FRP 部署教程

    更新于2026-06-22

文章大纲

  • 所需硬件及配置
  • 效果和试用体验
  • 安装部署过程解决国内网络环境问题。
  • 家庭服务器如何实现公网访问
    • 使用 DDNS 动态解析域名到 IPv6 地址
    • 获取运营商光猫超级管理员密码
      • HG6145D 如何获取超级管理员密码
      • 安装 DDNS-GO
    • 使用 FRP 转发云服务器公网 ipv4 流量到内网服务器
      • 云服务器Nginx与FRP端口冲突解决方案
  • 常用命令
    • 查看所有监听端口
    • ubuntu 防火墙开放端口
    • 查看 CPU 架构
    • nginx 配置
  • 脚注

选项
文章 ID: 534

相关内容

  • FRP 部署教程

    FRP 部署教程

    更新于2026-06-22

dors logoDors

Dors 是花野猫开发为知识工作者打造的数字花园应用,包含的博客、个人记事本、及其他实用功能。

花园

  • 花坛——博客
  • 果园——知识库

工坊——作者开发的实用工具

  • 小记
  • 秒切——一键按秒分割视频
  • 中国重点高校地理位置可视化网站
  • 中国行政区划数据查询平台
  • excel 重命名工具

misc

  • 生活章程
  • 画廊
  • just have fun!

© 2022 - present. All Rights Reserved.滇ICP备2025063395号-1

花野猫打造