Wishlist 0 ¥0.00

IPv6简单走两步—认识认识IPv6地址

一、IPv6编址概述

 

    IPv6地址一共128位,因此地址空间是相当庞大的,可提供给PC、无线IP电话、机顶盒、视频设备、安保监控设备等等。IPv6地址不再像V4那样使用“点分十进制”的格式来表现,而是使用“冒号分隔十六进制”格式表示:
    2001:0da8:0207:0000:0000:0000:0000:8207
乍一看这地址确实很长,书写起来有诸多不便,IPv6定义了地址简写方式:

20170804091754958001.jpg

20170728170832096001.gif 二、IPv6报文头部

20170804091843038001.jpg

1. IPv4存在的问题

    IPv6单播地址就是标识一个节点,或者网络设备的一个接口的地址,目的地址为单播地址的报文会被送到被标识的网卡或设备接口。

    2. 组播地址(Multicast Address)
    组播地址用于标识多个接收者,目的地址为组播地址的报文会被送到加入该组播组的所有用户,这与IPv4中的组播概念是完全一样的。

    3. 任播地址(Anycast Address)
    单播地址只能被配置在网络中单一的节点上,不能同时配置给多个节点。而任播地址则可,它标识多个接口,目的为任播地址的报文会被送到最近的一个被标识接口,这里所谓的“最近”是通过路由协议的开销来判断的。任播地址没有独立定义的地址空间,他使用单播的地址空间。

    4.IPv6没有定义广播地址


20170804092052374001.gif 2.1 单播地址

    1.可聚合全局单播地址 Aggregatable Global Unicast Address
    相当于IPv4中的公网地址。目前已经分配的可聚合全局单播地址前缀都是以001开头的,(2000::到 3FFF:FFFF:….FFFF)
以下是这个区间地址的分配情况:

20170804092157109001.jpg

    一般从运营商处申请到的IPv6地址空间为/48,再由自己根据需要进一步规划:
如下图,分配给终端的IPv6地址可能是这样的结构:

 

20170804092221419001.jpg

    

    2.站点本地地址 Site-local address
    类似IPv4中的私有地址。该地址以FEC0::/10为前缀。也就是说最高10 bits固定为1111111011,紧跟在后面的是连续38 bits 的0。因此,对于站点本地地址来说,前48bits 总是固定的。在接口ID和高位48bits特定前缀之间有16bits 子网ID字段,供机构在内部构建子网。站点本地地址不是自动生成的,是手工配置的。
    站点本地地址只能够在本地或者私有环境中使用,不能访问公网。
    RFC 1884 定义了fec0::/10 地址块用于site-local地址,这些地址只能够在私有的IPv6“站点”内使用,但是草案对Site描述不清楚导致路由规则的混乱,因此RFC3879弃用了该地址块。

    3.唯一本地地址 Unique Local Address
    ULA,唯一本地地址,概念上相当于私有IP,仅能够在本地网络使用,在IPv6 Internet上不可被路由。上面提到的站点本地地址由于起初的标准定义模糊而被弃用,而后RFC又重新定义了唯一本地地址以满足本地环境中私有IPv6地址的使用。
    在RFC4193中标准化了一种用来在本地通信中取代站点本地单播地址的类型。ULA拥有固定前缀FC00::/7,分为两块:FC00::/8暂未定义,FD00::/8定义如下:

20170804092400293001.jpg

 

    4.链路本地地址(Link-local address)
    链路本地地址是一类非常重要的地址,它的有效范围仅仅在所处链路上。
    以FE80::/10为前缀,11-64位为0,外加一个64bits的接口标识(一般是EUI-64)。

20170804093243395001.jpg
 

    IPv6主机的网卡,或者网络设备的接口可以有多个可聚合全局单播地址,但是这些接口要能够正常工作,必须有一个链路范围内唯一的Link-Local地址,该地址由于其稳定性、链路唯一性,被用于自动地址配置、邻居发现、路由器发现等机制中。
    当一个接口启动IPv6协议栈时,接口会自动配置一个链路本地地址。这种机制使得两个连接到同一链路的IPv6节点不需要做任何配置就可以通信(使用Link-Local地址)。缺省网关建议使用链路本地地址,因为这个地址是最稳定的。
    Link-Local地址非常重要,设备接口要正常工作就必须具备Link-Local地址,而且勿随意变更。
    如果设备接口上并未配置全局单播IPv6地址,则需使用ipv6 address auto link-local命令手工使设备自动产生一个Link-Local地址,在我司防火墙、交换机等设备上,该自动生成的Link-Local地址采用EUI64规范的接口ID生成。如果设备接口上配置了全局单播IPv6地址,则无需使用上述命令让设备自动生成Link-Local地址,一旦接口获得IPv6全局单播地址,会自动产生Link-Local地址。
    Link-Local地址仅在链路范围内有效,因此原则上保持链路范围内唯一即可,但是如果要手工配置链路本地地址,尽量保证该地址的唯一性 。

    5.特殊的地址
    未指定地址,也就是全0地址“::/128”或者“0:0:0:0:0:0/128”  

    该地址作为某些报文的源IP地址,比如作为重复地址检测时DAD时发送的邻居请求报文的源地址,或者DHCPv6初始化过程中客户端所发送报文的源IP。

    回环地址 0:0:0:0:0:1/128   或者::1/128
    指代本地回环,发往::/1的数据包实际上就是发给本地,可用于本地协议栈回环测试。

    IPv4兼容地址
    在过渡技术中会使用到一些包含IPv4地址的IPv6地址,为了让IPv4地址显得更加突出一些,定义了内嵌IPv4地址的IPv6地址格式。内嵌IPv4地址格式是过渡机制中使用的一种特殊表示方法。在这种表示方法中,IPv6地址的部分使用十六进制表示,IPv4地址部分可用十进制格式。
    0:0:0:0:0:0:192.168.1.2或者::192.168.1.2(96个0)
    IPv4兼容地址用于过渡机制,如自动IPv4兼容隧道 及NAT-PT。

20170804092052374001.gif2.2 接口ID

 

    1.接口ID的概念
    接口ID为64bits,用于标识链路上的接口,在每条链路上接口ID必须唯一。接口ID有许多用途,最常见的用于就是黏贴在链路本地地址的前缀后面,形成128bits的接口链路本地地址。或者在无状态自动配置中,黏贴在获取到的IPv6全局单播前缀后面,构成接口的全局单播地址。

    2.接口ID的设置
    接口ID的设置方式主要有:

    1 ) 根据IEEE的EUI-64规范将接口的48比特MAC地址转化为64比特的接口ID。
    2 ) 手工为接口配置接口ID
    3 ) 某些系统支持自动生成随机接口ID(例如Windows7)

    3.通过EUI-64规范从MAC地址转换到接口ID

