Ipv6
24 Oct 2023 - joy717
ipv6
开启内核参数 sysctl -w net.ipv6.conf.all.forwarding=1
IPv6 地址段解释
IPv6 一共128位(bits),分8个段,每个段有16位。用16进制表示,一个16进制可以代表4个位,因此每个段有4个16进制数,即FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
”公网ip“ - 可聚合全局单播地址 Aggregatable Global Unicast Address
前缀以固定001开头。即2xxx::/3 或者3xxx::/3
”私有ip" - 唯一本地地址 Unique Local Address
固定前缀FC00::/7,即前7位固定为1111 110。 第8位如果设置了,代表了本地地址。即实际分成2个ip块。 FC00::/8 以及FD00::/8。
FC00::/8 目前没有被使用(not defined
from wikipedia)
实际有用的ip块为 FD00::/8
链路本地地址(Link-local address)
前缀为FE80::/10,11-64位全为0,最后64位为接口标识(或者称为接口id,一般为EUI-64)。一般是将48位的mac地址按一定算法转换成64位的接口id,该id具有本地链路唯一性。
用于自动地址配置、邻居发现、路由器发现等机制中。
EUI-64算法
将 48位的mac地址,拆成24位与24位,在这中间插入FFFE一共16位,组成64位。由于mac地址的第7位,1代表本地管理,0代表全球管理。而EUI-64定义刚好相反,1为全球管理,0位本地。因此最后还需要将第7位取反,得到最终的EUI-64。
组播地址与请求节点组播地址与组播的mac地址
ipv4使用广播方式查找mac地址,ipv6弃用广播方式,采用单播,组播(即分组形式)等方式,减少消耗,提高性能。
组播地址,固定前缀为FFxx::/8,即前8位固定为1。内置的各种组播地址参考底下链接组播相关内容的图片。
请求节点组播地址,基于ip生成,固定前缀FF02::1:FF00:0/104,后面24位由v6 ip的后24位填充。这样可以定向的给这个节点发送数据。
组播的mac地址,前80位由组播地址前80位组成,81-96位固定为3333(16进制表示),后32位,由组播地址的后32位补充。 即 组播前80位:3333:xxxx:xxxx
具体可参考: https://blog.51cto.com/u_7658423/1337745
其他
IPv6 可以不需要通过dhcp获取ip地址,还可以使用无状态地址配置的方式,通过交换机返回的信息,结合本机生成IPv6地址
参考资料
https://zhuanlan.zhihu.com/p/425805018 https://zhuanlan.zhihu.com/p/382612295
其他
IPv6网卡配置
# 修改/etc/sysconfig/network,设置
NETWORKING_IPV6=yes
IPV6_AUTOCONF=no
# 给网卡ifcfg配置文件添加配置
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6_DEFROUTE=yes
IPV6ADDR=FD00::1000:10/64
IPV6_DEFAULTGW=FD00::1
#之后重启网络
systemctl restart network
如果不设置上面这个的话,当机器上有多张网卡,需要配置多个ipv6段的时候,会导致多出来很多路由
原因是/etc/rc.d/init.d/network
会调用/etc/sysconfig/network-scripts/init.ipv6-global start pre
,这边会调整网卡的一些内核参数,比如net.ipv6.conf.eth0.accept_ra,这会导致接收到ra(router advertisement)的信息,从而配置了一些错误的配置(因为我们这边希望的是静态的配置,不需要接收ra信息)。
如果只是给网卡设置IPV6_AUTOCONF=no
并没有效果(怀疑是bug?),需要在/etc/sysconfig/network
内设置全局的配置。
网卡配置ifcfg字段详细说明
# 如果是v6,需要修改/etc/sysconfig/network,设置
NETWORKING_IPV6=yes
IPV6_AUTOCONF=no
#k8s需要开启v6的forwarding内核参数,如果此配置未指定的话,会导致network报错(虽然显示为ERROR,实际似乎没任何影响)
IPV6FORWARDING=yes
#如果需要指定默认路由所在的网卡,需要设置此项。同时网卡的ifcfg配置内IPV6_DEFAULTGW不能包含网卡名称的配置
#IPV6_DEFAULTDEV=eth1
# ifcfg网卡配置文件
#需要修改为相应网卡名称
DEVICE=br_eth0
#需要修改为相应网卡名称
NAME=br_eth0
TYPE=Bridge
ONBOOT=yes
#一般持久化网卡配置的时候,这边要修改一下,一般设置为static或者none。 实际文档帮助内容:`bootp`或者`dhcp`则使用dhcp,除此之外的值都被当做静态配置。但有些脚本依赖于static,建议还是用static
BOOTPROTO=static
#v6, 需要设置为Yes
IPV6INIT=yes
#v6,因为要手动指定ip,故此应该设置为no
IPV6_AUTOCONF=no
DELAY=5
STP=no
#是否为v4的默认网关,如果非默认网关,设置为no
DEFROUTE=yes
#v4,ip
IPADDR=192.168.1.125
#v4,掩码
NETMASK=255.255.255.0
#v4,网关
GATEWAY=192.168.1.1
#v6,是否开启dhcp
DHCPV6C=no
#v6, 如果是默认网卡,设置为yes,若不是,设置为no。然而,实际验证,这个配置似乎没有效果
IPV6_DEFROUTE=yes
#v6,ip
IPV6ADDR=FD00::4000:10/100
#v6,网关,也可以加网卡名称配置上来,如:IPV6_DEFAULTGW=FD00::4000:1%eth0
IPV6_DEFAULTGW=FD00::4000:1
IPV6_FAILURE_FATAL=no
IPV4_FAILURE_FATAL=no
配置示例,未包含说明
# 修改/etc/sysconfig/network,设置
NETWORKING_IPV6=yes
IPV6_AUTOCONF=no
IPV6FORWARDING=yes
#IPV6_DEFAULTDEV=eth1
# ifcfg网卡配置文件
DEVICE=br_eth0
NAME=br_eth0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPV6INIT=yes
IPV6_AUTOCONF=no
DELAY=5
STP=no
DEFROUTE=yes
IPADDR=192.168.1.125
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DHCPV6C=no
IPV6_DEFROUTE=yes
IPV6ADDR=FD00::4000:10/100
IPV6_DEFAULTGW=FD00::4000:1
IPV6_FAILURE_FATAL=no
IPV4_FAILURE_FATAL=no
如何使配置生效
对于network管理的系统(比如c76),
systemctl restart network
# 或者
ifdown eth0
ifup eth0
对于NetworkManager管理的(比如kylin),使用nmcli命令
# 重新加载配置
nmcli c reload
# 重启connection
nmcli c down eth0
nmcli c up eth0
# 重启所有interface
nmcli n off; nmcli n on
#nmcli n off
#nmcli n on
NetworkManager有2个概念。
一个是device,相当于是“硬件”网卡设备。(也包含虚拟网卡)。
一个是connection。connection类似电脑/手机上常见的wifi管理中的某个网络。
一个device可以有多个connection,但同时只能有一个激活的connection。
类似一台笔记本,里面的网卡硬件是固定的(device固定),但是这台笔记本,可以有n个wifi信号网络,在家里连home名称信号的wifi网络,在公司连office名称信号的wifi网络。
这个"home"、“office”的wifi网络,就是一个connection。而这张物理网卡,同一时间,只能连一个wifi网络。