这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

Documentation

分享在家可用的服务

1 - 家用服务

1.1 - 设备

这里讨论可以使用哪些设备承载家用服务.

硬件平台

家庭用设备有很多选择, 可以找一台退役的笔记本电脑, 或者闲置的台式机, 或者在电商搜开发板, NAS, 软路由, Mac 等, 这些都可以承载服务.

硬件上的选择, 在 2024 年的今天不用再拘泥于x86平台, ARM平台已经成熟, 价格便宜, 性能足够, 能耗低, 且生态丰富, 适合家庭使用, 如果没有必须运行远古软件的需求, ARM平台是个不错的选择.

苹果设备上装 Windows/Linux 或者非苹果设备安装黑苹果系统都需要花一些时间去研究, 适合有一定技术基础, 爱折腾的用户.

设备选择参考指标

  • CPU: 考虑功耗/性能比
  • 内存: 至少 4GB 起步
  • 存储: 考虑冗余和扩展性
  • 网络: 千兆网卡基本需求
  • 散热: 24/7 运行需要可靠散热
  • 噪音: 放置位置决定噪音要求

操作系统

生态最好, 工具软件最多的是Linux, 命令行对一些用户来说是更简单的操作方式, Linux 上很方便实现自动化, 适合有一定操作基础的用户. Linux 下可以选择的系统有很多, 非专业用户可以考虑 Ubuntu 桌面版. 还可以选择黑群晖系统, 但遇到问题需要自己寻找解决办法.

Windows 系统有最广泛的使用人群, 绝大多数人的需求在 Windows 上的 IIS(Internet Information Services)中就可以满足, 只需要动动鼠标就可以实现足够多的功能.
Windows 的安装参考massgrave.dev.

苹果的 ARM CPU 造的很好, mac Mini 成为一个有性价比的硬件选择, 但是 macOS 系统需要界面和命令行交替使用, 既不能完全脱离界面, 也不能完全脱离命令行, 适合有一定技术基础的用户.

系统选择建议

  • 新手入门: Windows + Docker Desktop
  • 进阶用户: Ubuntu Server/Debian
  • 稳定性要求高: RHEL/Rocky Linux
  • 特定需求:
    • 媒体服务器: unRAID
    • 存储导向: TrueNAS
    • 全功能 NAS: 群晖 DSM

推荐的设备和系统

专业用户的需求五花八门, 非专业用户的需求总结起来就是一个 NAS, 电商搜 NAS, 按需购买即可.

如果想省钱, 家里有闲置的设备, 或者闲鱼上低价收到的便宜主机, 可以安装 Windows Server 2022/2025, 折腾黑群晖等.

数据安全

硬盘损坏

硬盘损坏一开始只是偶尔读不出来, 等到完全读不出来时再去数据恢复, 一是可能恢复的价格贵, 二是部分硬盘商家没有能力恢复.
因此推荐购买一个硬盘阵列柜, 组一个磁盘阵列, 假如硬盘的 5 年损坏率为 10%, 双盘阵列的损坏率就是 1%, 只要它们不是同时损坏, 就可以通过更换阵列中损坏的硬盘来保证数据不丢失.

数据被盗

如果硬盘被盗, 而所有数据全部未加密, 那就会后患无穷, 特别是隐私数据如机密文档, 密码备份等. 推荐磁盘都开启加密, 以防止硬盘被盗后带来更多损失.
开启加密会带来一部分系统资源占用, 计算资源敏感的用户可以考虑不开启加密, 但是要注意硬盘的安全.

多处备份

家里的硬盘不是绝对安全, 进贼进小孩, 地震洪水, 网络勒索入侵等可能丢失数据, 因此推荐多处备份, 找一个靠谱的云服务, 备份重要数据.

网络安全

不要轻易暴露直连 IP