20171027141415339.jpg

    每个以太网网卡或者接口都有一个唯一的MAC地址,如果能将接口的MAC地址衍生出接口ID自然是极好的,但是MAC地址48比特,而接口ID则是64比特,怎么衍生?EUI64规范定义了如何使用MAC地址产生64位的接口ID。
    将48bits的MAC对半劈开,插入“FFFE”,然后对从左数起的第7位,也就是U/L位取反。该比特位确定48bits的MAC地址的唯一性与否。一个以太网地址可以有两种含义,地址可被全球管理或本地管理。全球管理指全球唯一的例如厂商MAC,本地管理指使用自己的值临时写的MAC地址,在这种情况下,这个特殊的位=1表示本地管理;为0表示全球管理。但是在EUI-64格式中,U/L的含义正好相反,0表示本地管理,1表示全球管理,所以使用EUI-64格式的地址IPv6地址,U/L位为1,则地址是全球唯一的,如果为0,则为本地唯一。这就是这里为什么要取反的原因。

20170804092052374001.gif2.5 组播地址

    1.地址结构
    组播地址最高位前8位固定为全1,也就是“FFXX::/8”

20171027141557272.jpg 

    2.知名的组播地址
    FF01::1节点本地范围所有节点组播地址
    FF01 ::2节点本地范围所有路由器组播地址
    FF02::1链路本地范围所有节点组播地址
    FF02::2链路本地范围所有路由器组播地址
    ……

    3.IPv6组播地址的MAC地址映射

20171027141646273.jpg


    4.被请求节点组播地址Solicited-node
    在IPv6组播地址中,有一种特别的组播地址,叫做Solicited-node地址(被请求节点组播地址)。
Solicited-node地址是一种特殊用途的地址.主要用于重复地址检测(DAD)和替代IPv4中的ARP。
Solicited-node地址由前缀FF02::1:FF00:0 / 104和ipv6单播地址的最后24位组成。
    一个IPv6单播地址对应一个Solicited-node地址。Solicited-node地址有效范围为本地链路范围。 
    地址格式: FF02:0:0:0:0:1:FFXX:XXXX,具体的对应关系如下:
 

20171027141723797.jpg

20170804092052374001.gif2.6 节点及路由器必须具备的IPv6地址 

IPV6地址格式详解

<IPV6地址的表示方法>
IPv4  点分十进制      32bit
IPv6  冒号分十六进制  128bit
  
0000:0000:0000:0000:0000:0000:0000:0000=>::
0000:0000:0000:0000:0000:0000:0000:0001=>0:0:0:0:0:0:0:1=>::1
2001:0000:0000:1234:0000:0000:0567:00ff=>2001::1234:0:0:567:ff   只能有一个::
fe80:0000:0000:0000:0000:0000:0000:0009=>fe80::9

内嵌IPV4地址的IPV6地址
1、IPV4兼容的IPV6地址--用于在IPV4网络上建立自动隧道,以传输IPV6数据包。
   其中高96bit设为0,后面跟32bit的IPV4地址
   0000:0000:0000:0000:0000:0000:206.123.31.2
   0000:0000:0000:0000:0000:0000:ce7b:1f01
   由于这种机制不太好,现在已经不再使用,转而采用更好的过渡机制
2、映射IPV4的IPV6地址--仅用于拥有IPV4和IPV6双协议栈节点的本地范围
   其中高80bit设为0,后16bit设为1,再跟IPV4地址
   0000:0000:0000:0000:0000:ffff:206.123.31.2
   0000:0000:0000:0000:0000:ffff:ce7b:1f01

URL的IPV6地址表示
   为了区分IPV6地址中的冒号和端口号前的冒号,要把IPV6地址用[]括起来
   <www.example.net:8080/index.html>
   <https:[2001:410:0:1:250:fcee:e450:33ab]:8443/abc.html>

IPV6中掩码的表示:
在IPV6中掩码只能使用CIDR表示法
2001:410:0:1::45ff/128
2001:410::1/64
注意:在IPV6中没有广播地址和网络号保留地址

<IPV6的地址类型>
单播--Unicast : one to one
·单播地址用于一对一的连接
·IPv6单播地址有以下六种类型:
  -Unspecified Address                    0:0:0:0:0:0:0:0/128 => ::/128
  -Loopback Address                     0:0:0:0:0:0:0:1/128 => ::1/128
  -IPv4 Compatible Address                 ::192.168.30.1  => ::C0A8:1E01
  -Link Local Address                    FE80::/10(前10位以FE80开头)
  -Site Local Address (Private)              FEC0::/10
   -Aggregate Global Unicast Address   2xxx:xxxxx/3  -  3FFF: :FFFF
    2001::/16  IPV6因特网地址
    2002::/16  6to4过渡地址

以下是一些单播地址的具体说明:
本地链路地址:link-local address
当在一个节点启用IPV6,启动时节点的每个接口自动生成一个link-local address
其前缀64位为标准指定的,其后64位按EUI-64格式来构造
注意:在本链路上,路由表中看到的下一跳都是对端的Link Local地址,不是公网IP地址

前缀:FE80::/10
范围:只能在本地链路使用,不能在子网间路由

为何需要link-local--在一个接口可以配置很多IPv6地址,所以学习路由就有可能出现很多下一跳。
所以出现Link Local地址唯一标识一个节点。在本地链路看到下一跳都是对端的Link Local地址。
在网络重新编址过程中,节点和路由器的Link Local地址不会发生变化,可以很容易地做一个修改,不用担心网络不可达。

EUI-64的构造规则--根据接口的MAC地址再加上固定的前缀来生成一个IPV6的link-local地址

例如:MAC地址--0010.7b80.032f以此为例来生成一个IPV6地址
1、将MAC地址从中间分为两段,0010.7b和80.032f
2、在两段的中间加入ff.fe--0010.7b.ff.fe.80.032f
3、将第7个比特位转换(0转1,1转0)--0210.7bff.fe80.32f
4、加上前缀--FE80::0210:7BFF:FE80:032F这是link-local地址
再生成被请求节点的组播地址--FF02::1:FF80:32F直接将后24位移下来就可

R1(config-if)#ipv6 address FE80:0:0:0:0123:0456:0789:0abc link-local   手工指定link-local地址


本地站点地址:site-local address
IPV6的私网地址,就像IPV4中的私网保留地址一样
只占用到整个IPV6地址空间的0.1%

前缀:FEC0::/10  其后的54比特用于子网ID  最后64位用于主机ID
范围:只能在本站点内使用,不能在公网上使用

例如:在本地分配十个子网
1、FEC0:0:0:0001::/64
2、FEC0:0:0:0002::/64
3、FEC0:0:0:0003::/64
10、FEC0:0:0:000A::/64

本地站点地址被设计用于永远不会与全球IPV6因特网进行通信的设备,比如:打印机、内部网服务器、网络交换机等

可聚合全球单播地址Aggregate global unicast address

由IANA分配的可在全球路由的公网IP地址

目前已分配的前缀:2000::/3     占用了12.5%的IPV6地址空间
2000:0000:0000:0000:0000:0000:0000:0000--3FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF

这个前缀中总共包含8192个/16的前缀
目前实际用于IPV6因特网运作的前缀:2001::/16
2002::/16 为使用6-TO-4过渡机制的节点保留
3ffe::/16 用于6bone测试目的的前缀

