IPv6 源地址选择在 Linux 中如何工作?

IPv6 源地址选择在 Linux 中如何工作?

在连接到另一个站点时,Linux 如何从众多 IPv6 源地址中选择使用哪一个?我正在从配置了 6to4 和非 6to4 地址的主机打开到 6to4 和非 6to4 站点的连接。

我的 Linux 机器配置了 6to4 和非 6to4 IPv6 地址,当连接到另一个 6to4 主机时,它确实似乎选择了 6to4 源地址,而当连接到非 6to4 主机时,它选择了非 6to4 地址。这样速度更快,因为 6to4 链路的两个方向都可以绕过隧道服务器。我不确定我是否只是运气好,或者这是预期的行为。

一台具有相同 IPv6 路由通告的 iPad 甚至在连接到 ipv6.he.net 等网站时也选择使用 IPv4,因此我不再通告 6to4 路由。本地路由器仍然有自己的 6to4 网关,可以绕过传出 6to4 的隧道。

答案1

gai.conf关于这一点最好的文献来自 Ulrich Drepper,他描述了RFC 3484、glibc 的连接获取地址信息(3)和内核地址选择。

http://www.akkadia.org/drepper/linux-rfc3484.html

顺便说一句:iproute2 在更高版本中支持gai.conf文件使用ip addrlabel show命令。你可以在本文中找到一些示例:

问候
Bernd

答案2

路由表,此外范围标识符用于链路本地范围地址。

http://en.wikipedia.org/wiki/Routing_table

http://en.wikipedia.org/wiki/IPv6_address#Link-local_addresses_and_zone_indices

编辑:有趣的是,我最近发现 TCP 堆栈的要求比 UDP 或数据报更严格。如果主机上的地址很明显,那么使用 UDP 时,您可以经常避免使用范围标识符,但是 TCP 根本不允许您有这种自由,必须始终指定标识符。

答案3

我能找到的最好的文档是 RFC 3484 IPv6 的默认地址选择及其修订草案https://datatracker.ietf.org/doc/html/draft-ietf-6man-rfc3484-revise-03

相关内容