有的网络设置可以让一些设备获得独立公网 IPv6, 这些 IPv6 可以被用于端口扫描. 扫到端口后, 一些服务可能存在漏洞, 被攻击者利用.
因此除非有明确的需求, 建议家庭网的 IPv6 设置为 NAT6, 做一层地址转换, 防止直连 IP 被扫描. 需要向外暴露服务的话, 可以设置一台 DMZ 主机. 只是自用的话, 考虑 wireguard/tailscale/zerotier 搭建 VPN, 通过 VPN 访问家里的服务.

不要随便安装软件

不管是大众的还是小众的, 软件都可能存在漏洞, 关注软件的更新, 有漏洞及时更新, 不用的软件及时卸载. 不轻易给软件高权限.

使用防火墙

关闭防火墙一时爽, 直到被攻破的那一天. 有条件的话稍微研究下规则的配置, 不要轻易的一关了事.

使用安全软件

有一些安全软件是免费的, 防护能力多少是有一点的, 比不装要好. 可以考虑火绒, 360 等.

安全性建议总结

  • 网络隔离: VLAN 分区
  • 访问控制: 反向代理+认证
  • 监控告警: 硬件状态监测
  • 备份策略: 3-2-1 原则
    • 3 份备份
    • 2 种介质
    • 1 份异地

1.1.1 - 设备的分类

  • 设备的分类

网络流行的 NAS, 软路由, Mac mini, 路由器等统一抽象为设备, 不需要关注其命名和形态, 主要应关注处理器, 存储, 网络, 应用生态这四个方面.

处理器首要关注的是架构, 一般使用的是x86, ARM, 其它架构不建议非专业人士购买, 较贫乏的生态会增加学习和使用的难度.

你会看到有些人评价ARM通常用于低功耗设备, 适合家用, x86通常用于高性能设备, 适合企业. 但本文写作的 2024 年的时间点, 这种论调早已过时, 我们还是要基于生态去考虑, 目前ARM生态已非常丰富, 并且具有更好的性价比, 值得大家考虑. 建议非专业人士可以直接选择ARM架构的设备, 以阿里云为例ARM设备的价格仅为x86设备的一半, 性能也足够应付家用需求. 专业人士可以根据自己的需求选择x86架构的设备.

1.2 -

1.2.1 - DoT vs DoH vs DoQ

DoT

DNS over TLS(DoT)是一种基于 TLS 的 DNS 加密协议。TLS 1.2 至少需要四次往返,TLS 1.3 则至少需要三次往返,而 DNS 请求仅需一次往返。

时间轴
  ┌───────────────────────────────────────────────────────────────────────┐
  │                          客户端                                       服务器
  │                                                                        │
  │  客户端发送 SYN 段                                                    │
  │  ────────────────────────────────────────────────────────────────────▶│
  │  SYN = 1, Seq = x                                                     │
  │                                                                        │
  │  ←─────────────────────────────────────────────────────────────────────│
  │  服务器响应 SYN-ACK 段                                                │
  │  SYN = 1, ACK = 1, Seq = y, Ack = x + 1                               │
  │                                                                        │
  │  客户端发送 ACK 段                                                    │
  │  ────────────────────────────────────────────────────────────────────▶│
  │  ACK = 1, Seq = x + 1, Ack = y + 1                                    │
  │                                                                        │
  │  TCP 连接建立                                                         │
  │  客户端发送 ClientHello                                               │
  │  ────────────────────────────────────────────────────────────────────▶│
  │                                                                        │
  │  ←─────────────────────────────────────────────────────────────────────│
  │  服务器响应 ServerHello                                               │
  │  服务器发送证书链                                                      │
  │                                                                        │
  │  客户端发送密钥交换消息                                                │
  │  ────────────────────────────────────────────────────────────────────▶│
  │                                                                        │
  │  服务器发送密钥交换消息                                                │
  │  ←─────────────────────────────────────────────────────────────────────│
  │                                                                        │
  │  客户端发送 Finished                                                   │
  │  ────────────────────────────────────────────────────────────────────▶│
  │                                                                        │
  │  服务器发送 Finished                                                   │
  │  ←─────────────────────────────────────────────────────────────────────│
  │                                                                        │
  │  TLS 握手完成                                                         │
  │  客户端发送 DNS 查询                                                   │
  │  ────────────────────────────────────────────────────────────────────▶│
  │                                                                        │
  │  ←─────────────────────────────────────────────────────────────────────│
  │  服务器响应 DNS 查询                                                   │
  │                                                                        │
  └───────────────────────────────────────────────────────────────────────┘

TLS 1.2 的握手过程需要至少两个往返(RTT),即客户端发送 ClientHello,服务器回复 ServerHello 和证书,然后客户端发送 ClientKeyExchange 和 ChangeCipherSpec,最后服务器发送 Finished。TLS 1.3 将握手过程简化为一个往返(1-RTT)。客户端在发送 ClientHello 时可以包含密钥共享信息(ClientKeyShare),服务器在回复 ServerHello 时也包含密钥共享信息,从而在第一个往返内完成密钥协商和握手。

DoH

DNS over HTTPS(DoH)是一种基于 HTTPS 的 DNS 加密协议。HTTPS 是基于 TCP 的协议,建立连接需要至少三次往返,而 DNS 请求仅需一次往返。因此,DoH 在三种加密 DNS 协议中速度最慢。

相较于 DoT,DoH 的协议开销较大,需要额外的 HTTP 协议头,导致服务略慢于 DoT。其他方面与 DoT 类似。

DoQ

DNS over QUIC(DoQ)是一种基于 QUIC 的 DNS 加密协议。QUIC 是基于 UDP 的协议,建立连接需要两次往返,DNS 请求仅需一次往返。因此,DoQ 是三种加密 DNS 协议中速度最快的。

时间轴
  ┌───────────────────────────────────────────────────────────────────────┐
  │                         客户端                                      服务器
  │                                                                        │
  │  客户端发送初始包(Initial Packet)                                   │
  │  包含:QUIC版本号、连接ID、加密握手消息(ClientHello)、可能的应用层数据  │
  │  ────────────────────────────────────────────────────────────────────▶│
  │                                                                        │
  │                                                                        │
  │  ←─────────────────────────────────────────────────────────────────────│
  │  服务器响应初始包(Initial Packet)                                   │
  │  包含:加密握手消息(ServerHello、Certificate、ServerKeyExchange等)    │
  │  可能包含对客户端0-RTT数据的确认或拒绝                                │
  │                                                                        │
  │  客户端发送加密握手消息(EndOfEarlyData、Finished)                    │
  │  ────────────────────────────────────────────────────────────────────▶│
  │                                                                        │
  │  服务器发送加密握手消息(Finished)                                   │
  │  ←─────────────────────────────────────────────────────────────────────│
  │                                                                        │
  │  握手完成                                                             │
  │  连接建立                                                             │
  │  数据传输开始                                                         │
  │  ────────────────────────────────────────────────────────────────────▶│
  │  ←─────────────────────────────────────────────────────────────────────│
  │  数据传输                                                             │
  │  数据传输                                                             │
  │  数据传输                                                             │
  └───────────────────────────────────────────────────────────────────────┘

QUIC 使用 TLS 1.3 或更高版本来保护其连接的安全性。加密握手过程与传统的 TLS 握手相似,但通过 QUIC 的数据包格式进行,允许在握手的同时开始数据传输。如果客户端之前已与服务器建立了 QUIC 连接,则在新的连接尝试中可以立即发送应用层数据,无需等待服务器响应。这种机制称为 0-RTT,可以显著减少交互延迟。然而,0-RTT 数据可能因重放攻击的风险而被服务器拒绝。

QUIC 的设计目标是提供比 TCP 更快的连接建立速度和更好的拥塞控制,同时保持与现有网络基础设施的兼容性。通过上述步骤,QUIC 能够在首次连接时实现快速握手,并在后续连接中利用 0-RTT 进一步减少延迟。

结论