未指定地址Unspecified address

形式:0:0:0:0:0:0:0:0 
表示地址未指定,或者在写默认路由时代表所有路由

回环地址Loopack address

形式:0:0:0:0:0:0:0:1
同IPV4中127.0.0.1地址的含义一样,表示节点自已

组播地址Multicast
在IPV6中没有广播,用组播来代替

前缀:FF00::/8   占用了0.38%的IPV6地址空间
          
      1111    1111    4bit       4bit
     |→固定值←||→标志←| |→范围←|

标志位为0000表示是永久保留的组播地址,分配给各种技术使用
标志位为0001表示是用户可自定义的临时组播地址

范围段定义了组播地址的范围,其定义如下:

二进制    十六进制    范围类型
0001          1       本地接口范围
0010          2       本地链路范围
0011          3       本地子网范围     
0100          4       本地管理范围
0101          5       本地站点范围
1000          8       组织机构范围
1110          E       全球范围

下面是一些组播指定地址:
FF02::1    all nodes   在本地链路范围的所有节点
FF02::2    all routers 在本地链路范围的所有路由器
FF02::5    all ospf routers
FF02::9    all rip routers 所有运行RIP的路由器
FF02::A    all eigrp routers 所有运行eigrp的路由器
FF05::2                在一个站点范围内的所有路由器


被请求节点的组播地址solicited-node multicast address--重要的东东
一种特殊的组播地址,对于节点或路由器的接口上配置的每个单播和任意播地址,都会自动生成一个对应的被请求节点组播地址。注意link-local address也会生成一个被请求节点的组播地址。

工作范围:只在本地链路上有效
特点 :
1 在本地链路上,被请求接点的组播地址中只包含一个用户
2 只要知道一个接点的ipv6地址,就能计算出他的被请求节点的组播地址
作用:1、在IPV6中,没有ARP。ICMP代替了ARP的功能,被请求节点的组播地址被节点用来获得相同本地链路上邻居节点的链路层地址
      2、用于重复地址检测DAD,在使用无状态自动配置将某个地址配置为自已的IPV6地址之前,节点利用DAD验证在其本地链路上该地址是否已经被使用。

前缀:FF02:0000:0000:0000:0000:0001:FFxx:xxxx/104
      FF02::1:FFxx:xxxx/104

如何产生:被请求节点组播地址的前104位固定,将IP地址的后24位移下来填充到后面就可以了
   例如:IPv6---2001::1234:5678/64
   被请求节点组播地址---FF02::1:FF34:5678/104
   其中FF02::1:FF为固定部分,共104位

组播IP地址到MAC地址的映射:

映射规则:组播MAC地址的前16位固定为0x3333,将组播IPV6地址的后32位直接映射到组播MAC地址的后32位就可以了。
例:IPV6地址为--FF12::1234:5678/64
    对应的组播MAC地址为--3333:1234:5678
    0x3333为固定前缀

例:所有节点的组播地址:FF02::0001
    对应的组播MAC地址:3333:0000:0001

任意播地址Anycast address
应用在one-to-nearest(一到近)模式

组播的接受对象是一组成员,是个群体.任意播是多个设备共享一个地址.分配IPv6单播(unicast)地址给拥有相同功用的一些设备.发送方发送一个以任意播为目标地址的包,当路由器接受到这个包以后,就转发给具有这个地址的离它最近的设备.单播地址用来分配任意播地址.对于那些没有配备任意播的的地址就是单播地址;但是当一个单播地址分配给不止一个接口的时候,单播地址就成了任意播地址。

例如:Mobile方面的特性,移动设备漫游到其他区域,不必接入原始的接入点,只需要找到最近的即可。

必须的IPV6地址:

一旦节点启用IPV6,那么接口就会自动生成下列地址
1、本地链路地址
2、回环地址
3、所有节点多播地址FF01::1和FF02::1

如果接口配了一个IPV6的单播地址,还会产生被请求节点的组播地址

EUI-64格式:
在IPV6中,无状态自动配置机制使用EUI-64格式来自动配置IPV6地址
所谓无状态自动配置是指在网络中没有DHCP服务器的情况下,允许节点自行配置IPV6地址的机制。
工作原理:自动将48bit的以太网MAC地址扩展成64bit,再挂在一个64bit的前缀后面,组成一个IPV6地址
MAC地址是48位的,从中间断开各24位,在中间加上FF FE,再把加上后地址的第7位0改成1,如果是1则改成0

一、将48位的MAC地址从中间分开,插入一个固定数值FFFE
    0050:3EE4:4C00-->0050:3EFF:FEE4:4C00

二、将第7个比特位反转,如果原来是0,就变为1,如果原来是1,就变为0
    0050:3EFF:FEE4:4C00-->0250:3EFF:FEE4:4C00

反转的原因:
  在MAC地址中,第7比特为1表示本地管理,为0表示全球管理
  在EUI-64格式中,第7位为1表示全球惟一,为0表示本地唯一

配置IPv6地址

配置IPv6地址

更新时间:2021/07/27 GMT+08:00

操作场景

IPv6的使用,可以有效弥补IPv4网络地址资源有限的问题。如果当前云服务器使用IPv4,那么启用IPv6后,云服务器可在双栈模式下运行,即云服务器可以拥有两个不同版本的IP地址:IPv4地址和IPv6地址,这两个IP地址都可以进行内网/公网访问。

按照约束与限制中的网络环境要求创建的云服务器,有些不能动态获取到IPv6地址,需要进行相关配置才行。如果云服务器使用的是公共镜像,则支持情况如下:

  • Windows公共镜像默认已开启IPv6动态获取功能,无需配置,文中的Windows 2012操作系统和Windows 2008操作系统部分供您验证、参考。
  • Linux公共镜像开启动态获取IPv6功能时,需要先判断是否支持IPv6协议栈,再判断是否已开启动态获取IPv6。目前,所有Linux公共镜像均已支持IPv6协议栈,并且Ubuntu 16操作系统已默认开启动态获取IPv6。即Ubuntu 16操作系统无需配置,其他Linux公共镜像需要执行开启动态获取IPv6的操作。

约束与限制

  • 请确保云服务器所在的子网已开启IPv6功能。

    子网开启IPv6功能请参考“IPv4/IPv6双栈网络”。

  • 请确保创建云服务器时已选择“自动分配IPv6地址”。
    图1 选择“自动分配IPv6地址”
    只有以下云服务器才支持IPv6双栈:
    • “华北-北京四”区域的“可用区2”下,选择sn3规格
    • “华北-北京四”区域的“可用区7”下,选择s6、c6、kc1规格
    • “华东-上海一”区域的“可用区1”下,选择s6、c6s、c6、m6、c3、m3规格
    • “华东-上海一”区域的“可用区2”下,选择c6、m6、c3规格
    • “华东-上海一”区域的“可用区3”下,选择c6s、c6规格
    • “西南-贵阳一”区域的“可用区1”下,选择s6、c6s、c6、m6规格
    • “中国-香港”区域的“可用区1”下,选择c6规格
    • “中国-香港”区域的“可用区2”下,选择c6规格
  • 云服务器启动之后动态插拔的网卡不支持IPv6地址动态获取功能。
  • 仅弹性云服务器支持IPv6双栈,裸金属服务器不支持。
  • 同一个网卡上,只能绑定一个IPv6地址。

