关于这个问题,随便在搜索引擎一搜,得到的答案都是IPv4地址不够用了, 然后IPv6拥有比IPv4更大的地址空间,能容纳的网络设备更多。
关于IPv4的地址,参考这篇文章,说了全球IPv4地址怎么分配的,这里说了中国分到的IPv4地址约为3.9249左右,约占整个IPv4地址空间的8%。按说我们人口这么多,不应该只有这么点,但实际就是这样,这暴露出我们早期在互联网领域的话语权不够。
随着我们的互联网发展越来越迅速,这个地址远远不够:单说我们的智能手机数量就超过这个这个数。所以在IPv4时代,我们采用一种折中技术:NAT技术来实现大量设备的网络接入。简单来说就是,多个设备共用一个IPv4的IP。
但NAT方案严重制约了我们的互联网发展,最典型的例子,对我们个人来说,你在家里面部署了一个NAS,想要随时访问,因为没有公网IP,就访问不了,以前还可能打个电话给运营商分个公网IPv4地址给你,现在都分不了了。对整个国家来说,我们目前的人工智能、云计算、大数据、物联网等领域,都需要大量的IP地址,IPv4地址远远不够,而IPv6能解决地址数量的问题,对整个国家战略都有重大的意义,我们当然要大力发展。
从国家战略层面来说,为了扭转IPv4时代的被动局面,也为了国家高质量的发展,我们国家正在大力推动IPv6的部署。
IPv6是互联网升级演进的必然趋势、网络技术创新的重要方向、网络强国建设的基础支撑。党中央、国务院高度重视IPv6规模部署工作,多次发布相关通知和文件,用于推荐IPv6的建设和发展:2017年中办、国办印发《推进互联网协议第六版(IPv6)规模部署行动计划》,2021年全国人大通过的《国民经济和社会发展第十四个五年规划和2035年远景目标纲要》,2024工业和信息化部办公厅、中央网信办秘书局2024年发布《工业和信息化部办公厅 中央网信办秘书局关于开展“网络去NAT”专项工作 进一步深化IPv6部署应用的通知》。
未来势必会有大量的IPv6地址,与我们息息相关,对于IPv6,我们需要拥抱它,学习它,使用它。
这些可能大家觉得对自己没啥影响,大家觉得我现在用IPv4也挺好的啊。其实不然。在上面去NAT的通知里面,有一句“到2025年7月底前实现试点区域基础电信企业NAT44设备总容量停止增长,主要移动互联网应用(APP)固网侧IPv6流量占比不低于70%。”,你可以这样理解:到2025年,你手机的的app,至少70%的流量都走IPv6了。 如果没有IPv6,举例一个实际场景吧,我们打开某一个视频,一直转转转加载,可能20、30秒才能刷出来。这中间的技术过程就是:手机网络IPv6优先,然后先用IPv6地址去请求服务端,因为配置的原因,这个IPv6地址不具备上网条件(为啥上不了网,呆会儿说),需要先等IPv6超时,然后又重新用IPv4地址去请求,这才打开对应的视频。体验非常差吧,我们家里面的网络怎么样配置才能支持呢?
用手机,或者电脑浏览器,打开www.ipw.cn
,即可看到是否支持IPv6了。
如果是这样,那就表明支持IPv6.
如果这样,那就是不支持IPv6
很多人人为,我现在用IPv6,别人没用,那用的人少,是不是应该更快点。这个其实是不对的,速度的快慢,由你的网络供应商确认。v4或者v6是协议的不一样,只是数据包封装的方式不一样,并不是换了一条道。这里做了个测试,用v4或者v6去ping baidu.com,可以看到时延都基本在32ms左右。没有说v6就比v4快。
root@localhost:~# ping www.baidu.com -c 3
PING www.a.shifen.com (183.2.172.185) 56(84) bytes of data.
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=1 ttl=52 time=33.3 ms
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=2 ttl=52 time=33.6 ms
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=3 ttl=52 time=33.8 ms
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 33.291/33.574/33.845/0.226 ms
root@localhost:~# ping6 www.baidu.com -c 3
PING www.baidu.com(240e:ff:e020:9ae:0:ff:b014:8e8b (240e:ff:e020:9ae:0:ff:b014:8e8b)) 56 data bytes
64 bytes from 240e:ff:e020:9ae:0:ff:b014:8e8b (240e:ff:e020:9ae:0:ff:b014:8e8b): icmp_seq=1 ttl=52 time=31.6 ms
64 bytes from 240e:ff:e020:9ae:0:ff:b014:8e8b (240e:ff:e020:9ae:0:ff:b014:8e8b): icmp_seq=2 ttl=52 time=32.1 ms
64 bytes from 240e:ff:e020:9ae:0:ff:b014:8e8b (240e:ff:e020:9ae:0:ff:b014:8e8b): icmp_seq=3 ttl=52 time=31.8 ms
--- www.baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 31.593/31.840/32.110/0.211 ms
root@localhost:~#
这个更不对了,如果不能共存,那随着国家大力推进IPv6的建设,这个过程中你又没有替换,你是不是就上不了网了呢。上面也验证了,同一台机器,是可以支持IPv4和IPv6双栈的,在使用的时候,可以设置哪个优先(windows/linux/mac都有设置的地方,android没找到)。
这里我们说的具备了IPv6,都是指具备了公网v6地址,这个地址是全球唯一的,分配到你的机器上,那通过这个机器就能访问到你的这个设备。这里说的更安全,是IPv6采用的一些安全机制,能够保证更加的可靠。 但是继承自IPv4的安全威胁依然存在,比如你的服务暴露了一些不安全的端口,那可能就会被攻破。而IPv4不存在,是因为做了NAT之后,我们的设备被隐藏起来了,运营商都给我们做了一层拦截。 这里严格意义上来说,不是IPv6不安全,而是这个服务不安全。 这也是华为商城,Google Play等需要严格审核应用上线的原因之一。
这里可能随便往上一搜,有很多内容,很多专业名词,太多东西了,有时候对着操作一通,最后云里雾里的,好像也没解决。很多人直接劝退。今天抛砖引玉,结合我自己的实践,给大家串一串。
在v4的时候,地址要么dhcp活动,要么手动指定。v6的时候,也可以手动指定,或者dhcp,不过IPv6增加了另外一种方式,SLAAC的方式。而且这里的DHCP也和v4的不一样。具体来说就是:
对于以上分配,需要理解如下几点:
1)这个分配工作是路由器向客户端分配,所以以上相关的涉及的配置,都在路由器上配置
2)路由器可以同时开启SLAAC和DHCPv6,这样客户端会分到多个地址
有同学可能就会问了,v6不都是公网地址,我机器上也有地址了,那我肯定就能同外界通信了啊。其实这里不一定,有相应得路由配置才行。这也是很多帖子再说,我都看到机器上配置了地址,但是还是不通,其实就路由不对。
怎么样得路由才算对呢,举例说下:通信链路是这样得: 客户端(A)<---> 路由器(B)<--->外部公网v6(C)。 这里得两段都需要有来有回才行,比如我客户端A发出一个请求,路由器B也转发出去了,外部服务C也回复了,路由器也收到回复了,但是路由器没将其回复给A,这样表现就是A得v6不通外网。这种情况,在用中继得情况可能会遇到。
因为IPv6都是公网地址,具体流量路径为:都是WAN -> LAN -> 二级路由 WAN -> 二级路由 LAN.... 上面提到得分配方式适用这个链路里面的各级路由器。
我们的手机,电脑等,其实都是最末端路由器下面的设备,那我们得先弄清楚位于最末端得上一级路由(很多时候就是运营商得配置,我们左右不了,如果不支持,那就是运营商的问题)给我得是啥?
这里有几种情况:
1) 上级路由,没有给我IPv6, 那就是不支持,怎么折腾都没用
2) 上级路由已经配置好了,就给单一得IPv6地址。那我下级路由就只能选择中继模式来配置了。
3) 上级路由开启了Delegate IPv6 prefixes(又是一个新概念),这个很多时候翻译为:委托前缀;这里表示的是上级设备给我们分配了至少一个/64位得地址段。如:240e:3c1:5665:1cd4::/60,这个简单理解就是上一级给了一个/60位的IPv6子网网段,这个子网网段内的地址你可以自自由分配配了,是不是觉得非常奢侈,IPv6就是这样的。
结合以上论述,说下我们路由器上配置的思路:
对家庭用户来说,设置IPv6主要就是运营商的网关和路由器了。网关上动的少,基本现在运营商给配置好的都是默认支持的,剩下的就路由器。商用路由器上就这么几个按钮,开启,关闭,都点了,能支持就支持,支持不了你找售后也没用(我最开始用小米的路由器就这样,售后10几天不回消息)。
为了便于大家理解,接下来的,我结合软路由来说下这些配置是啥。
这里网关选择的是路由模式,或者桥接模式其实什么关系,结合上面的思路,影响我们在下一级路由配置的,主要是看是否能分配到PD前缀。
这里路由模式,对应的网关作为路由器,开启了SLAAC和DHCPv6。 这里根据自己的实际选择来配置吧。
1)先正常创建WAN6口,协议选择DHCPv6。
请求v6地址选择try,请求指定长度的IPv6前缀,选择64,或者自动,其他的默认的即可:
如果觉得网关是路由模式比较麻烦,可以改成桥接,OpenWrt是主路由,那么wan6选择pppoe就行了,参数复用WAN口的。
2) 配置完成,看一下wan6口的地址配置情况,如果是如下的:可以看到,我们分到了一个IPv6-PD,是一个/64位的。所以我们可以选择使用中继模式,也可以选择使用服务器模式来给下一级的设备来分。
剩下的配置主要分为服务器模式,和中继模式。简单来说,就是服务器模式就是我来决定我的后端设备怎么来分。中继模式就是我就是完全透传,上一级给我啥,我就转发给下面什么,我不做任何配置。
场景1:服务器模式来配置OpenWrt
如果你没有分到PD,那跳过这部分,直接看后面的中继模式。 Network/网络 -> Interfaces/接口:
WAN -> Edit/编辑 -> Advanced Settings/高级设置: Delegate IPv6 prefixes/委托 IPv6 前缀 -> 打勾✓,如果不打勾,路由器 LAN口 将不会自动分配到 公网IPv6 地址。
LAN -> Edit/编辑 -> Advanced Settings/高级设置 Delegate IPv6 prefixes/委托 IPv6 前缀 -> 打勾✓,如果不打勾,你的二级路由将不会获取 公网IPv6 分配规则。 IPv6 assignment length/IPv6 分配长度 -> 选择或输入大于 WAN口 IPv6-PD 的数字
LAN -> Edit/编辑 -> DHCP Server/服务器 -> IPv6 Setting/设置 RA 服务, 设置为 server/服务器模式。Router Advertisement,路由通告,路由器主动在网络上告诉局域网设备,我是路由器,可以响应客户端发的RS消息,也可以定期发送RA消息。 DHCPv6, 设置为 server/服务器模式。分配P NDP Proxy/代理, 选择禁用
LAN-> Edit/编辑 -> DHCP Server/服务器 -> IPv6 RA Settings/设置 Enable SLAAC -> 打勾✓,很多设备不支持DHCPv6 只支持 SLAAC。下面的RA标记那里,一般后面的参数,默认即可。
至此,路由器就配置完成。客户端可以验证IPv6的访问了。登录到路由器,可以看到有这样一条路由,目标网段就是分配IPv6-PD:
单独走lan口转发的,和wan口(eth1)的路由不一样,这样就能保证:上行流量从eth1转发,下行的会走br-lan口,道道客户端。确保客户端能够上网。
场景2:中继模式
如果没有获取到PD,或者觉得麻烦,那就直接中继吧 中继模式就是透传,所有前面wan口和lan口的关于委托前缀的,都不生效了。 Network/网络 -> Interfaces/接口->WAN6 -> Edit/编辑->DHCP Server/服务器 General Setup/常规设置 Ignore interface/忽略此接口 -> 请打勾✓,因为 IPv6 只需要下面 DHCPv6 中继服务。
IPv6 Setting/设置 Designated master/指定的主接口 -> 必须打勾✓ RA 服务 -> 设置为 relay/中继模式。
DHCPv6 -> 设置为 relay/中继模式。 NDP Proxy/代理 -> 设置为 relay/中继模式
LAN - Edit/编辑->DHCP Server/服务器 -> IPv6 Setting/设置 RA 服务 -> 设置为 relay/中继模式。 DHCPv6 -> 设置为 relay/中继模式。 NDP Proxy/代理 -> 设置为 relay/中继模式
此时路由器路由如下(这里eth0是wan口):
有两段/62位的路由,都走eth0发出去,优先级不一样而已
240e:399:e53:7a40::/64 dev eth0 metric 256
240e:399:e53:7a43::/64 dev eth0 metric 1024
我的客户机分到了IPv6地址为:240e:399:e53:7a40:be24:11ff:feab:bf99/64
此时我从客户机(240e:399:e53:7a40:be24:11ff:feab:bf99)往外发一个请求,到达路由器,路由器有default的路由,可以继续网外发,远端正常回复,此时服务端回复的这个包的目的地址是我的客户机bf99这个地址,但是这个数据包到达路由器之后,发现匹配到了metric 256的这条路由,他继续走wan口转发,就找不到我们的客户机了,表现就是我客户机用v6上不了网。正常的是走LAN口转发给我们的客户机。 这个时候,手动从客户机trace一下,或者ping下,触发我们路由器更新路由,我ping下路由器的v6地址,可以看到新增了一条明细路由:
240e:399:e53:7a40:be24:11ff:feab:bf99 dev br-lan metric 1024
这就表示对路由器来说,bf99这个地址的包,走lan口去发送,这样我们客户端就能够正常通信了。
造成以上的是odhcp的中继模式和IPv6本身的NDP机制引起的,论坛上有人说用6relayd,但是没试过。
总结起来,正确的配置和使用,关键在于几点:
关于v6的配置,折腾了很久,一直想写,但是总觉得没有彻底理解。我尽量没写很多复杂的原理、协议等,担心太晦涩了。如果都看到这里了,理解了或者不理解,都可以留言说下,有什么问题也可以留言或者私信讨论。
参考文章:
IPv6 原理及如何设置 OpenWrt
odhcpd 中继模式原理、局限以及解决方案