【问题标题】:Link-local and global IPs on IPv6 interfacesIPv6 接口上的链路本地和全局 IP
【发布时间】:2011-02-06 11:25:00
【问题描述】:

我目前正在尝试了解 IPv6 地址的工作原理。有分别用于小型和组织网络的链接本地和站点本地地址。但是,如果其中一个客户端也可以访问 Internet,则需要两个 IP,对吗?一个链接/本地站点和一个全局地址。接口和路由器如何管理它?一个接口需要两个 IP,因为 IPv6 中没有 NAT。

【问题讨论】:

  • 这宁属于serverfault.com;也许版主会转移问题,或者您可以在那里重新提问。
  • 这个问题肯定有与编程相关的方面。某些应用程序可能需要将接口地址列表折叠到某种算法中,当您从getifaddrs() 取回它们时,这有助于了解您正在使用哪种地址。
  • link-local 不适用于小型网络,它们适用于未配置的网络。重要的缺陷是无法在 DNS 中使用本地链接地址。

标签: ipv6


【解决方案1】:

一般来说,接口有一个本地链路范围的单播地址和零个或多个全局范围的单播地址。 (它们也可能是某些有限数量的多播组的成员。)地址可以手动分配,也可以像 IPv4 中那样由 DHCPv6 分配,但有时(并非总是)在路由器通告允许时自动生成地址。一些主机实现会自动为路由器通告的每个前缀生成一个持久的全局地址,以及一个与之配套的辅助隐私地址,参见RFC 4191。在使用 DHCPv6 分配地址的情况下,主机可能会请求使用一个或多个临时地址来代替隐私地址。

不要使用站点本地地址。它们已被RFC 3879 弃用,主要是因为sin6_scope_id 字段对于站点本地地址没有明确定义。在从getifaddrs() 返回的列表中看到它们的应用程序可能应该将它们与标准错误流的诊断消息一起丢弃。应用程序应该期望网络管理员将使用唯一本地地址 (ULA) 而不是站点本地地址,c.f. RFC 4941.

ULA 地址的可达性通常不能由应用软件决定。关于它们,您唯一可以确定的是,任何通过全球公共无默认区域的路径都无法到达它们。它们可以从 Internet 上的任何地方到达,在这些地方,到 ULA 前缀的路由在自治系统之间的双边协议中进行交换。另一方面,它们通常会由 IPv6 家庭网关发布,仅供用户本地使用,并且在家庭以外的任何地方都无法访问,c.f. I-D.ietf-v6ops-ipv6-cpe-router.

【讨论】:

    【解决方案2】:

    每个接口都有一个本地链接地址和可选的一个或多个公共或站点本地地址。看起来像这样:

    $ ip -o -6 addr show dev eth0
    eth0    inet6 2001:abcd:ef::1/64 scope global (..)
    eth0    inet6 fe80::1234:5678:2/64 scope link (...)
    

    发送内容时,发送到链接本地地址(即fe80::/64)的所有内容都从链接本地地址发送,其他所有内容都来自全局地址。

    (选择并不总是可能的:例如,如果回答 ping,则无论是哪个地址,回答的源 IP 都将是请求的目标 IP。)

    【讨论】:

    • 投反对票,因为站点本地地址已被 RFC 3879 弃用,不应使用。大多数 IPv6 主机实现无论如何都不能正确处理它们。
    • 我不同意这应该被否决,@phihag 指的是链接本地地址而不是站点本地地址。换句话说,如果我发送给另一个fe80::/64,那是有效的。
    猜你喜欢
    • 1970-01-01
    • 2018-02-26
    • 2011-03-05
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多