域名(Domain Name)是互联网上的”门牌号”,DNS(Domain Name System)是把域名翻译成 IP 地址的系统。理解域名和 DNS 是自托管的第一步。

根域名、子域名、顶级域名

一个域名是分层级的,从右往左读:

blog   .   example   .   com
 ↑         ↑            ↑
子域名    二级域名     顶级域名(TLD)
         (主域名)
概念说明例子
顶级域名(TLD)最右边的部分.com.org.cn.net.dev.io
根域名(主域名/裸域名)你注册购买的那个域名example.comlinqin.xyz
子域名加在根域名前面的前缀blog.example.commemos.linqin.xyz
www一个历史遗留的特殊子域名,不是必须的www.example.com 只是个子域名,和 blog.example.com 地位一样

买域名买的是什么?

你买的是二级域名 + 顶级域名这部分(如 example.com),这是需要每年付费的。子域名(blogmemoswwwgarden…)是你自己随便加的,免费且数量不限。一个域名可以挂无限多个服务。

DNS 解析:域名 → IP 地址

浏览器输入 blog.example.com 后发生了什么:

你的浏览器
   │
   │ 1. 问本地缓存:blog.example.com 的 IP 是多少?
   │    (浏览器缓存 → 系统缓存 → 路由器缓存)
   │
   │ 2. 缓存没有,问 DNS 递归服务器(通常是运营商或 8.8.8.8)
   ▼
DNS 递归服务器
   │
   │ 3. 问根域名服务器:.com 是谁管的?
   │    根服务器返回 .com 顶级域名服务器地址
   │
   │ 4. 问 .com 顶级服务器:example.com 是谁管的?
   │    返回 example.com 的权威 DNS 服务器(你在 Cloudflare/阿里云配置的那个)
   │
   │ 5. 问权威服务器:blog.example.com 指向哪?
   │    返回具体 IP 地址,比如 192.0.2.1
   ▼
浏览器拿到 IP,直接和 192.0.2.1 建立连接

整个过程通常在几十毫秒内完成,结果会被缓存一段时间(TTL)。

常见 DNS 记录类型

在域名服务商(Cloudflare、阿里云、腾讯云等)的控制台里,你会添加这些记录:

记录类型作用例子
A 记录域名 → IPv4 地址blog192.0.2.1
AAAA 记录域名 → IPv6 地址blog2001:db8::1
CNAME 记录域名 → 另一个域名(别名)gardenxxx.pages.dev
MX 记录邮件服务器地址@mx1.qq.com(收邮件用)
TXT 记录任意文本,用于验证给 SSL 签发、SPF 反垃圾邮件用
NS 记录指定这个域名由哪个 DNS 服务器管一般不用改,域名注册商默认设置

@ 在 DNS 配置里代表根域名本身。比如给 @ 加 A 记录,就是给 example.com(不带 www)加解析。

实际配置例子

假设你买了域名 linqin.xyz,部署了这些服务:

你想访问的地址服务跑在哪应该加什么记录
linqin.xyz博客,Cloudflare PagesCNAME: @xxx.pages.dev
blog.linqin.xyz博客(也行)同上,用哪个都行
garden.linqin.xyz数字花园,Cloudflare PagesCNAME: gardenxxx.pages.dev
memos.linqin.xyz家里服务器上的 Memos(IP 1.2.3.4)A: memos1.2.3.4
pan.linqin.xyz家里 NAS(和 Memos 同一台服务器)A: pan1.2.3.4

为什么同一 IP 可以跑多个服务?

一台服务器(一个公网 IP)上可以跑几十个服务,用反向代理根据域名区分。详见 02-反向代理

CNAME vs A 记录怎么选

场景推荐
服务有自己的域名(Cloudflare Pages、Vercel、GitHub Pages 给你的 xxx.pages.devCNAME,让服务商自己管理 IP 变更
服务在你自己的服务器上,你知道公网 IPA 记录
根域名(example.com 不带前缀)CNAME 有局限(根域名 CNAME 会影响 MX 等其他记录),用 CNAME 扁平化(Cloudflare 支持)或 A 记录

DNS 传播(Propagation)

修改 DNS 记录后,不是全世界立刻生效的。因为各级 DNS 服务器都有缓存,缓存过期时间由 TTL(Time To Live,单位秒)决定。

TTL=60    → 1分钟后全球基本生效
TTL=3600  → 约1小时
TTL=86400 → 约24小时(这是很多服务商的默认值)
  • 修改记录前,可以把 TTL 临时调小(如 60 秒),等生效快
  • 生效后再调回大值(3600),减少 DNS 查询压力
  • 查询全球各地是否生效可以用 whatsmydns.net 这样的工具

Cloudflare 代理(橙色云朵)

如果你用 Cloudflare 管理 DNS,每条记录旁边有个云朵图标:

状态含义访问者看到的 IP流量经过 Cloudflare 吗
🟠 橙色云朵(已代理)开启 CDN/代理Cloudflare 的 IP✅ 经过,能隐藏真实 IP、享防护、免费 HTTPS
⚪ 灰色云朵(仅 DNS)只做 DNS 解析你真实的服务器 IP❌ 直接连到你的服务器

建议

  • 网站、博客等公开服务 → 开橙色云(隐藏源站 IP,防 DDoS,免费 SSL)
  • 家里的服务(SSH、VPN、远程桌面等不支持反代的)→ 灰色云朵(TCP 直连,Cloudflare 默认不代理非 HTTP 流量)
  • 某些需要真实 IP 的应用(如某些游戏、点对点应用)→ 灰色云朵

常见问题

Q: 为什么我 ping 子域名和根域名 IP 不一样? 正常。根域名可能走 CDN(多个 IP),子域名可能直接指向你的服务器,或者走不同的 CDN 节点。

Q: DNS 改了很久还是访问旧地址?

  • 你本地电脑有缓存:Windows 执行 ipconfig /flushdns,或者换个浏览器/用隐私窗口试试
  • 路由器/运营商有缓存:等 TTL 过期,或者手动把 DNS 改成 8.8.8.8(Google)或 223.5.5.5(阿里)测试

Q: 一个子域名能同时指向多个 IP 吗? 可以。A 记录可以配多条,这就是DNS 轮询,做简单的负载均衡。但它不知道后端是否存活,不像真正的负载均衡器会健康检查。


下一步:02-反向代理

相关:03-端口与HTTPS返回目录