在较为稳定的网络环境中,DoQ 理论上速度最快,这得益于其基于 UDP 和 TLS 1.3 的特性。然而,实际网络中由于 UDP 的无连接状态,业务繁忙时可能会被运营商随机丢弃,导致连接不稳定。DoT 的速度略慢于 DoQ,但基于 TCP,其连接更为稳定。DoH 的速度稍慢,由于基于 HTTP 的协议功能更多,可以在服务后端实现更多功能。应根据自身的网络环境和需求选择合适的加密 DNS 协议。

Reference

1.2.2 - 最快的DNS

普通用户通常测量的是明文 DNS 的 IP 的 ping 相应速度,但这很难保证是否是真正到达对应服务器的速度。现代 DNS 至少需要使用加密 DNS 才能确保服务未被劫持。

从客户端到终端通常会经过 5 到 8 个网络设备,在其中任意一个设备上都可以劫持 UDP:53 请求,这种劫持命令非常简单。因此,不要对明文 DNS 抱有任何侥幸的期待,特别是企业用户,基本上都会遭遇劫持。

以下是劫持命令示例: sudo iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination 1.1.1.1:53

设置劫持非常简单,许多企业内网用户的 DNS 速度都在个位数毫秒范围内,而在家庭网络中通常小于 1 毫秒。无论配置什么明文 DNS,最终都是自建的 DNS 服务在响应。

接下来讨论加密 DNS 的速度。在讨论之前,先介绍三种常见的加密 DNS 协议:DNS over TLS (DoT)、DNS over HTTP (DoH) 和 DNS over QUIC (DoQ)。

理论上,三种加密协议和未加密 DNS 的简化实现方式:

  • 最快的是 DoQ。QUIC 基于 UDP,建立连接需要一次往返,DNS 请求只需一次往返。
  • DoT 建立连接, tls1.2 需要至少四次往返, tls1.3 需要三次往返,略慢于 DoQ,DNS 请求一次往返。
  • DoH 基于 HTTPS,建立连接需要至少四次往返, 由于 HTTP 协议较重, 导致服务会略慢于 DoT。
  • 传统的 UDP:53 不需要建立连接,只有一次往返。

也就是说,从零开始的 DNS 请求,加密 DNS 的耗时是未加密 DNS 的 2~4 倍左右,但在建立连接后,耗时与未加密 DNS 相同(未考虑连接强制关闭的情况)。

考虑到实际网络情况,运营商在流量繁忙时会随机丢弃 UDP 报文。由于 TCP 有重传机制,丢弃后会再次传输,无法通过丢弃 TCP 来减轻网络负担,因此运营商较少丢弃 TCP 报文。因此,TCP 的 DNS 请求速度会更稳定,特别是在晚间网络高峰时段。

此外,仅关注连接时间不会显著提升上网体验。DNS 协议中包含许多可设置的参数,其中一些参数的合理配置比选择一个服务器更能提升上网体验。

阅读本文的读者可能已经了解,上网大致分为两步:首先请求域名的 IP 地址,然后将实际请求发送到 IP 地址。实际上,这里并不一定是向 DNS 服务器请求 IP 地址,更多的是在本地 DNS 缓存中查询是否已有解析。如果本地没有缓存解析,则需要询问 DNS;有缓存时优先使用缓存,而查询本地缓存的时间只有几纳秒,耗时可以忽略不计。通过设置 DNS 请求响应的 TTL(Time to Live)值,可以控制请求结果的缓存时间。例如,TTL 设置为 600,则 10 分钟内 DNS 响应结果都有效,系统不会再次查询相同域名。许多企业将这个值设置为 10,即 10 秒内不必再查。

如果您有自己的 DNS 服务器,可以自行修改这个值。在www.adguardprivate.com上可以自建一个 DNS 服务,延长 TTL 值,减少 DNS 请求次数,提升上网体验。

除了速度以外,DNS 服务还有许多特性影响上网体验, 这里只讨论了连接速度, 其它特性暂不讨论。