最近青岛大学在部分教学楼中部署了 IPv6 实验网 (学生宿舍区以及 WLAN 暂时未覆盖)。 IPv6 的部署有一些独特的挑战,从老旧设备无法支持到 IPv6 动态路由协议需要单独配置以及地址规划与 IPv4 的方式迥异,一切都带来了较大的挑战。
好消息是,这是一个有零技术债的平台,至少可以从零开始,把 IPv4 部署中的教训吸取并采用。
最根本的挑战,是 IPv6 的地址规划方法。 CERNET 分配了一个 /48 的地址空间,因此实际的分配必须要进行精细化——为了使用 SLAC 功能,每个交换机上最小为 /64,因此只有 2^16 个 /64 可以分配。为了考虑今后的扩展性,规定每个楼宇/楼宇交换机独占一个 /60,以备在接下来三十年中的地址需求。
关于每个楼的地址需求,可以简单的进行估算。考虑到今后的传感器、物联网设备需求,每个楼层可能会有上百到上千个此类设备。在楼层满载时,每个教室大约可容纳 80 人,每个楼的容量在万人以内。假设每人携带十部联网设备,每个楼的地址需求量为十万到几十万级别。当然,一个 /64 现在看起来依然足够,但是为了避免犯“预测未来”的愚蠢错误,多分配一些又何妨?
分配 IPv6 地址的核心考虑便是如何最大程度确保地址利用率以及可扩展性。这里,考虑到青岛大学的实际情况,首先分配成几个大的区域——核心网、西院、东院、师范学院、东校区、中心宿舍区、东校区宿舍区。
在 IPv6 地址分配中,另一个考虑点便是为了容易阅读以及管理,地址应对其到单个字母。因此,从 /48 开始,分配对齐到字母时, prefix 长度应为 52, 56, 60, 64;分别对应第 9、10、11、12 位地址。
为了更好的扩展性,分配地址时,先把地址均等分为 4 或 8 或 16 份,粗略的将每个功能对应的地址数量需求进行整理,并进行分配。结合青岛大学的实际情况,将地址分为八扇区、每扇区为两个 /52 时,可以得到较好的利用。这八个扇区分别为核心网、西院、东院、师范学院、东校区、其他小型园区、宿舍区、互联区。
这种规划方式的好处是,即使当前情况下该功能区域不会用到这么多地址,在之后需要更多地址时,此区块拥有接下来的一部分连续未分配预留地址,也会更方便路由的 summarization. 接下来的楼宇分配也类似。下图为西院的分配表。
为了帮助追踪以及计算,使用电子表格是个不错的主意。这里,我使用了 =CONCAT(CONCAT('总分配'!$C$19, CONCAT(A6, "::")), CONCAT("/", C6))
公式用于计算地址,你可以以它为基础构建你的电子表格。
在部署方面,首先的挑战是 IPv6 本身的支持。这对于我校使用的核心层设备并无任何挑战,华三也类似。
下一个挑战,其实来自于接入层。青岛大学拥有上百台接入层设备,大部分接入层设备的 IOS 版本老旧,因此作为前提条件,自动化升级变成了必要的。解决这个问题的方法有很多,常见的是使用网管软件,但由于没有购买带有这类高级功能的网管软件,因此使用 expect 来进行升级变成了次优解。
由于青岛大学也没有一份权威的接入层交换机列表,因此使用了 snmp 先扫描获取得到了所有的接入层设备列表。
下面的脚本展示了如何登陆交换机并执行命令:
#!/usr/bin/expect set timeout 5 set hostname [lindex $argv 0] set username "username" set password "yourpassword" set enablepassword "yourenablepassword" spawn telnet $hostname expect "Password:" { send "$password\n" expect ">" { send "en\n" expect "Password:" send "$enablepassword\n" } } expect "#" { send "show version\n" send "q\n" } interact
可以使用 for host in `cat hosts`; do ./upgrade $host; done
的方式进行处理。
除此之外,遇到的问题还包括互联地址的划分问题。这里的解,目前是使用地址中编码进去 VLAN ID 的。例如 Vlan 1234 = 0x4d2,因此 Vlan 1234 对应 2001:250:5823:04d2
,由于 Vlan ID 最大为 4096,因此三位十六进制数正好足够编码 Vlan ID。
目前,运行了一段时间的 IPv6 网络情况正常。