来了! ipv6 真的来了! 最近回一趟老家,发现老家的 ipv6 也可以用后, 家,公司,老家1,老家2 四个地方的 ipv6 就全部都能互通了。这样,就没有理由留着 ipv4 了。我甚至觉得搞个公网 ipv4 地址是多么可笑的一件事。
全ipv6化以后,为了互连方便,我把所有的支持 ipv6 的设备,都配置了动态域名。编译了 dnspodc 还有交叉编译了 dnspodc 到各种设备上。但是,打印机让我头疼了。打印机支持ipv6, 但是不支持运行自己写的程序。
而且为那么多设备一个一个编译并配置 ddns 更新程序,着实让我有点筋疲力竭。我开始思考,让一个程序自动为所有设备都更新 ddns。
ipv6 地址,使用的是 prefix + host 的方法构成。不同于 ipv4 时代 prefix 按照 /8 /16 /24 分成了 A B C 三类地址,后来又发明了 CIDR 无分类地址,可以使用任意长度的 prefix, ipv6 时代建议 prefix 永远等于 64 。低于 64 的 prefix 只用于地址分配机构分配地址,还有路由聚合简化路由表的时候用。实际过程中进行地址分配,一个局域网下永远让 prefix=64。
这么做有个什么好处呢? 就是 无状态地址自动配置 能发挥作用。而且 64bit 的 prefix 意味着 主机地址可以有 64bit, 也就是说永远不会遇到 主机位不足的情况。 ipv4 时代使用 C 类地址的时候,就容易遇到局域网超过 255 台机器的情况。好不容易划好的网络,增加一台可能导致整个网络重新规划。而 64bit 的 prefix 一劳永逸的解决了这个问题。
无状态地址自动配置的方法是,由网关每隔一段时间广播一个 RA 包。RA 包里包含了 prefix , dns,网关 等等信息。主机收到 RA 后, 把 prefix和自己生成的 host 一拼接,就 获得了 全球可达的 ipv6 地址了。
在 PPPoE 拨号环境下, prefix 是由 dhcp-pd 协议由 ISP 下发给路由器的,所以 prefix 会不断的变化,是动态的,所以需要设置动态域名。但是 host 部分是不会变的。 host 部分是使用 mac 地址经一定规则变换而来。这个规则叫 EUI-64。对于不需要被外部访问的主机来说,可以开启 mac 地址随机化和隐私保护,使用随机的主机地址。当然不想被访问也就不会有动态域名的需求了,所以这里只考虑使用固定的 EUI-64 方法构造的 ipv6 地址。
这样只要把需要更新动态域名的设备的 mac 地址收集起来,就可以一次性构造出所有设备的 ipv6 地址,不需要在每个设备上单独运行 ddns 程序。
所以,在运行 ddns 的设备上 (可以是路由器,可以是 nas ,可以是一个 树梅派)获取本地地址,取前64bit,然后依次拼接 eui-64 就可以获得一系列设备的 全局ipv6 地址,然后再调用 dns 供应商的接口更新上去,就完成了。
于是搞定后,获得了2个优势:
- 无法运行自定义程序的设备也能更新dns
- 无需在每个设备上设定dns更新程序