操作步骤

  • Windows系统:本文以Windows 2012版本、Windows 2008版本为例,介绍Windows操作系统启用IPv6的方法,如表1所示。
  • Linux系统:本文提供了自动配置、手动配置两种方式启用IPv6,推荐您使用自动配置方法,如表1所示。

    对于CentOS 6.x和Debian操作系统,云服务器内部配置IPv6自动获取功能之后,将该云服务器制作为私有镜像,使用该镜像在非IPv6网络环境中创建云服务器时,由于等待获取IPv6地址超时,导致云服务器启动较慢,此时您可以参考设置云服务器获取IPv6地址超时时间操作。

表1 不同操作系统启用IPv6操作指导

操作系统

方式

操作指导

Windows 2012

自动配置启用IPv6

Windows 2012操作系统

Windows 2008

自动配置启用IPv6

Windows 2008操作系统

Linux

自动配置启用IPv6(推荐)

Linux操作系统(自动配置启用IPv6)

Linux

手动配置启用IPv6

Linux操作系统(手动配置启用IPv6)

Windows 2012操作系统

  1. 检查是否启用IPv6。

     

    打开cmd窗口,执行如下命令,查看当前云服务器是否启用IPv6。

    ipconfig

    • 如果已启用IPv6,则会显示IPv6的地址。
      图2 显示IPv6的地址
    • 如果显示只有本地链接IPv6地址,则表示无法动态获取到IPv6地址。请执行2
      图3 本地链接IPv6地址
    • 如果未启用IPv6,则不会显示IPv6的地址。请执行3
      图4 未启用IPv6
      说明:

      Windows公共镜像默认已经配置了IPv6动态获取功能,即回显为情况一,无需特殊配置。

     

  2. 配置动态获取IPv6。

     

    1. 单击“开始 > 控制面板”。
    2. 单击“网络和共享中心”。
    3. 单击以太网连接。
      图5 以太网连接
    4. 在以太网状态的弹窗中单击左下角的“属性”。
    5. 勾选“Internet协议版本 6 (TCP/IPv6)”,然后单击“确定”。
      图6 配置动态获取IPv6
    6. 执行1检查是否已开启动态获取IPv6。

     

  3. 启用和配置IPv6。

     

    1. 在“Internet 协议版本 6(TCP/IPv6)属性”弹窗中,配置云服务器的IPv6地址和DNS服务器地址。
      • IPv6地址:创建云服务器时分配的IPv6地址,请从控制台云服务器的列表页面获取。
      • 子网前缀长度:64
      • DNS服务器:推荐使用240c::6666
      图7 在控制台获取IPv6地址
    2. (可选配置)根据操作系统不同请分别执行以下命令。

      Windows Server 2012操作系统云服务器请在PowerShell或者cmd中执行如下命令:

      Set-NetIPv6Protocol -RandomizeIdentifiers disabled

    3. 执行1检查是否已开启动态获取IPv6。

     

Windows 2008操作系统

  1. 检查是否启用IPv6。

     

    打开cmd窗口,执行如下命令,查看当前云服务器是否启用IPv6。

    ipconfig

    • 如果已启用IPv6,则会显示IPv6的地址。
      图8 显示IPv6的地址
    • 如果显示只有本地链接IPv6地址,则表示无法动态获取到IPv6地址。请执行2
      图9 本地链接IPv6地址
    • 如果未启用IPv6,则不会显示IPv6的地址。请执行3
      图10 未启用IPv6
      说明:

      Windows公共镜像默认已经配置了IPv6动态获取功能,即回显为情况一,无需特殊配置。

     

  2. 配置动态获取IPv6。

     

    1. 单击“开始 > 控制面板”。
    2. 单击“网络和共享中心”。
    3. 左键单击“更改适配器设置”。
    4. 右键单击网络连接并选择“属性”。
    5. 勾选“Internet协议版本 6 (TCP/IPv6)”,然后单击“确定”。
      图11 配置动态获取IPv6
    6. 执行1检查是否已开启动态获取IPv6。

     

  3. 启用和配置IPv6。

     

    1. 选择“开始 > 控制面板 > 网络连接 > 本地连接”。
    2. 选择“属性”,确认勾选以下选项后单击“安装”。
      图12 启用和配置IPv6
    3. 选择“协议”,然后单击“添加”。
      图13 添加协议
    4. 在网络协议列表中选择“Microsoft TCP/IP版本 6”,然后单击“确定”。
      图14 网络协议列表
    5. (可选配置)根据操作系统不同请分别执行以下命令。

      Windows Server 2008操作系统云服务器请在PowerShell或者cmd中执行如下命令:

      netsh interface ipv6 set global randomizeidentifiers=disable

      设置云服务器先禁用本地连接,再重启本地连接。

      禁用本地连接:单击“开始 > 控制面板 > 网络和共享中心 > 更改适配器配置”,选择本地连接,单击右键选择“禁用”。

      重启本地连接:单击“开始 > 控制面板 > 网络和共享中心 > 更改适配器配置”,选择本地连接,单击右键选择“启用”。

    6. 执行1检查是否已开启动态获取IPv6。

     

Linux操作系统(自动配置启用IPv6)

ipv6-setup-xxx工具能为开启IPv6协议栈的Linux操作系统自动配置动态获取IPv6地址。其中,xxx表示工具系列:rhel或debian。

您也可以参考Linux操作系统(手动配置启用IPv6)手动配置启用IPv6。

