IPv6 地址结构、前缀划分、子网的概念
IPv6地址压缩
正确的案例:
单个字段的前导零可以省略
原始地址:f00d:beef:0000:0000:0000:ff00:0077:6666
正确表示:f00d:beef:0:0:0:ff00:77:6666
解释:每个字段中的前导零被省略,但每个字段至少保留一个字符。
连续的全零字段可以用双冒号 :: 表示一次
原始地址:2001:0dad:0000:0000:0000:ff00:0077:6666
正确表示:2001:dad::ff00:77:8329
解释:最长的一组连续全零字段(0000:0000:0000)被替换为双冒号。
双冒号只允许出现一次
原始地址:2001:0b0b:0000:0000:0001:0000:0000:1
正确表示:2001:b0b::1:0:0:1
解释:双冒号表示法只用来替代最长的全零字段,避免歧义。
全零地址的简化
原始地址:0000:0000:0000:0000:0000:0000:0000:0001
正确表示:::1
解释:全零部分完全省略,只保留1。
错误的案例:
没有正确处理前导零
错误的案例
错误表示:2001:0db8:0:00:0:ff00:0042:8329
问题:00 字段不符合规定,应表示为单个 0。
正确表示:2001:db8:0:0:0:ff00:42:8329
不必要地使用双冒号
错误表示:2001:db8::ff00::42:8329
问题:双冒号不能出现两次,会造成歧义。
正确表示:2001:db8::ff00:42:8329
缩写部分未按规范
错误表示:2001:db8::0:0:0:ff00:42:8329
问题:最长的全零字段应该缩写为双冒号,而不是选择其他部分。
正确表示:2001:db8::ff00:42:8329
忽略必要的零
错误表示:2001:db8::ff:42:8329
问题:省略了非前导零部分的 00。
正确表示:2001:db8::ff00:42:8329
总结
RFC 5952 提供了一套明确的规则,旨在确保IPv6地址的表示唯一、清晰和无歧义。在简化时,必须遵守以下关键点:
- 字段中的前导零可以省略,但不能完全省略字段。
- 双冒号只能使用一次,并且只能替代连续的全零字段。
- 在多个可能简化的地方,优先简化最长的全零字段。
- 按照这些规则,IPv6地址的表示将更加标准化和简洁,同时避免理解上的混淆。
子网
ps:之所以在58d这里分开是因为联通运营商给的前缀 为/60
总共128位的IPv6 地址。计算可分配子网数量 128-64-60=4
排列组合4位计算:2^4=16,也就是16个子网是可以给个人消费者去自主划分使用的。
vlan就会有更多的可能。
如果你的IPv6-PD 为/48 后缀那么你的子网数量 128-64-48=16即 2^16=65536个子网。
如果你的IPv6-PD 为/56 后缀那么你的子网数量 128-64-56=8即 2^8=256个子网。
解释
与 IPv4 一样,IPv6 可以对网段进行子网划分。在上图中,前 64 位被指定为网络部分,而最后 64 位用于主机标识。
在网络部分中,前60位是路由前缀 —— 也就是网络地址。在国内运营商中,大部分个人网络位的最后一个占位是子网 ID。
路由前缀+ 子网 = 前缀
举例:2408 : 8888 : 6600 : 58d 8 : add8 : 737c : 174 : be13 /64
其中含义 运营商提供的 /60 前提下
2408 : 8888 : 6600 : 58d 8
为前缀和子网id组成 俗称 IPv6-PD2408 : 8888 : 6600 : 58d
路由前缀8
子网id
当运营商分配的前缀为/60时,通过配置hint 可以指定子网ID 从而进行子网划分。
类比你的本地地址:192.168.10X.X 可以设置多个本地lan口子网进行隔离管理。
正常情况下,WAN_6口会获取到IPv6-PD前缀地址用于进行ipv6的生成
/60 就是运营商固定的那部分为:2408:8888:6611:a56 这60位。
剩下那16位集中在最后一位数字上分别位0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f 通过IPv6 hint 分配提示来控制。通常我们不需要指定,不设置交给系统自动划分就好。只有复杂的拓扑才需要设置。
OpenWRT 的相关参数含义
有了上述理论基础,IPv6在OpenWRT 中的设置参数主要分为这两个文件,一个是network,一个是dhcp均在
/etc/config 文件夹下 luci 界面也进行了截图
network 相关参数
/etc/config/network 文件中的 IPv6 参数
与接口相关的配置主要在 network 文件中设置。
WAN 接口中的 IPv6 选项
option proto 'dhcpv6'
- 解释:启用 DHCPv6 客户端模式,从上游路由器或 ISP 获取 IPv6 地址。
option reqaddress 'try'
- 解释:控制 DHCPv6 是否请求地址:
try: 请求一个地址,但非强制。
none: 不请求任何地址。
option reqprefix 'auto' # 请求指定长度的IPv6前缀
- 解释:设置请求的前缀大小:
auto: 自动从上游请求。
no: 不请求任何前缀。
option ip6assign '0'
- 解释:分配给该接口的 IPv6 前缀长度。常见值有 /64 或 /56。
如果设置为非 0,则会自动为 LAN 接口分配前缀。
option delegate '1'
- 解释:启用 IPv6 前缀委派功能。路由器将请求并下发上游分配的 IPv6 前缀给下游设备。
LAN 接口中的 IPv6 选项
option ip6assign '64'
- 解释:分配给该接口的IPv6前缀长度。例如:/64。
需要确保从上游获取的前缀足够大(如 /56),以分配多个子前缀。
option ip6hint 'x'
- 解释:指定 LAN 接口的子前缀后缀(配合 ip6assign 使用)。
option ip6class 'wan6'
- 解释:指定从哪个接口继承前缀类。
DHCP 相关参数(LAN 为主)
/etc/config/dhcp 文件中的 IPv6 参数
控制 DHCPv6、RA(Router Advertisement)等与 IPv6 地址分配相关的行为。
常用 IPv6 选项
option ra 'server'
- 解释:控制 Router Advertisement(RA)功能,选项:
server: 路由器作为 RA 服务器。
relay: 转发 RA。
disabled: 禁用 RA。
option dhcpv6 'server'
- 解释:控制 DHCPv6 服务功能:
server: 路由器作为 DHCPv6 服务器。
relay: 转发 DHCPv6。
disabled: 禁用 DHCPv6。
option ra_management '1'
- 解释:控制 RA 中的 M 和 O 标志(管理地址配置):
0: 仅通过 SLAAC 分配地址。
1: 通过 SLAAC 分配地址,同时提供 DHCPv6 地址分配。
2: 禁用 SLAAC,仅使用 DHCPv6。
option ra_default '1'
- 解释:设置路由器是否在 RA 中宣布为默认网关。
option ra_lifetime '1800'
- 解释:设置 RA 中默认网关的生命周期(单位:秒)。
option dhcpv6_assignall '1'
- 解释:如果启用,则将所有前缀分配给 DHCPv6 客户端。
控制 DHCPv6 前缀分配
option dhcpv6 'server'
- 解释:启用 DHCPv6 功能以分配地址。
option leasetime '12h'
IPv6 地址的租期。
option ra_hoplimit '64'
- 解释:设置 RA 数据包的跳数限制。
option force '1'
强制使用 DHCPv6 分配,即使 RA 不完全兼容。