我目前在 Linode 上管理两台服务器。第一台“server-a”运行的是 12.04,第二台“server-b”是全新安装的 14.04。
不久前,我在 server-a 上的 spf 记录方面遇到了一些问题,我意识到我需要明确添加(或创建 A 记录)ipv6 地址,因为 postfix 服务使用 ipv6 连接到 gmail。这让我很惊讶,因为我只是假设它默认会使用 ipv4。经过进一步的跟踪,我发现几乎所有服务在某些情况下都使用 ipv6,但在其他情况下则不是。
例如,如果 postfix 发送邮件,或者我通过 telnet 或 ssh 连接到 Linode 上的另一台主机,我的 ipv6 地址就会显示在日志中。另一方面,如果我连接到我家里的本地服务器或 Digital Ocean 网络上的服务器,则使用 ipv4。
有人能解释一下何时以及如何确定建立连接时应使用 ipv4 还是 ipv6 吗?它是否因服务而异,还是这是中央配置的一部分?
答案1
通常使用主机名访问服务,这通常意味着使用 DNS 查找链接到该主机名的 IP 地址。对于 IPv4,将有 A 记录,对于 IPv6,将有 AAAA 记录。所有这些地址都应该提供相同的服务,与使用的协议无关。
因此,如果您向 Gmail 发送电子邮件,您的邮件服务器将查找 MX(邮件交换)记录gmail.com
。在我看来,这些记录是:
gmail.com. MX 5 gmail-smtp-in.l.google.com.
gmail.com. MX 10 alt1.gmail-smtp-in.l.google.com.
gmail.com. MX 20 alt2.gmail-smtp-in.l.google.com.
gmail.com. MX 30 alt3.gmail-smtp-in.l.google.com.
gmail.com. MX 40 alt4.gmail-smtp-in.l.google.com.
优先级最高的MX是gmail-smtp-in.l.google.com
,我们来看一下它的地址:
gmail-smtp-in.l.google.com. A 74.125.136.26
gmail-smtp-in.l.google.com. A 74.125.136.27
gmail-smtp-in.l.google.com. AAAA 2a00:1450:4013:c01::1b
因此,现在您的邮件服务器有三个地址可以使用。DNS 不会告诉您首选哪个地址。该选择取决于您的本地软件。关于要使用的算法,有一整套 RFC(RFC 6724),但通常归结为:在可用时使用 IPv6,否则使用 IPv4。
Postfix (≥ 2.9) 将在可用时同时使用 IPv4 和 IPv6,除非另有明确配置。它将首先尝试 IPv6,如果无法使用 IPv6 连接,它将使用 IPv4 连接。
自从发明以来,网络浏览器的工作方式已经发生了变化快乐眼球 / RFC 6555。由于 IPv6 上的连接问题会导致恼人的甚至无法正常工作的超时,因此浏览器将尝试使用 IPv6,但如果在 ±200ms 后没有收到任何消息,它将尝试同时使用 IPv4 进行连接。将使用第一个成功的连接。
当然:如果您使用的服务未在 DNS 中公布任何 IPv6 地址,则只会使用 IPv4。反之亦然。