AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1164632
Accepted
janeden
janeden
Asked: 2024-09-01 13:00:27 +0800 CST2024-09-01 13:00:27 +0800 CST 2024-09-01 13:00:27 +0800 CST

Firefox、Safari 和 curl 的本地服务器优先使用 IPv4,而不是 IPv6

  • 772

在我的双栈 LAN 中,绑定服务器解析本地域(*.something.internal)的 A 和 AAAA 记录:

# bind zone file db.internal
webserver1.something      IN      AAAA    2001:908:532:bca0:211:32ff:fee5:8627 
webserver1.something      IN      A       192.168.78.93

所有 LAN 网络服务器都监听 IPv4 和 IPv6。访问服务器时,IPv6 优先(如预期),但Firefox 和 Safari 中的本地客户端(也充当网络服务器)除外。Chrome 对所有服务器都使用 IPv6 地址。我使用了这三种浏览器中开发人员工具的“网络”选项卡来比较和验证行为。

我也在about:networking#dnslookuptoolFirefox 中使用了该功能,Firefox 仅为我的客户端持续反转 IPv4 / IPv6 IP 的顺序。

下一步,我使用 curl 进行了检查,看到了(几乎)相同的事情。curl 首先解析 IPv6,然后继续使用本地机器的 IPv4 地址:

# This is my local client and webserver
curl -Iv https://static.something.internal/
* Host static.something.internal:443 was resolved.
* IPv6: 2001:908:532:bca0:10e0:6db1:72f1:9c2f
* IPv4: 192.168.78.55
*   Trying 192.168.78.55:443...
* Connected to static.something.internal (192.168.78.55) port 443

# This is another webserver on the LAN
curl -Iv https://nuc.something.internal/
* Host nuc.something.internal:443 was resolved.
* IPv6: 2001:908:532:bca0:1e69:7aff:feaf:7455
* IPv4: 192.168.78.42
*   Trying [2001:908:532:bca0:1e69:7aff:feaf:7455]:443...
* Connected to nuc.something.internal (2001:908:532:bca0:1e69:7aff:feaf:7455) port 443

为什么 Firefox、Safari 和 curl 会优先为本地计算机使用 IPv4(与 Chrome 不同)? 这可能与请求是从域解析到的同一个 IPv6 地址发送的这一事实有关(即使 curl 在强制使用时毫无问题地使用此地址curl -Iv -6 https://static.something.internal)?

/etc/hosts注意:如果我在本地机器上填充(使用127.0.0.1和::1作为其域)而不是使用我的 DNS 服务器,则所有应用程序都会优先考虑 IPv6(使用 Firefox 和 Safari 重复了以下 curl 测试):

curl -Iv https://static.something.internal/
* Host static.something.internal:443 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
*   Trying [::1]:443...
* Connected to static.something.internal (::1) port 443
domain-name-system
  • 2 2 个回答
  • 89 Views

2 个回答

  • Voted
  1. janeden
    2024-09-05T15:41:05+08:002024-09-05T15:41:05+08:00

    正如我已经评论的那样:curl 团队已确认该行为源于返回的有序列表getaddrinfo()(并且已实施更改)。我向 Mozilla 提交了一份有关 Firefox 的报告,该报告仍悬而未决。

    • 0
  2. Best Answer
    Greg Askew
    2024-09-05T16:15:11+08:002024-09-05T16:15:11+08:00

    这可能需要考虑到在操作系统级别可以选择首选项。Windows 和 Linux 都具有优先使用 IPv6 而不是 IPv4 的机制,反之亦然。然后使用 getaddrinfo() 将该信息呈现给应用程序。

    应用程序可以覆盖吗?我怀疑是的,但这似乎不是新领域。

    看:

    https://weblog.lkiesow.de/20220311-make-linux-prefer-ipv4.html

    https://learn.microsoft.com/en-us/troubleshoot/windows-server/networking/configure-ipv6-in-windows

    https://www.ietf.org/rfc/rfc3484.txt

    1. 算法运行的环境

    “我们的地址选择背景源自最常见的实现架构,该架构将目标地址的选择与源地址的选择分开。因此,我们针对这些任务有两种不同的算法。这些算法旨在很好地协同工作,并且它们共享一种管理策略覆盖机制。

    “在此实现架构中,应用程序使用 getaddrinfo() 之类的 API [10],这些 API 将地址列表返回给应用程序。此列表可能包含 IPv6 和 IPv4 地址(有时表示为 IPv4 映射地址)。然后,应用程序使用 connect() 或 sendto() 将目标地址传递给网络堆栈。然后,应用程序通常会尝试列表中的第一个地址,循环遍历地址列表,直到找到一个有效的地址。无论如何,网络层永远不会处于需要从多个备选方案中选择一个目标地址的情况。”

    • 0

相关问题

  • Solaris DNS

  • resolv.conf 在经过一段时间后被更改

  • 为什么有些网站的网址中没有“www”就无法显示?[关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve