Linux 下 curl -6 访问失败问题排查与解决

7–10 分钟

Linux 下 curl -6 访问失败问题排查与解决

最近在 Linux 上使用 IPv6 测试命令时遇到一个小问题:

curl -6 ip.sb

结果报错:

curl: (6) Could not resolve host: ip.sb

问题分析

这个报错提示 并不是 IPv6 出口不通,而是 DNS 解析失败。原因主要有以下几种可能:
1. 系统没有配置支持 IPv6 的 DNS,导致解析不到域名的 AAAA 记录。
2. /etc/resolv.conf 中的 DNS 仅能返回 IPv4 结果。
3. systemd-resolved 或 NetworkManager 自动覆盖了 DNS 配置。

由于我机器上 确实没有配置 IPv6 DNS,所以无法解析 ip.sb 的 IPv6 地址。

解决方法

1. 临时修改 /etc/resolv.conf

直接在文件中添加公共 IPv6 DNS:

sudo nano /etc/resolv.conf

添加如下内容:

nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844
nameserver 2606:4700:4700::1111
nameserver 2606:4700:4700::1001

保存后再次执行:

curl -6 ip.sb

即可正常返回当前的 IPv6 地址。

⚠️ 注意:有些系统中 /etc/resolv.conf 会被 NetworkManager 或 systemd-resolved 覆盖,重启后配置可能失效。


2. 使用 systemd-resolved 持久化配置

编辑配置文件:

sudo nano /etc/systemd/resolved.conf

在 [Resolve] 段落添加:

DNS=2001:4860:4860::8888 2001:4860:4860::8844
FallbackDNS=2606:4700:4700::1111 2606:4700:4700::1001

重启服务:

sudo systemctl restart systemd-resolved


3. 使用 NetworkManager 配置 IPv6 DNS

如果网络由 NetworkManager 管理,可以通过 nmcli 设置:

nmcli con mod “你的连接名称” ipv6.dns “2001:4860:4860::8888 2001:4860:4860::8844”
nmcli con mod “你的连接名称” ipv6.ignore-auto-dns yes
nmcli con up “你的连接名称”


验证

测试能否解析 AAAA 记录:

dig AAAA ip.sb

若能看到 2606:4700:… 这样的 IPv6 地址,则解析成功。
随后执行:

curl -6 ip.sb

即可返回本机的公网 IPv6 地址。


常见公共 DNS(IPv4 & IPv6)

🌍 Google Public DNS
• IPv4
• 8.8.8.8
• 8.8.4.4
• IPv6
• 2001:4860:4860::8888
• 2001:4860:4860::8844

☁️ Cloudflare DNS
• IPv4
• 1.1.1.1
• 1.0.0.1
• IPv6
• 2606:4700:4700::1111
• 2606:4700:4700::1001

🔒 Quad9 DNS(安全/隐私)
• IPv4
• 9.9.9.9
• 149.112.112.112
• IPv6
• 2620:fe::fe
• 2620:fe::9

🇨🇳 国内常用 DNS
• 阿里 DNS
• IPv4: 223.5.5.5, 223.6.6.6
• IPv6: 2400:3200::1, 2400:3200:baba::1
• 百度 DNS
• IPv4: 180.76.76.76
• IPv6: (暂无官方 IPv6 地址)
• 114 DNS
• IPv4: 114.114.114.114, 114.114.115.115
• IPv6: 240C::6666, 240C::6644

发表回复

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