Mailcow 的多域名添加DNS记录

在 Mailcow 的多域名架构中,由于你的核心主机名(Hostname)是 mail.example.com,这台服务器将作为所有域名的“邮局总部”。

对于 example.comexample1.comexample2.com 这三个域名,DNS 配置的逻辑是相同的:身份信息归属于各自域名,而基础设施(服务器位置)全部指向 mail.example.com


一、 核心配置清单(三个域名通用模板)

你需要分别为这三个域名在各自的 DNS 服务商处添加以下记录。这里以 example.com 为例,另外两个域名只需替换对应前缀即可。

1. 邮件寻址记录 (Directing Mail)

告诉全球邮件服务器,发给这些域名的信件该送到哪里。

记录类型主机记录 (Host)记录值 (Value)优先级说明
MX@mail.example.com10核心:所有域名的邮件都路由到主服务器

2. 发信验证记录 (Authentication)

防止你的邮件被 Gmail/Outlook 判定为垃圾邮件。

记录类型主机记录 (Host)记录值 (Value)说明
TXT (SPF)@v=spf1 mx a:mail.example.com -all授权 mail.example.com 的 IP 代表该域名发信
TXT (DKIM)dkim._domainkeyv=DKIM1; k=rsa; p=MIIBI...注意: 每个域名的该值都不同,需从 Mailcow 后台获取
TXT (DMARC)_dmarcv=DMARC1; p=quarantine; pct=100; rua=mailto:[email protected]建议先设为 quarantine(隔离),稳定后改为 reject

3. 客户端自动配置 (Auto-Configuration)

让用户在 Outlook 或手机上只需输入邮箱密码即可自动完成设置。

记录类型主机记录 (Host)记录值 (Value)说明
CNAMEautoconfigmail.example.com用于 Thunderbird 等
CNAMEautodiscovermail.example.com用于 Outlook / Exchange

二、 详细操作流程与专业分析

1. 如何获取唯一的 DKIM 记录?

这是三个域名唯一必须区分的记录。

  1. 登录 Mailcow UI -> 配置 -> ARC/DKIM
  2. 确保你已在“域名”中添加了这三个域名。
  3. 在页面下方的“填写新域名”处输入域名(如 example1.com),选择 Selector(建议用默认的 dkim),点击 “生成私钥”
  4. 复制右侧文本框中以 v=DKIM1... 开头的字符串,将其填入该域名的 DNS TXT 记录中。

2. 关于 SPF 的深度建议

虽然 v=spf1 mx a:mail.example.com -all 是标准写法,但如果你希望更严谨,且你的 mail.example.com 的 IP 不会变,可以使用 IP 指向:

  • v=spf1 ip4:你的服务器IP -all这种写法减少了一次 DNS 递归查询,能稍微提升验证速度并降低解析失败的风险。

3. DMARC 的精细化管理

对于 example1.comexample2.com,你可以将 rua(聚合报告地址)统一指向你的主管理邮箱:

  • rua=mailto:[email protected]这样你可以在一个地方监控所有域名的发信合规情况。

三、 验证与检查(工程师工具箱)

添加完所有记录后,不要直接测试发信,先进行“三位一体”检查:

  1. Mailcow 内部检查:进入 Mailcow 管理后台的 “域名” 页面,点击每个域名后的 “DNS” 按钮。Mailcow 会实时扫描你的解析记录。
    • 只要是绿色,说明记录配置正确。
    • 如果是黄色/红色,说明解析尚未生效或记录值填写有误。
  2. 外部权威工具检查:使用 Mail-Tester.comMxtoolbox.com
    • 重点检查 “SpamAssassin” 评分。
    • 重点检查 “PTR / Reverse DNS”。即使你有多个域名,PTR 必须且只能指向你的主机名 mail.example.com,这一点绝对不能改。
  3. 连接性测试:在终端执行 dig mx example1.com。如果返回的结果显示 ANSWER SECTION: mail.example.com,说明路由已通。

