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
发表回复