初识IPv6
引用
IPv6地址的基本格式
https://docs.oracle.com/cd/E19253-01/819-7058/ipv6-overview-123/index.html
- 前48位
2001:0db8:3c4d
包含表示公共拓扑的站点前缀 - 随后的16位
0015
包含代表站点专用拓扑的子网ID - 低阶(最右边的64位
0000:0000:1a2f:1a2b
)包含接口ID
16B(128b),使用:
隔开,:
隔开的长度是16b(2B)
xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
,字符长度是45
地址监听
IPv4中面向所有地址的监听是0.0.0.0
,IPv6中是 ::
,并且::
这种格式是兼容IPv4的,只要写成listen=::
或bind=::
,可以同时支持IPv4和IPv6的监听。
URL
因为:
可能导致误解,URL中的IPv6地址写成这样,[]
是必需的:
curl -g -L http://[xxxx::xxxx]:80
特殊地址
https://docs.netgate.com/pfsense/en/latest/network/ipv6/subnets.html#special-ipv6-subnets
:: ## 等同于ipv4里的0.0.0.0
::1 ## 等同于ipv4里的127.1或127.0.0.1
fc00::/7 ## Unique Local Addresses (ULA) - also known as “Private” IPv6 addresses.
fe80::/10 ## Link Local addresses, only valid inside a single broadcast domain.
2001::/16 ## Global Unique Addresses (GUA) - Routable IPv6 addresses.
ff00::0/8 ## Multicast addresses
IPv6里没有广播地址,最多是组播地址。
和ipv4一样,如下网段被用于本地私有网络:
fc00::/7
fd00::/8
这类似于ipv4里的: 10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16
配置文件
NOTE(chengml),这个是redhat系列的,debian系列没看。
因为ipv6的IP地址可以如下配置:
IPV6ADDR=xxxx:xx/xx
所以,如果同时配置IPv4和IPv6,可以类似如下区分:
IPADDR=x.x.x.x
PREFIX=24
IPV6ADDR=xxxx::xx/112
DHCP
对应到IPv4和IPv6,DHCP也分为DHCPv4和DHCPv6
DHCPv6和DHCPv4有很大区别,因为没有广播地址,所有没有广播报文,而是基于ICMP6的请求和应答报文。
先看看link-local address
link-local address
一个网卡上一般有两个IPv6地址,一个是link-local address,一个是global address
前者是基础,后者是真正拿来使用的,比如访问互联网。
前者一般是根据MAC地址生成,常见的生成方法叫EUI-64,实际上EUI-64生成了link-local address中最关键的部分
link-local address长这样:
如果源MAC是00:0a:95:9d:68:16
,可以得到:fe80::020a:95ff:fe9d:6816
,生成过程如下:
00:0a:95:9d:68:16 ## 原始MAC
00:0a:95:ff:fe:9d:68:16 ## 中间加上ff:fe
02:0a:95:ff:fe:9d:68:16 ## 00000000 > 00000010,到此,EUI-64格式的interface ID已经生成: 020a:95ff:fe9d:6816
fe80::020a:95ff:fe9d:6816 ## 前面插入fe80
DHCPv6
只有有MAC地址,就会自动生成一个link-local address,剩下其它的都要基于这个link-local address了。
回到DHCPv6,不管请求还是应答,都是基于link-local address的ICMP6报文。
和 DHCPv4的区别是,DHCPv6只会提供地址分配,不会告诉client子网信息。
client拿到地址之后,并不知道子网的CIDR,这个子网有多大,需要路由器来告知,路由器发送的RA(router advertisement)提供。
NDP
NDP协议,Neighbour Discovery Protocol,包含了一系列的报文:
- NS/NA: neighbour solicitation, neighbour advertisement
- RS/RA: router solicitation, router advertisement
- NR: neighbour redirection
solicitation就是请求的意思,advertisement就是应答。
NS/NA这对报文对应到IPv4里的ARP报文,用来询问获得MAC地址和IP地址的关联关系,完善ARP表。
RA是从路由器发出的,路由器发这个报文有两种场景,被动和主动,当有人请求时,会发送RA来应答;当没人请求时,也会定时发送来通知。
APP with IPv6
各种常见工具,访问IPv6的时候可能需要加上相应的选项:
ping -6 or ping6
ip -6 a s
ssh -6
tcpdump ??
apt-get -o Acquire::ForceIPv6=true install
dhclient -6
ip6tables
curl -6 ## 仅表示自动解析,不是必要
telent -6
..
Windows里不需要区分ping6和ping。
访问global ip和link-local ip,格式上有些不同。
比如ping,global地址直接ping6加上地址就行了,但link-local地址不同:
ping6 -I tap239574f9-75 fe80::f816:3eff:fe91:3b84
或者
ping6 fe80::f816:3eff:fe91:3b84%tap239574f9-75