注意:
  • ipv6-setup-xxx工具运行时会自动重启网络服务,导致网络短暂不可用。
  • CentOS 6.x和Debian操作系统的云服务器内部配置IPv6自动获取功能之后,将该云服务器制作为私有镜像,使用该镜像在非IPv6网络环境中创建云服务器时,由于等待获取IPv6地址超时,导致云服务器启动较慢,您可以参考设置云服务器获取IPv6地址超时时间设置获取IPv6地址超时时间为30s,然后再重新制作私有镜像。
  1. 执行如下命令,查看当前云服务器是否启用IPv6。

     

    ip addr

    • 如果没有开启IPv6协议栈,则只能看到IPv4地址,如下图所示,请参考2先开启IPv6协议栈。
      图15 云服务器未开启IPv6协议栈
    • 如果已开启IPv6协议栈,则可以看到LLA地址(fe80开头)。
      图16 云服务器已开启IPv6协议栈
    • 如果已开启IPv6协议栈并且已获取到IPv6地址,则会看到如下地址:
      图17 云服务器已开启IPv6协议栈并且已获取到IPv6地址
    说明:

    Linux公共镜像均已开启IPv6协议栈(即情况二);Ubuntu 16公共镜像不仅已开启IPv6协议栈,而且可以获取到IPv6地址(即情况三),无需特殊配置。

     

  2. 开启Linux云服务器IPv6协议栈。

     

    1. 执行如下命令,确认内核是否支持IPv6协议栈。

      sysctl -a | grep ipv6

      • 如果有输出信息,表示内核支持IPv6协议栈。
      • 如果没有任何输出,说明内核不支持IPv6协议栈,需要执行2.b加载IPv6模块。
    2. 执行以下命令,加载IPv6模块。

      modprobe ipv6

    3. 修改“/etc/sysctl.conf”配置文件,增加如下配置:

      net.ipv6.conf.all.disable_ipv6=0

    4. 保存配置并退出,然后执行如下命令,加载配置。

      sysctl -p

     

  3. 自动配置启用IPv6。

     

    1. 下载对应系统版本的工具ipv6-setup-rhel或ipv6-setup-debian,并上传至待操作的云服务器。

      ipv6-setup-xxx工具会添加或者修改网卡设备的配置文件,添加IPv6动态获取的配置信息,然后重启网卡或者网络服务。ipv6-setup-rhel和ipv6-setup-debian的工具下载地址如表2所示。

      表2 工具下载地址

      系列

      发行版

      下载地址

      RHEL

      • CentOS 6/7
      • EulerOS 2.2/2.3
      • Fedora 25

      https://ecs-instance-driver.obs.cn-north-1.myhuaweicloud.com/ipv6/ipv6-setup-rhel

      Debian

      • Ubuntu 16/18
      • Debian 8/9

      https://ecs-instance-driver.obs.cn-north-1.myhuaweicloud.com/ipv6/ipv6-setup-debian

    2. 执行以下命令,添加执行权限。

      chmod +x ipv6-setup-xxx

    3. 执行以下命令,指定一个网卡设备,配置动态获取IPv6地址。

      ./ipv6-setup-xxx --dev [dev]

      示例:

      ./ipv6-setup-xxx --dev eth0

      说明:
      • 如需对所有网卡配置动态获取IPv6地址,命令为./ipv6-setup-xxx,即不带参数。
      • 如需查询工具的用法,请执行命令./ipv6-setup-xxx --help

     

Linux操作系统(手动配置启用IPv6)

注意:

CentOS 6.x和Debian操作系统的云服务器内部配置IPv6自动获取功能之后,将该云服务器制作为私有镜像,使用该镜像在非IPv6网络环境中创建云服务器时,由于等待获取IPv6地址超时,导致云服务器启动较慢,您可以参考设置云服务器获取IPv6地址超时时间设置获取IPv6地址超时时间为30s,然后再重新制作私有镜像。

  1. 执行如下命令,查看当前云服务器是否启用IPv6。

     

    ip addr

    • 如果没有开启IPv6协议栈,则只能看到IPv4地址,如下图所示,请参考2先开启IPv6协议栈。
      图18 未开启IPv6协议栈
    • 如果已开启IPv6协议栈,则可以看到LLA地址(fe80开头)。
      图19 已开启IPv6协议栈
    • 如果已开启IPv6协议栈并且已获取到IPv6地址,则会看到如下地址:
      图20 已开启IPv6协议栈并且已获取到IPv6地址
    说明:

    Linux公共镜像均已开启IPv6协议栈(即情况二);Ubuntu 16公共镜像不仅已开启IPv6协议栈,而且可以获取到IPv6地址(即情况三),无需特殊配置。

     

  2. 开启Linux云服务器IPv6协议栈。

     

    1. 执行如下命令,确认内核是否支持IPv6协议栈。

      sysctl -a | grep ipv6

      • 如果有输出信息,表示内核支持IPv6协议栈。
      • 如果没有任何输出,说明内核不支持IPv6协议栈,需要执行2.b加载IPv6模块。
    2. 执行以下命令,加载IPv6模块。

      modprobe ipv6

    3. 修改“/etc/sysctl.conf”配置文件,增加如下配置:

      net.ipv6.conf.all.disable_ipv6=0

    4. 保存配置并退出,然后执行如下命令,加载配置。

      sysctl -p

     

  3. 手动配置启用IPv6。操作系统不同,步骤有所差别。

     

    • Ubuntu操作系统云服务器配置动态获取IPv6。
      说明:

      Ubuntu 18.04请执行以下操作步骤;Ubuntu 16.04操作系统已默认启用IPv6,不需要做任何配置操作。

      1. 修改“/etc/network/interface”配置文件,在“iface eth0 inet dhcp”下增加一行配置:
        iface eth0 inet6 dhcp
      1.  

        CentOS 6.3系统中默认ip6tables会过滤dhcpv6-client请求,所以CentOS 6.3除了需要编辑“ifcfg-eth*”文件外,还需要额外添加一条允许dhcpv6-client请求的ip6tables规则。操作如下:

        1. 执行以下命令,添加ip6tables规则。

          ip6tables -A INPUT -m state --state NEW -m udp -p udp --dport 546 -d fe80::/64 -j ACCEPT

        2. 执行以下命令,保存ip6tables规则。

          service ip6tables save

          图21 命令示例
      2. (可选配置)CentOS 7系列需要将扩展网卡的IPv6 LLA地址模式修改为EUI64。
        1. 执行如下命令查看网卡信息。

          nmcli con

          图22 查看网卡信息
        2. 将eth1的IPv6 LLA地址模式按以下命令修改为EUI64:

          nmcli con modify "Wired connection 1" ipv6.addr-gen-mode eui64

        3. 通过ifconfig命令将eth1进行down/up操作。

          ifdown eth1

          ifup eth1

      3. 重启网络服务。
        1. CentOS 6系列执行以下命令,重启网络服务。

          service network restart

        2. CentOS 7/EulerOS/Fedora系列执行以下命令,重启网络服务。

          systemctl restart NetworkManager

      4. 执行步骤1检查是否已开启动态IPv6。
    • SUSE/openSUSE/CoreOS操作系统云服务器配置动态获取IPv6。

      SUSE 11 SP4不支持IPv6自动获取。

      SUSE 12 SP1、SUSE 12 SP2无需特殊配置。

      openSUSE 13.2、openSUSE 42.2无需特殊配置。

      CoreOS 10.10.5无需特殊配置。

     

设置云服务器获取IPv6地址超时时间