常见问题提醒 (QA)

  • Q: example1.com 需要 A 记录指向服务器吗?
    • A: 只有当你需要访问 [https://mail.example1.com](https://mail.example1.com) 时才需要。如果用户只用 [https://mail.example.com](https://mail.example.com) 登录,那么 example1.com 只需要 MX、TXT 和 CNAME 记录。
  • Q: 为什么 Outlook 还是提示证书错误?
    • A: 确保你在 Outlook 中填写的“服务器地址”是 mail.example.com 而不是 example1.com。只有主名才有 SSL 证书保护。

比如example1.com要添加哪些记录?假如example.com的a记录是1.1.1.1。

既然你的主机名是 mail.example.com(对应 IP 1.1.1.1),那么 example1.com 的配置核心就是“借用” example.com 的基础设施。

作为网络工程师,我为你列出 example1.com 必须添加的 5 类关键记录


1. 寻址记录:告诉对方“信件寄往何处”

这是最重要的一条。虽然邮箱后缀是 @example1.com,但实际处理邮件的机器是 mail.example.com

类型主机记录 (Host)记录值 (Points to)优先级作用
MX@mail.example.com10告诉外界:发给 example1.com 的信,请送到 mail.example.com

2. 发信授权记录 (SPF):证明“这台服务器有权替我发信”

如果没有这条,你的 example1.com 发出的邮件会被 Gmail 标记为伪造。

类型主机记录 (Host)记录值 (TXT Value)作用
TXT@v=spf1 mx a:mail.example.com -all授权 mail.example.com 的 IP 代表 example1.com 发信。

3. 防篡改签名 (DKIM):给邮件盖章

注意: 这一条的内容在 Mailcow 后台是唯一生成的。

  1. 在 Mailcow 后台的 Configuration -> ARC/DKIM 中找到 example1.com
  2. 复制那段以 v=DKIM1... 开头的长字符串。
类型主机记录 (Host)记录值 (TXT Value)作用
TXTdkim._domainkeyv=DKIM1; k=rsa; p=MIIBI...验证邮件内容在传输过程中未被修改。

4. 自动配置记录 (CNAME):让 Outlook 一键登录

为了让用户在登录 [email protected] 时不需要手动输入复杂的服务器地址。

类型主机记录 (Host)记录值 (Points to)作用
CNAMEautoconfigmail.example.com支持 Thunderbird。
CNAMEautodiscovermail.example.com支持 Outlook 和手机自带邮件 App。

5. 安全策略记录 (DMARC)

定义如果验证失败(有人冒充你)时该怎么办。

类型主机记录 (Host)记录值 (TXT Value)作用
TXT_dmarcv=DMARC1; p=quarantine; pct=100; rua=mailto:[email protected]如果验证失败,邮件进入垃圾箱,并把报告发给你的主管理员。

工程师视角的“常见疑问”

Q1:example1.com 需要 A 记录吗?

  • 非必须。如果你只想通过 [https://mail.example.com](https://mail.example.com) 登录后台,那么 example1.com 根本不需要 A 记录。
  • 除非:你想通过 [https://mail.example1.com](https://mail.example1.com)(带 1 的域名)访问 Web 界面,这时才需要加一条 mail 的 A 记录指向 1.1.1.1

Q2:为什么不用加 PTR(反向解析)?

  • PTR 全局唯一。你的 IP 1.1.1.1 在 VPS 后台已经绑定了 mail.example.com。收信方看到 IP 反查结果是 mail.example.com,这与你的发信服务器名(HELO)一致即可。不需要为每个新增域名都配 PTR。

Q3:SSL 证书怎么办?

  • 在客户端(Outlook/iPhone)配置时,务必将“收/发服务器地址”都写成 mail.example.com。这样客户端会验证 mail.example.com 的证书,完美匹配,不会报错。

总结

你只需要在 example1.com 的 DNS 里,把 MX、CNAME 全部指向你的主域名 mail.example.com,并在 TXT 记录里做好发信授权即可。

现在你可以去 Mailcow 后台的 example1.com 域名设置里点击 “Check DNS”,只要那几项变绿,就说明配置成功了!

在 Mailcow 的 DNS Check 界面中,如果某个项目的状态显示为 2(通常伴随黄色或橙色图标),这并不代表“错误”,而是一个“警告/建议”状态。

作为网络工程师,我为你详细拆解这个状态的具体含义以及针对 SRV 记录的深度分析。


1. 状态码 “2” 的技术含义

在 Mailcow 的后端逻辑中:

  • 状态 0:未检测到记录(红色)。
  • 状态 1:配置完全正确(绿色)。
  • 状态 2检测到了记录,但与 Mailcow 预期的标准值不完全一致,或者该记录是可选的(黄色)

对于 SRV 记录,状态 2 通常意味着:Mailcow 建议你添加这条记录以增强兼容性,但即使不加,只要你配了之前的 CNAME(Autodiscover),大部分客户端(如 Outlook)也能正常工作。


2. 深入分析:_autodiscover._tcp SRV 记录

你提到的这条记录是 Microsoft Exchange 服务发现 的一种高级方式。

它的作用是什么?

当 Outlook 尝试自动配置 [email protected] 时,它会按顺序尝试多种方法:

  1. 访问 [https://example.com/autodiscover](https://example.com/autodiscover)... (HTTP)
  2. 访问 [https://autodiscover.example.com/](https://autodiscover.example.com/)... (CNAME/A)
  3. 查询 DNS SRV 记录:_autodiscover._tcp.example.com (SRV)

SRV 记录的优势在于,它能明确告诉客户端:“请去 mail.example.com443 端口寻找自动配置文件”。它比 CNAME 更专业,因为它可以指定端口号和优先级。


3. 为什么会显示状态 2?

通常有两种情况:

情况 A:你还没填这条记录

Mailcow 认为这是一条“推荐但不强制”的记录。如果你没填,它会显示黄色(状态 2),提示你为了最佳的移动端兼容性,最好补上它。

情况 B:数据格式不匹配

Mailcow 预期的 SRV 数据通常包含 优先级 (Priority)权重 (Weight)端口 (Port)。如果你在 DNS 服务商那里填写的格式不符合它的解析规则,它就会报 2。


4. 如何正确配置该记录?

如果你的主机名是 mail.example.com,请在 example.com 的 DNS 中这样添加:

字段名称填写内容
记录类型SRV
主机记录 (Name)_autodiscover._tcp
优先级 (Priority)0
权重 (Weight)1
端口 (Port)443
目标地址 (Target)mail.example.com. (注意最后有个点)

注意: 有些 DNS 服务商(如阿里云、Cloudflare)会将这些字段拆开填写;有些则要求填成一行:0 1 443 mail.example.com.


5. 工程师的实战建议

  • 是否必须修复?如果你的 CNAME 记录(autodiscover -> mail.example.com)已经变绿且 Outlook 可以自动登录,那么这条 SRV 记录不修也行。它主要是为了照顾极少数不遵循 CNAME 规范的旧版邮件客户端。
  • 如何消掉这个“2”?按照上述格式准确添加 SRV 记录,并等待 DNS 缓存刷新(通常 10-30 分钟)。一旦 Mailcow 探测到完全匹配的 SRV 响应,状态就会变为 1 (绿色)。

总结: 状态 2 是 Mailcow 在温和地提醒你:“嘿,你的配置已经 90 分了,如果加上这条 SRV 记录就能拿 100 分。”

你现在的 DNS 服务商(比如 Cloudflare 或腾讯云)支持添加 SRV 类型的记录吗?有些基础版 DNS 可能不支持这个类型。

要在 Cloudflare 或其他 DNS 服务商处获取 DNSSEC 记录,你并不需要手动“编写”这些代码,而是需要由 DNS 解析商(如 Cloudflare)生成,并将其填入你的域名注册商(如 GoDaddy, Namecheap, 或阿里云)。

以下是获取并配置 DNSSEC 的完整步骤:

1. 第一步:在 Cloudflare 中生成记录

  1. 登录 Cloudflare 控制台
  2. 选择你的域名(例如 example.com)。
  3. 点击左侧菜单的 DNS -> DNSSEC
  4. 点击 Enable DNSSEC(启用 DNSSEC)
  5. Cloudflare 会进行几秒钟的计算,然后为你展示一组 DS (Delegation Signer) 记录

2. 第二步:提取关键数据

生成的记录通常包含以下四个核心字段,你需要把它们复制下来:

字段名称示例值 (仅供参考)
Key Tag2371
Algorithm13 (通常是 ECDSA Curve P-256 with SHA-256)
Digest Type2 (通常是 SHA-256)
Digestabc123...xyz (一长串 16 进制字符)

3. 第三步:前往域名注册商提交

这一步是最关键的。DNSSEC 是一个信任链,你必须把 Cloudflare 给你的这串数据告诉你的域名注册商:

  1. 登录你购买域名的网站(例如你通过 Freenom, NameSilo 或其他平台购买)。
  2. 找到该域名的 Advanced DNS SettingsDNSSEC Management 选项。
  3. 点击 Add DS Record
  4. 将 Cloudflare 提供的 Key Tag, Algorithm, Digest Type, Digest 对应填入。
  5. 保存设置。

4. 如何验证 DNSSEC 是否生效?

配置完成后,由于 DNS 缓存原因,通常需要 10 分钟到 1 小时生效。你可以使用以下两个专业工具验证:

  • 可视化验证 (推荐)DNSViz输入域名后,如果看到从根域名(.)到你的域名(example.com)有一条完整的蓝色实线连接,说明信任链已建立。
  • 命令行验证:在终端输入:Bashdig +dnssec example.com 如果在返回的 ANSWER SECTION 中看到了 RRSIG 记录,说明 DNSSEC 已经生效。

5. 为什么邮件系统(Mailcow)需要它?

你之前在折腾 TLSA 记录,而 DNSSEC 是 TLSA 的前提条件

  • 没有 DNSSEC:TLSA 记录是无效的。因为攻击者可以轻易伪造 DNS 响应,告诉你“这个哈希值是对的”,从而进行中间人攻击。
  • 有了 DNSSEC:它为你的 DNS 记录加上了数字签名。接收方邮件服务器(如 Gmail)在查询你的 TLSA 记录时,会先验证 DNSSEC 签名。如果签名有效,它才会信任你的 TLSA 哈希值并建立 DANE 加密连接。

⚠️ 特别提醒:

  • 千万不要填错:如果 DS 记录填错了,会导致你的域名在全球范围内无法解析(因为安全校验失败,所有递归服务器都会拒绝解析你的域名)。
  • 如果要换 DNS 商:在把域名从 Cloudflare 迁走之前,必须先在注册商处删除 DS 记录,否则迁场过程中域名会断网。

邮件系统的 自动发现机制 (Autodiscover/Autoconfig) 以及 域名命名规范

1. 如何让 Thunderbird 默认识别到正确的服务器?

Thunderbird 并不是靠“猜”,而是按照特定的协议顺序去寻找配置。要让它默认识别为 mail.example.com,你需要配置以下三项:

A. 设置 SRV 记录(最专业、最标准的方法)

这是邮件行业标准。当 Thunderbird 或 Outlook 只有你的邮箱地址时,它们会查询 DNS 中的 SRV 记录。

在 Cloudflare 中添加以下两条 SRV 记录:

  • IMAP 转发:
    • Service: _imap
    • Protocol: _tcp
    • Name: example.com
    • Priority: 0 | Weight: 1 | Port: 143 (或 993)
    • Target: mail.example.com
  • Submission (SMTP) 转发:
    • Service: _submission
    • Protocol: _tcp
    • Name: example.com
    • Priority: 0 | Weight: 1 | Port: 587
    • Target: mail.example.com

B. 启用 Mailcow 的 Autoconfig 域名

Mailcow 默认支持 Mozilla (Thunderbird) 的 Autoconfig 协议。

  1. 确保你有一个 CNAME 记录:autoconfig.example.com 指向 mail.example.com
  2. Thunderbird 会尝试访问 [http://autoconfig.example.com/mail/config-v1.1.xml](http://autoconfig.example.com/mail/config-v1.1.xml),Mailcow 会自动生成包含正确服务器地址的 XML 文件返给它。

C. 修改 Mailcow 配置

检查 mailcow.conf 里的 MAILCOW_HOSTNAME 是否确实设置为了 mail.example.com。Mailcow 的内部模板会根据这个变量生成配置文件。


2. imap/smtp 前缀会更专业吗?

从专业和美学角度来看:是的,通常更显专业。

  • 大型服务商的惯例:如 Gmail (imap.gmail.com)、Outlook (smtp.office365.com) 均采用这种分离式命名。
  • 解耦优势:如果你未来规模扩大,想让 IMAP 走一台高性能服务器,SMTP 走另一台发信服务器,这种命名方式可以让你在不更改客户端设置的情况下,直接在 DNS 层面通过更换 IP 来切换服务器。

但是,对于 Mailcow 这种单机环境,需要注意证书成本:

  • 如果你用 imap.xxxsmtp.xxx,你的 SSL 证书必须同时包含这两个子域名(加上原本的 mail.xxx,总共需要 3 个)。
  • Mailcow 的处理方式:Mailcow 默认会自动为 ADDITIONAL_SAN 里的域名申请证书。

3. 专家建议:你应该怎么做?

如果你追求极致的专业感,建议采用 “别名 + SRV” 的架构:

第一步:设置 CNAME 别名

在 Cloudflare 里把 imapsmtp 都指向你的 mail 域名:

  • imap.example.com CNAME mail.example.com
  • smtp.example.com CNAME mail.example.com

第二步:配置 Mailcow 证书 (SANs)

编辑 mailcow.conf

Ini, TOML

ADDITIONAL_SAN=imap.example.com,smtp.example.com

然后运行 docker compose up -d,ACME 容器会自动为这两个新名字申请证书。

第三步:设置 SRV 记录(同上文 A 部分)

将 SRV 记录的 Target 指向 mail.example.com(或者如果你已经配置好了证书,指向 imap... 也可以)。


总结

  1. 想省事:配好 SRV 记录autoconfig CNAME,Thunderbird 就能自动抓到 mail.example.com
  2. 想专业:使用 imap / smtp 前缀,并配合 ADDITIONAL_SAN 解决证书报错。

注意:以上内容由google gemini生成,仅供参考。生成时间:20260430

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部