Mic*_*ton 124 networking ipv6 subnet
这是一个关于 IPv6 子网划分的规范问题。
有关的:
我对IPv4 Subnetting了解很多,当我准备(部署|工作)IPv6 网络时,我需要知道这些知识中有多少是可以转移的,以及我还需要学习什么。乍一看,IPv6 似乎比 IPv4 复杂得多。所以我想知道:
Cel*_*ada 149
关于 IPv6 子网划分,首先应该提到的是需要一种不同的思维模式。在IPv4中你通常想一想有多少地址你可以和你怎么能足够他们分配给每个终端用户。在IPv6中,你通常会想到有多少/64-子网您有可用以及如何将它们分配给最终用户。您几乎从不担心在给定的子网中将使用多少个 IP 地址。除了一些特殊情况,比如点对点链接,每个子网的可用地址比它需要的要多得多,所以你只需要担心分配子网,而不是其中的主机。
IPv6 子网通常是/64因为这是SLAAC(无状态地址自动配置)工作所必需的。即使在不使用 SLAAC 的情况下,也可能有其他原因需要使用/64. 例如,可能有一些终端用户设备只是假设 /64,或者路由子网比/64某些路由器上可能低效的更窄,因为路由器实现者已经优化了/64更宽的路由的情况,以节省路由表内存。
为什么推荐使用/127点对点链接
对于点对点链路的特定情况,/127建议而不是/64为了避免漏洞,其中寻址到子网上数以亿计未使用地址中的任何一个的数据包会导致不需要的邻居请求请求和表条目,从而可能淹没路由器. 这种地址错误的数据包可能是恶意的或意外的。但即使您实际上将点对点链接配置为/127,有些人还是主张分配一个整体/64以保持一致。
为什么虚拟机的子网比 窄/64?
我不知道为什么虚拟机的子网比/64. 也许是因为托管服务提供商假定服务器就像一个最终用户并且只需要一个/64子网,而没有预料到服务器实际上是需要内部路由拓扑的 VM 集合?这也可以简单地作为使寻址计划更容易记忆的问题来完成:主机获取PREFIX::/64,然后每个 VM 获取PREFIX:0:NNNN::/96NNNN 对 VM 唯一的位置,并且 VM 可以随意分配PREFIX:0:NNNN:XXXX:YYYY。
我可以直接从 IPv4 子网映射到 IPv6 子网吗?例如,IPv4 是/24直接对应于 IPv6/56还是/120?
从寻址和路由如何工作的低级角度来看,前缀长度在 IPv6 和 IPv4 中具有相同的含义。在该级别上,您可以进行类比,例如“IPv4/16使用一半的位作为网络地址,一半的位用于主机地址,就像/64IPv6中的 a ”。但这种比较并不恰当。IPv6 中出现了强大的约定,这使得网络大小的划分看起来更像是 IPv4 中的有类网络的旧世界。可以肯定的是,IPv6 没有重新引入有类寻址,其中地址的最重要的几位强制特定的网络掩码,但 IPv6确实具有某些 [事实上/传统] 标准网络大小:
/64:单个子网的基本大小:LAN、WAN、Web 虚拟主机的地址块等......“正常”子网永远不会比/64. /64由于 a/64的主机地址价值远远超出我们想象的需要,因此没有子网会比预期更宽(更短的前缀)。/56: 一组256基本子网。尽管当前的政策允许 ISP 向/48每个最终用户分发大到一个块,并且仍然认为他们的地址使用是合理的,但一些 ISP 可能(并且已经这样做)选择将一个分配/56给消费级客户,作为分配批次之间的折衷子网和地址经济。/48:一个65536基本子网块和每个 ISP 客户终端站点应接收的推荐块大小。/32:大多数 ISP 每次从区域地址注册中心请求更多地址时都会收到的默认块大小。在服务提供商和企业网络内部,可以看到比这 4 种多得多的前缀长度。查看这些网络中路由器的路由表时,IPv4 和 IPv6 有很多共同点,包括路由工作的大部分方式:较长前缀的路由覆盖较短前缀的路由,因此可以聚合(缩短)和钻取向下(延长)路线。就像在 IPv4 中一样,路由可以聚合或汇总为具有较短前缀的较大块,以最小化路由表的大小。
IPv4 和 IPv6 之间映射的另一个问题是如何协调双栈机器上的 IPv4 和 IPv6 分配,以便可以轻松理解寻址计划。到目前为止,肯定有常用的约定来执行此操作:将 IPv4“子网号”嵌入到 IPv6 前缀的一部分中,使用BCD(例如10.0.234.0/24变成2001:db8:abcd:234::/64)或二进制(10.0.234.0/24变成2001:db8:abcd:ea::/64)。
我的接口有几个 IPv6 地址。它们的子网必须相同吗?
绝对不!IPv6 主机有望通过同时拥有来自不同子网的多个 IP 地址实现多宿主,就像 IPv4 一样。如果它们是使用 SLAAC 自动配置的,那么不同的子网可能来自不同路由器的路由器广告。
为什么我有时会在 IPv6 地址中看到 % 而不是 /,这是什么意思?
你不会看到一个而不是另一个。它们有不同的含义。斜线表示前缀(子网),意思是所有以相同n位开头的地址块。没有斜线的地址是主机地址。您可能会认为这样的地址/128末尾有一个隐含的,这意味着指定了所有 128 位。
百分号伴随链接本地地址。在 IPv6 中,除了可能拥有的任何其他 IP 地址之外,每个接口都有一个本地链路地址。但问题是,链接本地地址总是无一例外地在fe80::/10块中。但是,如果我们尝试使用链路本地地址与对等方对话,而本地主机有多个接口,我们如何知道使用哪个接口与该对等方对话?通常路由表会告诉我们哪个接口用于特定的前缀,但在这里它会告诉我们fe80::/10每个接口都可以到达。
答案是我们必须使用语法告诉它使用哪个接口address%interface。例如,fe80::1234:5678:8765:4321%eth0。
我是否浪费了太多子网?我们不是要再次耗尽吗?
没人知道。谁能预知未来?
但考虑到这一点。在 IPv6 中,可用子网的数量是IPv4中可用的单个地址数量的平方。这真的很多。不,我的意思是很多!
但是仍然:我们会自动/32向任何请求一个的 ISP 分发一个,我们/48向每个 ISP 客户分发一个。也许我们在夸大其词,毕竟我们会浪费 IPv6。但是有一个规定:到目前为止,只有八分之一的 IPv6 空间可供使用:2000::/3。这个想法是,如果我们把第一个八分之一搞得一团糟,我们必须彻底修改自由分配政策,我们可以在遇到麻烦之前再尝试 7 次。
最后:IPv6 不必永远持续下去。也许它的生命周期会比 IPv4 更长(已经是令人印象深刻的生命周期了,而且还没有结束),但就像所有技术一样,它总有一天会变得不再重要。我们只需要做到这一点。
tyl*_*erl 48
首先,来自 RFC 的一些 ASCII 艺术来建立术语:
| n bits | m bits | 128-n-m bits |
+------------------------+-----------+----------------------------+
| global routing prefix | subnet ID | interface ID |
+------------------------+-----------+----------------------------+
Run Code Online (Sandbox Code Playgroud)
全局路由前缀通常标识地址所属的整个网络。它通常是 48 位。接口 ID 标识给定的网络接口。它通常是 64 位。剩下的 16 位是您的子网 ID。
除了以二进制 000 开头的地址以外的所有全球单播地址都有一个 64 位的接口 ID 字段。
IPv4 寻址计划的一个重要部分是决定每个子网前缀的长度。与 IPv4 不同,IPv6 寻址架构 [RFC4291] 指定所有使用全局唯一地址和 ULA 的子网始终具有相同的 64 位前缀长度。
因此,忽略 000 前缀异常,接口 ID始终精确为64 位。这是另一种说法,所有本地广播网络总是 64 位。如果您有 IPv6 地址,则其网络掩码始终为64 位。永远不会更多,永远不会更少。如果分配给您的地址空间大于该地址空间(比 64 位短的网络掩码),则假定您将该地址空间划分为 64 位网络并自行处理路由。如果你得到的网络比那个更小(更长的网络掩码),那么有人就搞砸了。
通常,IPv6 地址是自动配置而不是分配的。路由器会通告可用的网络前缀(路由前缀+子网ID:前64位),您的计算机将使用自己的唯一标识符填充后64位。您的计算机如何提供唯一标识符?有几种可能性,最常见的是使用您的接口的 MAC 地址。您将 MAC 分成两半(供应商一半/串行一半),翻转供应商端的通用本FF:FE地位,然后将它们在中间重新连接在一起。于是00:30:48:01:23:45变成0230:48ff:fe01:2345。现在将公布的 64 位网络前缀放在它的左侧,你就有了你的 IP 地址。
这里的重点是,如果你遵循这个方案,IP 地址冲突就不会发生。由于给定广播网络上的每个设备都需要一个唯一的 MAC 地址才能工作,将接口 ID 绑定到 MAC 地址意味着只要广播流量不冲突,IPv6 地址也不会冲突。使用 64 位(而不仅仅是专用于 MAC 地址的 48 位)提供了一些超出此方案提供的地址的回旋余地(还有其他几个)。
不。除非你坏了。好吧,您可能有理由根据本地要求为现有网络设置手动路由。但请记住,这样做可能会造成混乱:
使用 /64 以外的子网前缀长度会破坏 IPv6 的许多功能,包括邻居发现 (ND)、安全邻居发现 (SEND) [RFC3971]、隐私扩展 [RFC4941]、移动 IPv6 的一部分 [RFC4866]、协议独立多播 - 带有嵌入式 RP [RFC3956] 的稀疏模式 (PIM-SM),以及 IPv6 中介的站点多宿主 (SHIM6) [SHIM6] 等。目前正在开发或正在提议的许多其他功能也依赖于 /64 子网前缀。
....
然而,一些网络管理员在连接路由器的链路上使用了比 /64 更长的前缀,通常在一个点对点链路上只有两个路由器。在所有地址都是通过手动配置分配的链路上,并且链路上的所有节点都是网络已知的路由器(而不是终端主机),管理员不需要任何依赖 /64 子网前缀的 IPv6 功能,这能行得通。不建议在一般用途中使用长于 /64 的子网前缀,并且将它们用于包含终端主机的链接将是一个特别糟糕的主意,因为很难预测主机将来会使用哪些 IPv6 功能。
您可能想要掩盖 RFC 3627 - 认为有害的路由器之间使用 /127 前缀长度。然后查看随后的RFC 6164 - 在路由器间链接上使用 127 位 IPv6 前缀。
反对在路由器上使用长于 /64 的前缀与路由器自动配置在极少数情况下可能失败有关。反对使用短于 /127(仅限 2 个主机)的前缀与许多潜在的拒绝服务问题有关,这些问题与发送到未路由地址的数据包有关。由于现实世界中的拒绝服务问题比理论上的自动配置故障更糟糕,/127 是新宠。
我应该更改现有的路由器链接以使用 /127 吗?
如果您控制 IPv6 路由器,我建议您阅读两个 RFC(它们很短!)并自行决定。
例如,IPv4 /24 是否直接对应于 IPv6 /56 或 /120?
其实,是。还记得我们之前故意忽略的 000 前缀吗?好吧,这是它的用途:
在双栈系统(同时激活 IPv4 和 IPv6 栈的系统)上,您可以使用 IPv6 机制来表示 IPv4。他们称之为“ IPv4 映射的 IPv6 地址”。模式是全零,后跟FFFF,后跟 32 位 IPv4 地址。
所以,192.168.100.21变成::FFFF:C0A8:6415——或者更简单地说: ::FFFF:192.168.100.21。由于该右侧位代表 IPv4 地址,因此传统上使用点分十进制形式写出。
由于这是一个实际的 IPv4 地址,它仍然使用 IPv4 标头等,这意味着必须存在 IPv4 堆栈,必须设置 IPv4 路由,等等。优点是您可以使用单一地址结构来表示 IPv4 和 IPv6 地址,这可以简化应用程序开发。就网络而言,它没有任何区别。
Oli*_*pro 20
IPv6 是 128 位,为什么 /64 是主机推荐的最小子网?
此前缀大小最初是在较早的 RFC 中推荐的 - 此后对该策略进行了修订,其中考虑了邻居发现攻击的问题,并且使用 /126 是一种有效的缓解措施 - 尽管如此,如果您正在设置与路由流量的唯一目的,另一种选择是坚持使用 /64 和该子网的防火墙。更好的是,为自己分配一个池,您将从该池中提取 /64 个子网,并将整个池作为您边缘的黑名单目的地(以及可能来自敌意的任何其他地方)
为什么建议使用 /127 用于路由器之间的点对点链接,为什么过去不建议使用?我应该更改现有的路由器链接以使用 /127 吗?
/127 不建议在路由器之间使用,也从不建议使用 - 全路由器 Anycast 地址是子网的全零地址;这意味着 /127 在技术上仅在两台机器之间有效,其中一台不充当路由器。/126 当然没问题。
然而,无论如何,我不建议切换现有的 /64 链接,除非您的设备容易受到 Neighbor Discovery 缓存泛洪攻击 - 即使在这种情况下,首先要确定您是否真的要使用该 /64 进行互联网连接,如果答案是否定的,只需防火墙它。
为什么要为虚拟机配置小于 /64 的子网?
这打破了 SLAAC 和 RA,除非你真的,真的知道你在做什么,你不太可能有任何好的理由这样做 - 也许你的上游只给了你一个 /64 但如果是这样,你需要去回到他们那里并要求更多,如果他们想向您收费,开始寻找新的提供商,也可能向他们发送一些链接到相关 RFC 的尖刻电子邮件。
在其他情况下我会使用小于 /64 的子网吗?
诚实地?可能不是。如果我认为较小的子网更适合用于防止 NDP 攻击以外的目的的正当理由,我将编辑此部分。
相反,在某些情况下,您不希望使用小于 /64 的子网 - 特别是在您运行带有硬件转发设备的环境(想想名牌路由器和 L3 交换机)的任何地方 - 有些将无法进行前缀的硬件路由长于 /64,其他人必须将操作拆分为多个比较,因此,您至少应该尽力确保 /64 是您的 (OSPF/ISIS/EIGRP/etc.) 骨干网中最长的前缀。
我可以直接从 IPv4 子网映射到 IPv6 子网吗?例如,IPv4 /24 是否直接对应于 IPv6 /56 或 /120?
正式地说,::ffff:xxxx 是 IPv6 映射的 IPv4 地址的格式——当然还有许多转换机制,即 6to4 及其相关的 6rd,出于目的将 IPv4 地址映射到全局 IPv6 地址通过创建从其承载的 IPv4 地址派生的 IPv6 前缀来提供基于 IPv4 的 IPv6 访问。
我的接口有几个 IPv6 地址。它们的子网必须相同吗?
不,在同一接口上使用不同的地址和子网大小应该不是问题。如果是,则实现有问题。当然,更好的问题是你为什么要这样做?
为什么我有时会在 IPv6 地址中看到 % 而不是 /,这是什么意思?
这是一个定界符,通常应用于链接本地地址 (fe80::/12) - 由于相同的链接本地地址可以合法地存在于多个接口上,因此 % 定界符用于允许指定所指的接口。Linux 通常在执行涉及本地链接的操作时强制指定接口。Windows Vista/2008 及更高版本更聪明一点,除非本地链接不唯一,否则不会抱怨。
我是否浪费了太多子网?我们不是要再次耗尽吗?
不。这是一匹被鞭打WAAAAAAAAAY太多次的死马——当前的全球 IPv6 互联网是 2000::/ 3——如果以某种方式,地球上的每个 RIR 都设法耗尽它们的资源,IANA 可以开始使用更多的前缀地址股票。所以不,我们不会用完空间,即使我们这样做,也需要轻弹一下才能打开新的前缀,而不是技术上的变化。这个问题真正突出的唯一一件事是人类的大脑无法完全理解地址空间是多么可笑。
IPv6 子网划分与 IPv4 子网划分还有哪些其他主要方式?
除了不关心您使用了多少空间之外,请记住没有广播地址,并且“子网零”地址现在是所有路由器的任播地址(这基本上是隐式存在于所有配置节点上的地址)转发 IPv6 数据包) - 这有一个有用的副作用,允许您使用全零地址作为网络中的默认路由(不,它不会导致数据包重复,它是任意广播,而不是多播) - 请记住尽管主机可能每隔几秒钟就会在路由器之间切换,因此如果连接跟踪未在它们之间同步,则这不适用于有状态的防火墙设置。
除此之外,另一个主要区别是 IPv6 关心重复地址和死邻居 (NUD) - 因此,与 IPv4 不同,如果主机可以确定链路上的另一个节点已经在使用该地址,它将拒绝使用该地址. 另一方面,如果您正在配置静态路由,则 NUD 很有用 - 您实际上可以将多个单独的路由定义为具有不同度量的前缀,并且它们实际上会起作用,这与 IPv4 不同,在 IPv4 中,无论下一个路由是否为最低度量路由,都将使用-hop 是死的还是活的(尽管对于某些使用 ARP 来验证路由的 IPv4 实现(例如 Cisco 和其他主要路由器供应商)来说可能并非如此)
TLDR;IPv6 检测重复地址和无法访问的邻居。全零地址是全路由器任播,没有广播之类的东西,全一是常规地址。