CentOS 6.x和Debian操作系统的云服务器内部配置IPv6自动获取功能之后,将该云服务器制作为私有镜像,使用该镜像在非IPv6网络环境中创建云服务器时,由于等待获取IPv6地址超时,导致云服务器启动较慢,您可以参考本节操作设置获取IPv6地址超时时间为30s,然后再重新制作私有镜像。

  • CentOS 6.x:
    1. 执行以下命令编辑“dhclient.conf”文件。

      vi /etc/dhcp/dhclient.conf

    2. 按“i”进入编辑模式,在文件中增加timeout属性。
      timeout  30;
  •  
  • (可选配置)配置网卡IPv6 LLA地址的生成方式为EUI64。
    nmcli con modify "Wired connection 1" ipv6.addr-gen-mode eui64
    1.  
    2. 执行以下命令,重启网络服务。

      ifdown eth0

      ifup eth0

  • Debian操作系统云服务器配置动态获取IPv6。
    1. 编辑“/etc/network/interfaces”文件,使之包含以下内容:
      auto lo 
      iface lo inet loopback 
      auto eth0
      iface eth0 inet dhcp
      iface eth0 inet6 dhcp 
           pre-up sleep 3
  •  
  • 如果有多个网卡,则在“/etc/network/interfaces”文件中,增加对应网卡的配置,以eth1为例,需要增加:
    auto eth1
    iface eth1 inet dhcp
    iface eth1 inet6 dhcp 
         pre-up sleep 3
    1.  
    2. 执行如下命令重启网络服务。

      service networking restart

      说明:

      如果将网卡进行down/up操作之后无法获取IPv6地址,也可以通过此命令重启网络服务。

    3. 执行步骤1检查是否已开启动态IPv6。
  • CentOS/EulerOS/Fedora操作系统云服务器配置动态获取IPv6。
    1. 编辑主网卡配置文件“/etc/sysconfig/network-scripts/ifcfg-eth0”。
      补充如下配置项:
      IPV6INIT=yes
      DHCPV6C=yes
  •  
  • 编辑“/etc/sysconfig/network”,按如下所示添加或修改以下行。
    NETWORKING_IPV6=yes
  •  
  • CentOS 6系列从网卡需要编辑对应的配置文件,以eth1为例,编辑“/etc/sysconfig/network-scripts/ifcfg-eth1”。
    补充如下配置项:
    IPV6INIT=yes
    DHCPV6C=yes
    1.  
    2. 输入:wq保存后退出。
  • Debian 7.5:
    1. 执行以下命令编辑“networking”文件。

      vi /etc/init.d/networking

    1. 按“i”进入编辑模式,增加延迟命令timeout,修改点如下图所示。
      图23 修改点1
      图24 修改点2
  • Debian 8.2.0/8.8.0
    1. 执行以下命令编辑“network-pre.conf”文件。

      vi /lib/systemd/system/networking.service.d/network-pre.conf

    2. 按“i”进入编辑模式,在文件中增加timeout属性。
      [Service]
      TimeoutStartSec=30
    1.  
  • Debian 9.0
    1. 执行以下命令编辑“networking.service”文件。

      vi /etc/system/system/network-online.target.wants/networking.service

    2. 按“i”进入编辑模式,将TimeoutStartSec=5min改为TimeoutStartSec=30。

IPv6子网划分如何工作?与IPv4子网划分有何不同?

我对IPv4子网划分了解很多,并且在准备(部署)IPv6网络时,我需要知道这些知识中有多少是可以转让的,以及我仍然需要学习什么。乍看起来,IPv6比IPv4复杂得多。所以我想知道:

  • IPv6是128位,那么/ 64为什么是主机推荐的最小子网?与此相关:
    • 为什么建议在路由器之间的点对点链接中使用/ 127,为什么过去却反对使用?我应该将现有的路由器链接更改为使用/ 127吗?
    • 为什么要为虚拟机配置少于/ 64的地址?
    • 在其他情况下,我会使用小于/ 64的子网吗?
  • 我可以直接从IPv4子网映射到IPv6子网吗?例如,IPv4 / 24是否直接对应于IPv6 / 56或/ 120?
  • 我的接口有几个IPv6地址。所有子网的子网都必须相同吗?
  • 为什么有时在IPv6地址中看到%而不是/,这是什么意思?
  • 我在浪费太多子网吗?我们不只是要再次耗尽吗?
  • IPv6子网与IPv4子网在其他哪些主要方面不同?
networking  ipv6  subnet 
— 迈克尔·汉普顿
source

Answers:


138

关于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将一半的位用于网络地址,一半的位用于主机地址,这类似于IPv6中的/ 64”。但是这种比较并不是很恰当。IPv6中出现了强大的约定,这些约定使网络大小的划分看起来更像是IPv4中有类网络的旧世界。可以肯定的是,IPv6不会重新引入分类寻址,在该分类寻址中,地址的最高有效位会强制使用特定的网络掩码,但是IPv6 确实具有某些[事实上/传统上]的标准网络大小:

  • / 64:单个子网的基本大小:LAN,WAN,Web虚拟主机的地址块等...永远不要期望“普通”子网比/ 64小(更长的前缀)。绝不会期望子网比/ 64更大(前缀更短),因为/ 64的主机地址值远远超出了我们的想象。
  • / 56:256个基本子网的块。即使当前的策略允许ISP向每个最终用户分发最大为/ 48的数据块,并且仍然认为其地址利用率是合理的,但某些ISP可能(并且已经这样做)选择将/ 56分配给消费级客户,以作为一种折衷方案。为它们分配大量子网并解决经济问题。
  • / 48:65535个基本子网的块,以及每个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地址。所有子网的子网都必须相同吗?

绝对不!与IPv4一样,通过同时具有来自不同子网的多个IP地址,有望使IPv6主机成为多宿主。如果使用SLAAC对它们进行自动配置,则不同的子网可能来自不同路由器的路由器通告。

为什么有时在IPv6地址中看到%而不是/,这是什么意思?

您不会看到一个而不是另一个。它们具有不同的含义。斜杠表示前缀(子网),表示所有以相同n位开头的地址块。没有斜杠的地址是主机地址。您可能会认为该地址的末尾有一个隐含的“ / 128”,这意味着指定了所有128位。

百分号随附链接本地地址。在IPv6中,每个接口除了可能具有的任何其他IP地址之外,还具有链路本地地址。但问题是,链接本地地址始终无一例外地位于该fe80::/10块中。但是,如果我们尝试使用链接本地地址与对等方通信,并且本地主机具有多个接口,我们如何知道要使用哪个接口与该对等方通信?通常,路由表会告诉我们用于特定前缀的接口,但是在这里,它将告诉我们fe80::/10通过每个接口可访问的接口。

答案是我们必须使用语法告诉它使用哪个接口address%interface。例如,fe80::1234:5678:8765:4321%eth0

我在浪费太多子网吗?我们不只是要再次耗尽吗?

没人知道。谁能告诉未来?

但是考虑一下。在IPv6中,可用子网的数量是IPv4 中可用单个地址的数量的平方。确实很多。不,我的意思是真的很多!

但是,仍然:我们会自动将/ 32分发给任何请求它的ISP,而我们会向每个ISP客户分发/ 48。也许我们夸张了,毕竟我们将浪费IPv6。但是有一个规定:到目前为止,只有IPv8空间的八分之一可供使用:2000::/3。这个想法是,如果我们把前八名搞得一团糟,而我们不得不大刀阔斧地修改自由派分配政策,那么在陷入麻烦之前,我们必须再尝试七次。

最后:IPv6不必永远持续下去。也许它的寿命比IPv4更长(已经是一个令人印象深刻的寿命,并且还没有结束),但是像每种技术一样,它总有一天将不再重要。我们只需要做到这一点。

 
— 塞拉达
source

13
很好的解释!特别是关于不同的心态。如果看一下数字,您会发现2000 :: / 3中有536,870,912 / 32(小型ISP)。世界人口为70亿,每13个人中就有一个ISP,每个这样的ISP可以拥有65,536个客户,每个客户/ 48。无需担心浪费地址:-)
Sander Steffann 2012年

 
是的,这是一个很好的解释。
Fergus 2012年

2
对2000 :: / 3的具体细节有很好的解释。
— Koos van den Hout 2012年

5
很好的解释。对最终评论+1。我希望每个人都已经看到了:xkcd.com/865
— Nico,

 
@SanderSteffann如果出现问题,ISP将新的/ 64分配给住宅用户而不是/ 48是合理的,而小型ISP一次请求请求4096个块(/ 52个块) )。当前的方案只是为了在每个层次上留出扩展空间而设计的。
immibis

45

IPv6是128位,那么/ 64为什么是主机推荐的最小子网?

首先,从RFC中获得一些ASCII技术来建立术语:

|         n bits         |   m bits  |       128-n-m bits         |
+------------------------+-----------+----------------------------+
| global routing prefix  | subnet ID |       interface ID         |
+------------------------+-----------+----------------------------+

全局路由前缀通常标识该地址所属的整个网络。通常为48位。接口ID标识给定的网络接口。通常是64位。剩下的16位是您的子网ID。

OK,继续说明:

根据RFC 4291-IP版本6寻址架构:

除以二进制000开头的地址外,所有全局单播地址都有一个64位接口ID字段。

RFC 5375-IPv6单播地址分配注意事项

IPv4寻址计划的重要部分是确定每个子网前缀的长度。与IPv4不同,IPv6寻址体系结构[RFC4291]指定使用全局唯一地址和ULA的所有子网始终具有相同的64位前缀长度。

因此,忽略000前缀异常,接口ID 始终完全是64位。这是所有本地广播网络始终都是64位的另一种说法。如果您有IPv6地址,则其网络掩码始终为 64位。永不止息。如果为您分配的地址空间大于该地址空间(比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位(而不只是48个专用于MAC地址的地址)提供了一些摆动空间,而不仅仅是该方案提供的地址(还有其他几个地址)。

在其他情况下,我会使用小于/ 64的子网吗?

不。除非你很伤心,否则不会。好吧,您可能有基于本地要求的理由,可以使用现有网络设置手动路由。但是请记住,这样做可能会使您一团糟:

RFC 5375开始-IPv6单播地址分配注意事项

使用/ 64以外的子网前缀长度将破坏IPv6的许多功能,包括邻居发现(ND),安全邻居发现(SEND)[RFC3971],隐私扩展[RFC4941],移动IPv6的一部分[RFC4866],协议独立多播-具有嵌入式RP [RFC3956]的稀疏模式(PIM-SM),以及通过IPv6中介(SHIM6)[SHIM6]进行的站点多宿主。当前正在开发或正在提议中的许多其他功能也依赖于/ 64子网前缀。

....

但是,某些网络管理员对连接路由器的链接使用的前缀长于/ 64,通常在点对点链接上仅使用两个路由器。在通过手动配置分配了所有地址且链接上的所有节点都是网络已知的路由器(不是终端主机)的链接上,管理员不需要任何依赖于/ 64子网前缀的IPv6功能,这能行得通。不建议一般使用长度大于/ 64的子网前缀,将其用于包含最终主机的链接将不是一个好主意,因为很难预测主机将来将使用哪些IPv6功能。

为什么建议在路由器之间的点对点链接中使用/ 127,为什么过去却反对使用?

您可能希望掩盖RFC 3627-在认为有害的路由器之间使用/ 127前缀长度。然后看看随后的RFC 6164-在路由器间链接上使用127位IPv6前缀

反对在路由器上使用长于/ 64的前缀的原因与路由器自动配置有关,在极少数情况下可能会失败。反对使用短于/ 127(仅2个主机)的前缀,这与许多与将数据包发送到未路由地址有关的潜在拒绝服务问题有关。由于现实世界中的拒绝服务问题比理论上的自动配置失败要严重,因此/ 127是新的首选。

我应该将现有的路由器链接更改为使用/ 127吗?

如果您控制IPv6路由器,建议您阅读两个RFC(它们很短!),然后自己决定。

我可以直接从IPv4子网映射到IPv6子网吗?

例如,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地址,这可以简化应用程序开发。就网络而言,这没有什么区别。


20
  1. IPv6是128位,那么/ 64为什么是主机推荐的最小子网?

    此前缀大小最初是在较旧的RFC中建议的-此后已对该策略进行了修订,其中考虑了邻居发现攻击的问题,并且使用/ 126是有效的缓解方法-尽管如此,如果您要通过以下方式设置PtP链接:路由流量的唯一目的是,另一种选择是坚持使用/ 64和该子网的防火墙。更好的是,为自己分配一个池,从中可以提取/ 64个子网,并将整个池作为边缘(以及可能来自于敌意的任何其他地方)的黑名单目的地

  2. 为什么建议在路由器之间的点对点链接中使用/ 127,为什么过去却反对使用?我应该将现有的路由器链接更改为使用/ 127吗?

    不建议在路由器之间使用/ 127,并且绝对不要使用/ 127-全路由器的Anycast地址是子网的全零地址;这意味着/ 127在技术上仅在两台机器之间有效,其中一台机器充当路由器。/ 126当然可以。

    但是,无论如何,除非您的设备容易受到邻居发现缓存泛洪攻击,否则我不建议您切换现有的/ 64链接-即使在这种情况下,也要先确定您是否真的要使用/ 64进行互联网连接,如果答案是否定的,只需对其进行防火墙处理。

  3. 为什么要为虚拟机配置小于/ 64的子网?

    这会破坏SLAAC和RA,除非您真的非常了解自己在做什么,否则您不太可能有充分的理由这样做-也许您的上游只给了您一个/ 64,但是如果是这样,您就需要返回给他们并要求更多,如果他们想向您收取费用,请开始寻找新的提供商,还可能向他们发送一些链接到相关RFC的肮脏电子邮件。

  4. 在其他情况下,我会使用小于/ 64的子网吗?

    老实说 可能不是。如果出于合理的原因,出于防止NDP攻击之外的目的,最好使用较小的子网,则将在本节中进行编辑。

    相反,在某些情况下,您希望使用小于/ 64的子网-特别是在您使用硬件转发设备运行环境的任何地方(请考虑使用名牌路由器和L3交换机)-有些情况将无法进行前缀的硬件路由比/ 64更长的时间,其他人必须将操作分成多个比较,因此,您至少应尽力确保/ 64是(OSPF / ISIS / EIGRP / etc)主干网中的最长前缀。

  5. 我可以直接从IPv4子网映射到IPv6子网吗?例如,IPv4 / 24是否直接对应于IPv6 / 56或/ 120?

    正式地,:: ffff:xxxx是IPv6映射的IPv4地址的格式-当然,还有许多转换机制,即6to4及其相对的6rd,它们将IPv4地址映射到全局IPv6中。通过创建从其继承的IPv4地址派生的IPv6前缀来提供对IPv4的IPv6访问。

  6. 我的接口有几个IPv6地址。所有子网的子网都必须相同吗?

    不,在同一接口上使用不同的地址和子网大小应该不是问题。如果是这样,则说明实现存在错误。当然,更好的问题是您为什么要这样做?

  7. 为什么有时在IPv6地址中看到%而不是/,这是什么意思?

    这是一个分隔符,通常应用于链接本地地址(fe80 :: / 12)-由于同一链接本地地址可以合法存在于多个接口上,因此%分隔符用于允许指定要使用的接口。在执行涉及本地链接的操作时,Linux通常会强制指定接口。Windows Vista / 2008及更高版本更加智能,除非链接本地不是唯一的,否则不会抱怨。

  8. 我在浪费太多子网吗?我们不只是要再次耗尽吗?

    否。这是一匹死马,它被WAAAAAAAAAY浪费了太多次-当前的全球IPv6互联网是2000 :: / 3-如果某种程度上,如果地球上的每个RIR都耗尽了IANA,则IANA可以开始使用更多前缀地址股票。因此,不会,我们将不会用完空间,即使这样做,也需要轻按一下笔才能出现新的前缀,而不是技术上的改变。这个问题真正强调的唯一一件事是人的大脑无法完全理解地址空间有多么荒谬。

  9. IPv6子网与IPv4子网在其他哪些主要方面不同?

    除了不在乎正在使用多少空间外,请记住没有广播地址,并且“子网零”地址现在是所有路由器的任意播地址(基本上是隐含在配置的所有节点上的地址)以转发IPv6数据包)-这有一个非常有用的副作用,允许您将全零地址用作网络中的默认路由(不,它不会导致数据包重复,它是ANYcast,而不是MULTIcast)-请切记尽管主机可能每隔几秒钟便会在路由器之间翻转一次,所以如果连接跟踪未在它们之间进行同步,则这不适用于有状态防火墙设置。

    除此之外,另一个主要区别是IPv6关心重复地址和死邻居(NUD)-因此,与IPv4不同,主机可以确定链接上的另一个节点已经在使用该地址,因此它将拒绝使用该地址。 。另一方面,如果您要配置静态路由,则NUD很有用-您实际上可以为具有不同度量的前缀定义多个单独的路由,并且它们实际上可以工作,这与IPv4不同,在IPv4中,将使用最低的度量路由,而不考虑下一条-hop死了还是活着(尽管对于某些使用ARP验证路由的IPv4实施(例如Cisco和其他主要路由器供应商)可能并非如此)

    TLDR;IPv6检测到重复的地址和不可达的邻居。全零地址是所有路由器的任播地址,没有广播这样的东西,全一是常规地址。


3

3

对于那些想知道规范中SLAAC的/ 64要求来自何处的人,这里有一些额外的参考资料:

IPv6无状态地址自动配置(RFC 4862)

如果前缀长度和接口标识符长度的总和不等于128位,则必须忽略“前缀信息”选项。[...]

系统管理员有责任确保路由器广告中包含的前缀长度与该链接类型的接口标识符的长度一致。

IP版本6寻址架构(RFC 4291)中

对于所有单播地址(以二进制值000开头的地址除外),接口ID的长度必须为64位,并以Modified EUI-64格式构造。

因此,因为接口ID必须为64位长,并且前缀长度和接口ID长度之和必须为128,所以使用SLAAC时前缀的唯一可能长度是64位。


2

IPv6是128位,那么/ 64为什么是主机推荐的最小子网?

因为IPv6支持者喜欢无状态自动配置的想法。

如果您选择任何其他子网大小,则无状态自动配置将中断。其他一些小问题也可能会中断,请阅读rfc7421以获取更多详细信息。

我个人认为无状态自动配置无论如何都是愚蠢的想法。它导致地址不可读,除了将块分配给子网之外,您几乎没有对地址的控制。

当然,使用约定的事情是,如果您遵循这些约定而出现问题,则可以指出该约定;如果您拒绝遵循这些约定而出现错误,那将是您的错。

为什么建议将/ 127用于路由器之间的点对点链接,

使用具有少量可用地址的子网可以避免邻居发现耗尽攻击。

当然,这种推理不仅适用于点对点链接。我猜想从政治上来说可能对点对点路由器链接提出此建议,但在政治上不可能对其他链接做出建议。

为什么要为虚拟机配置少于/ 64的地址?

我们需要在这里做出区分。主机提供商可以通过两种方式为计算机分配地址(物理的或虚拟的)。

他们可以为它们分配“链接”地址,以便机器可以在其中答复邻居发现请求。一些托管服务提供商选择给每台计算机提供一个/ 64,这在地址移动性方面具有优势,另一些托管服务提供商选择为每个VLAN提供一个/ 64,然后给各个机器的子块分配使用更少地址的子块,这可能意味着本地流量保持本地状态,而不是传递到路由器。

或者他们可以将机器视为路由器,并为其分配路由块。在这种情况下,它将需要足够的地址来寻址其所有内部子网。如果遵循“所有子网必须为/ 64”的约定,则意味着至少为其分配一个/ 64,并且可能分配更多。对于具有“机器内部网络”的机器,例如容器主机,这是有意义的。

我可以直接从IPv4子网映射到IPv6子网吗?例如,IPv4 / 24是否直接对应于IPv6 / 56或/ 120?

任何此类映射都取决于本地策略。

我的接口有几个IPv6地址。所有子网的子网都必须相同吗?

没有

为什么有时在IPv6地址中看到%而不是/,这是什么意思?

%是接口标识符。它与链接本地地址一起使用。因为一台机器可能具有多个接口,并且连接到这些接口的网络可能具有重叠的链接本地地址,所以需要它。

我在浪费太多子网吗?我们不只是要再次耗尽吗?

我不会为此担心太多。

即使IPv6设计人员做出了一个奇怪的决定,即使用128位地址空间然后将其丢弃近一半用于无状态自动配置,IPv6仍比IPv4拥有更大的空间。

而且,如果出现紧缩,只需花费几笔就可以恢复这个奇怪的决定。

IPv6可伸缩性的一个更大的问题是路由表的大小。强烈建议不要使用IPv6 NAT。在提供商分配的地址上运行大型网络会导致提供商锁定的巨大风险。

因此,我相信,随着IPv6对公司网络的渗透率不断提高,我们将看到对与提供商无关的IPv6空间的需求激增。

About Us

Since 1996, our company has been focusing on domain name registration, web hosting, server hosting, website construction, e-commerce and other Internet services, and constantly practicing the concept of "providing enterprise-level solutions and providing personalized service support". As a Dell Authorized Solution Provider, we also provide hardware product solutions associated with the company's services.
 

Contact Us

Address: No. 2, Jingwu Road, Zhengzhou City, Henan Province

Phone: 0086-371-63520088 

QQ:76257322

Website: 800188.com

E-mail: This email address is being protected from spambots. You need JavaScript enabled to view it.