拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

BIND IPv6 DNS配置核心原理与ip6.arpa反向解析详解

BIND IPv6 DNS配置核心原理与ip6.arpa反向解析详解

简介:本资源是一份面向Linux系统管理员与网络工程师的专业技术文档,聚焦IPv6时代DNS基础设施建设,系统讲解在Linux环境下部署支持IPv6的BIND DNS服务器的完整流程。内容涵盖IPv6地址结构与分类、DNS分层授权机制、正向/反向解析原理(特别是ip6.arpa域配置)、named.conf关键参数设置、AAAA与PTR记录编写规范,以及防火墙适配等实操要点,兼具理论深度与工程指导性。资源为单文件PDF文档,共1个266KB的学术论文型技术报告,源自《计算机技术与与发展》2006年第8期,由郑州大学研究团队撰写,含详细配置实例与问题分析。目前已有367人学习下载,适合需快速掌握IPv6 DNS部署要点、理解v4/v6解析差异、参考权威配置范式的中高级运维人员与网络开发学习者。

1. 这不是“升级BIND就能用IPv6”的幻觉:一份2006年的PDF,为什么今天还在被工程师翻烂?

你刚在公司内网部署完一台 Ubuntu 22.04 的 DNS 服务器,named -v显示是 BIND 9.18,ip -6 addr show确认网卡已获取2001:db8::1/64,/etc/named.conf里也加了listen-on-v6 { any; };——可一跑dig AAAA www.example.com @::1,返回却是SERVFAIL。查日志?journalctl -u named | grep -i ipv6干干净净;抓包?tcpdump -i lo port 53 and ip6根本没流量。你开始怀疑人生:是不是内核没开 IPv6?是不是防火墙拦了 UDP 53?还是……BIND 根本没在 IPv6 socket 上 bind 成功?

这时候,有人甩给你一个 PDF 文件名:《Linux环境下构建支持IPv6的DNS服务器.pdf》,2006年刊发于《计算机技术与发展方向》。你皱眉点开——满屏宋体小五、手绘流程图、vi /etc/named.conf的原始截图,连AAAA记录都写成A A A A带空格。你差点关掉。但三分钟后,你停在了第 207 页那个ipv6-addr.arpa.zone文件的反向解析段落上,手指悬在键盘上方:原来0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.c.7.0.0.0.0.0.f.1.2.3.e.f.f.3不是乱码,而是3ffe:321f:0000:07c2:0000:0000:0000:0000按半字节(nibble)倒序展开的十六进制字符串——这正是dig -x 3ffe:321f::7c2背后的真实查询路径。

这不是怀旧文档。这是 IPv6 DNS 配置的「黑匣子解密手册」。它不讲systemctl restart named,它讲named启动时如何从named.ca加载根提示、如何把ipv6.zzu.edu.cn.的AAAA记录和ip6.arpa反向区的PTR记录在内存中建立双向映射;它不教你怎么用nmcli配 IPv6 地址,它用modprobe ipv6和/proc/sys/net/ipv6/conf/all/disable_ipv6的开关逻辑,告诉你为什么listen-on-v6 { any; };在某些内核版本下会静默失效。这份诞生于 IPv4 地址枯竭前夜的论文,恰恰卡在了所有现代配置工具(如dnsmasq、CoreDNS、systemd-resolved)刻意封装掉的底层断层带上——而这个断层,就是你dig返回SERVFAIL的真正原因。它适合谁?适合所有在bind9日志里看到no IPv6 interfaces found却查不到源码注释的运维;适合所有在dig +trace里看到;; SERVER: ::1#53(::1)却始终无法让::1响应AAAA查询的开发;更适合所有以为AAAA就是A记录的简单复制、却在反向解析时栽进ip6.arpa层级授权泥潭的网络工程师。这不是历史文物,这是你今天下午三点必须打开的「后悔药」。

1.1 为什么2006年的配置逻辑,比2024年的GUI向导更可靠?

因为 GUI 向导和自动化脚本(比如apt install bind9-dnsutils && sudo dpkg-reconfigure bind9)默认只做三件事:启动服务、监听127.0.0.1、加载localhost区。它们不会碰named.conf里的options块,更不会主动创建ip6.arpa反向区文件——而这恰恰是 IPv6 DNS 的命门。BIND 9.x 的设计哲学是「显式优于隐式」:它不会因为你listen-on-v6 { any; };就自动为你生成::1的反向解析记录;也不会因为你写了AAAA记录,就自动在ip6.arpa下为你建好0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.c.7.0.0.0.0.0.f.1.2.3.e.f.f.3这种超长 PTR 名。它要求你亲手把正向(域名→IPv6)和反向(IPv6→域名)这两条链,用SOA、NS、AAAA、PTR四种资源记录,像搭积木一样严丝合缝地扣在一起。2006 年的论文没有偷懒,它把每一块积木的形状、尺寸、咬合方向都画了出来——比如zone "ipv6-addr.arpa" IN的file路径必须和named.conf里声明的完全一致,否则named-checkconf不报错,但named -g启动时会直接 abort;比如SOA记录里的序列号2005070800必须是 YYYYMMDDNN 格式,且每次修改区文件后必须递增,否则从服务器拒绝同步。这些细节,被现代工具抽象成了「高级设置」里的一个复选框,而那个复选框背后,就是这篇 PDF 里第 207 页的 17 行 zone 文件内容。

1.2 你遇到的SERVFAIL,90% 源于三个被忽略的「协议层断点」

第一个断点在IPv6 socket 绑定层:BIND 9.16+ 默认启用use-v6-socket yes;,但若你的系统/proc/sys/net/ipv6/conf/all/disable_ipv6为1,或net.ipv6.conf.all.forwarding = 0(即使你只是做 DNS,不转发),BIND 会静默跳过 IPv6 初始化,日志里连 warning 都不打。第二个断点在区域授权链:dig AAAA www.zzu.edu.cn @::1成功,不代表dig -x 3ffe:321f::7c2 @::1成功——因为前者查的是zzu.edu.cn区,后者查的是ip6.arpa区,而这两个区在named.conf里是两个独立的zone块,必须分别定义、分别加载、分别检查语法。第三个断点在反向解析的 nibble 格式转换:3ffe:321f::7c2的完整 128 位是3ffe:321f:0000:0000:0000:0000:0000:07c2,按 RFC 3596 要求,必须拆成 32 个半字节(每个 4 bit),再倒序排列,即 `2.c.7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.......## 1. 这不是“升级BIND就能用IPv6”的幻觉:一份2006年的PDF,为什么今天还在被工程师翻烂?

你刚在公司内网部署完一台 Ubuntu 22.04 的 DNS 服务器,named -v显示是 BIND 9.18,ip -6 addr show确认网卡已获取2001:db8::1/64,/etc/named.conf里也加了listen-on-v6 { any; };——可一跑dig AAAA www.example.com @::1,返回却是SERVFAIL。查日志?journalctl -u named | grep -i ipv6干干净净;抓包?tcpdump -i lo port 53 and ip6根本没流量。你开始怀疑人生:是不是内核没开 IPv6?是不是防火墙拦了 UDP 53?还是……BIND 根本没在 IPv6 socket 上 bind 成功?

这时候,有人甩给你一个 PDF 文件名:《Linux环境下构建支持IPv6的DNS服务器.pdf》,2006年刊发于《计算机技术与发展方向》。你皱眉点开——满屏宋体小五、手绘流程图、vi /etc/named.conf的原始截图,连AAAA记录都写成A A A A带空格。你差点关掉。但三分钟后,你停在了第 207 页那个ipv6-addr.arpa.zone文件的反向解析段落上,手指悬在键盘上方:原来0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.c.7.0.0.0.0.0.f.1.2.3.e.f.f.3不是乱码,而是3ffe:321f:0000:07c2:0000:0000:0000:0000按半字节(nibble)倒序展开的十六进制字符串——这正是dig -x 3ffe:321f::7c2背后的真实查询路径。

这不是怀旧文档。这是 IPv6 DNS 配置的「黑匣子解密手册」。它不讲systemctl restart named,它讲named启动时如何从named.ca加载根提示、如何把ipv6.zzu.edu.cn.的AAAA记录和ip6.arpa反向区的PTR记录在内存中建立双向映射;它不教你怎么用nmcli配 IPv6 地址,它用modprobe ipv6和/proc/sys/net/ipv6/conf/all/disable_ipv6的开关逻辑,告诉你为什么listen-on-v6 { any; };在某些内核版本下会静默失效。这份诞生于 IPv4 地址枯竭前夜的论文,恰恰卡在了所有现代配置工具(如dnsmasq、CoreDNS、systemd-resolved)刻意封装掉的底层断层带上——而这个断层,就是你dig返回SERVFAIL的真正原因。它适合谁?适合所有在bind9日志里看到no IPv6 interfaces found却查不到源码注释的运维;适合所有在dig +trace里看到;; SERVER: ::1#53(::1)却始终无法让::1响应AAAA查询的开发;更适合所有以为AAAA就是A记录的简单复制、却在反向解析时栽进ip6.arpa层级授权泥潭的网络工程师。这不是历史文物,这是你今天下午三点必须打开的「后悔药」。

1.1 为什么2006年的配置逻辑,比2024年的GUI向导更可靠?

因为 GUI 向导和自动化脚本(比如apt install bind9-dnsutils && sudo dpkg-reconfigure bind9)默认只做三件事:启动服务、监听127.0.0.1、加载localhost区。它们不会碰named.conf里的options块,更不会主动创建ip6.arpa反向区文件——而这恰恰是 IPv6 DNS 的命门。BIND 9.x 的设计哲学是「显式优于隐式」:它不会因为你listen-on-v6 { any; };就自动为你生成::1的反向解析记录;也不会因为你写了AAAA记录,就自动在ip6.arpa下为你建好0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.c.7.0.0.0.0.0.f.1.2.3.e.f.f.3这种超长 PTR 名。它要求你亲手把正向(域名→IPv6)和反向(IPv6→域名)这两条链,用SOA、NS、AAAA、PTR四种资源记录,像搭积木一样严丝合缝地扣在一起。2006 年的论文没有偷懒,它把每一块积木的形状、尺寸、咬合方向都画了出来——比如zone "ipv6-addr.arpa" IN的file路径必须和named.conf里声明的完全一致,否则named-checkconf不报错,但named -g启动时会直接 abort;比如SOA记录里的序列号2005070800必须是 YYYYMMDDNN 格式,且每次修改区文件后必须递增,否则从服务器拒绝同步。这些细节,被现代工具抽象成了「高级设置」里的一个复选框,而那个复选框背后,就是这篇 PDF 里第 207 页的 17 行 zone 文件内容。

1.2 你遇到的SERVFAIL,90% 源于三个被忽略的「协议层断点」

第一个断点在IPv6 socket 绑定层:BIND 9.16+ 默认启用use-v6-socket yes;,但若你的系统/proc/sys/net/ipv6/conf/all/disable_ipv6为1,或net.ipv6.conf.all.forwarding = 0(即使你只是做 DNS,不转发),BIND 会静默跳过 IPv6 初始化,日志里连 warning 都不打。第二个断点在区域授权链:dig AAAA www.zzu.edu.cn @::1成功,不代表dig -x 3ffe:321f::7c2 @::1成功——因为前者查的是zzu.edu.cn区,后者查的是ip6.arpa区,而这两个区在named.conf里是两个独立的zone块,必须分别定义、分别加载、分别检查语法。第三个断点在反向解析的 nibble 格式转换:3ffe:321f::7c2的完整 128 位是3ffe:321f:0000:0000:0000:0000:0000:07c2,按 RFC 3596 要求,必须拆成 32 个半字节(每个 4 bit),再倒序排列,即2.c.7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.......(此处省略 32 个0.)——而论文里第 207 页的ipv6-addr.arpa.zone文件,恰恰给出了这个转换的完整示例。这不是玄学,这是 RFC 强制规定的字节序;你跳过它,dig -x就永远返回NXDOMAIN。

2. BIND 9 的 IPv6 支持不是「开个开关」:从内核模块到 named.conf 的七层穿透

2.1 内核层:modprobe ipv6不是仪式,而是 socket 初始化的触发器

BIND 9.x 对 IPv6 的支持,始于内核是否真正加载了 IPv6 协议栈。很多人以为只要ip -6 addr show能看到地址,IPv6 就就绪了——错。ip命令显示的是网络层配置,而 BIND 需要的是传输层的AF_INET6socket。在 RHEL 9 / CentOS Stream 9 或更老的系统上(如论文中提到的 RedHat 9.0),IPv6 模块默认是编译进内核的,但可能未被自动加载。此时lsmod | grep ipv6返回空,ss -tuln | grep :53只能看到0.0.0.0:53和:::53(注意:::表示监听所有 IPv6 地址,但若模块未加载,此行实际无效)。真正的验证命令是:

# 检查 IPv6 模块是否加载 lsmod | grep ipv6 # 若无输出,则手动加载 sudo modprobe ipv6 # 验证加载后,/proc/sys/net/ipv6/conf/all/disable_ipv6 应为 0 cat /proc/sys/net/ipv6/conf/all/disable_ipv6 # 必须为 0,否则 BIND 会跳过 IPv6 初始化

提示:modprobe ipv6不是永久生效的。要确保重启后仍有效,需将ipv6写入/etc/modules-load.d/ipv6.conf(或/etc/modules,取决于发行版)。否则systemctl restart named后,BIND 仍会因找不到AF_INET6family 而静默禁用 IPv6 监听。

加载模块后,还需确认内核允许 IPv6 转发(即使你只做 DNS):

# DNS 查询本身不依赖转发,但某些 BIND 版本在初始化时会检查此值 echo 1 | sudo tee /proc/sys/net/ipv6/conf/all/forwarding # 永久生效:写入 /etc/sysctl.conf echo "net.ipv6.conf.all.forwarding = 1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p

2.2 网络层:ip -6 addr add与named.conf的监听地址必须严格对齐

BIND 的listen-on-v6指令不是通配符魔法。它要求named进程启动时,能通过bind()系统调用成功绑定到指定的 IPv6 地址和端口。若你配置了listen-on-v6 { 2001:db8::1; };,但网卡上实际没有2001:db8::1/64这个地址,BIND 会报错并退出。因此,必须先完成网络配置:

# 为 eth0 添加全球单播地址(假设前缀是 2001:db8::/64) sudo ip -6 addr add 2001:db8::1/64 dev eth0 # 验证 ip -6 addr show dev eth0 | grep "2001:db8" # 输出应为:inet6 2001:db8::1/64 scope global noprefixroute

然后,在/etc/named.conf的options块中,必须精确匹配:

options { directory "/var/named"; # 关键:这里必须写具体的 IPv6 地址,不能只写 any # any 仅在网卡已配置 IPv6 地址时才有效;若网卡无 IPv6,any 会失败 listen-on-v6 { 2001:db8::1; }; # 允许查询的客户端(生产环境请严格限制) allow-query { any; }; # 关键:递归查询必须开启,否则 dig +trace 会卡在根服务器 recursion yes; };

参数说明:listen-on-v6 { 2001:db8::1; };中的2001:db8::1是你的 DNS 服务器在 IPv6 网络中的「门牌号」。BIND 会尝试在此地址的 UDP/TCP 53 端口上创建 socket。若地址不存在,named -g启动时会报error: listening on IPv6 interface eth0, 2001:db8::1: address not available并退出。recursion yes;是必须的,因为dig默认发起递归查询;若设为no,BIND 只响应权威查询(即只回答自己 zone 文件里定义的域名),dig www.example.com @2001:db8::1会返回REFUSED。

2.3 BIND 层:named.conf的zone块不是语法糖,而是 DNS 树的物理分叉点

DNS 是一棵树,named.conf里的每个zone块,就是这棵树的一个物理分叉点。IPv4 的in-addr.arpa和 IPv6 的ip6.arpa是两棵完全独立的树,它们的SOA、NS记录互不干涉。论文中第 207 页的配置,清晰地展示了这种分离:

# 正向解析区:zzu.edu.cn -> IPv6 地址 zone "zzu.edu.cn" IN { type master; file "zzu.edu.cn.zone"; allow-update { none; }; }; # 反向解析区:IPv6 地址 -> zzu.edu.cn 域名 # 注意:这里是 "ipv6-addr.arpa",不是 "ip6.arpa"! # 论文中使用了旧式命名,RFC 3596 已标准化为 "ip6.arpa" zone "ipv6-addr.arpa" IN { type master; file "ipv6-addr.arpa.zone"; allow-update { none; }; };

关键区别:ipv6-addr.arpa是论文作者自定义的 zone 名,而现代标准是ip6.arpa。你必须统一:若named.conf里写zone "ip6.arpa" IN,则file必须指向ip6.arpa.zone;若写zone "ipv6-addr.arpa" IN,则file必须是ipv6-addr.arpa.zone。名称不一致,named-checkconf不报错,但named -g启动时会提示zone ipv6-addr.arpa/IN: not loaded due to errors。

3. AAAA 记录不是 A 记录的复制粘贴:正向解析的四个硬性约束

3.1AAAA记录的语法:空格、大小写与冒号的致命精度

AAAA记录的格式看似简单,实则处处是坑。论文中第 207 页的示例N A A A A 3ffe:321f:0000:07c2:0000:0000:0000:0000,其N是主机名(@或www),AAAA是记录类型,后面是 IPv6 地址。但 BIND 对空格极其敏感:

# ✅ 正确:主机名后一个空格,AAAA后一个空格,地址前无空格 www IN AAAA 2001:db8::1 # ❌ 错误1:AAAA 后两个空格,BIND 解析时会把第二个空格后的字符串当作 TTL www IN AAAA 2001:db8::1 # 解析失败,日志:invalid number # ❌ 错误2:地址中混用大小写(虽然 RFC 允许,但某些 BIND 版本会拒绝) www IN AAAA 2001:DB8::1 # 可能报:bad dotted quad # ❌ 错误3:使用双冒号 `::` 但位置错误(只能出现一次,且代表最长连续零段) www IN AAAA 2001:db8::1::2 # 语法错误,BIND 拒绝加载

血泪经验:永远用小写字母写 IPv6 地址,并用named-checkzone严格校验:

# 校验正向区文件 sudo named-checkzone zzu.edu.cn /var/named/zzu.edu.cn.zone # 输出应为:zone zzu.edu.cn/IN: loaded serial 2005070800

3.2SOA记录的序列号:不是时间戳,而是版本控制的唯一标识

SOA(Start of Authority)记录是 zone 文件的「宪法」,其序列号(serial)是 DNS 区域传输(AXFR)的唯一依据。论文中2005070800是YYYYMMDDNN格式(2005年07月08日第00次修改)。但现代运维中,更推荐使用 Unix 时间戳(如2024052001),因为它天然递增且无歧义。关键规则是:每次修改 zone 文件后,serial 必须严格递增。否则,从服务器(slave)会认为新数据比自己旧,拒绝同步。

$TTL 86400 @ IN SOA ns1.zzu.edu.cn. admin.zzu.edu.cn. ( 2024052001 ; serial —— 必须每次修改后+1 22880 ; refresh 7200 ; retry 604800 ; expire 86400 ; minimum ) IN NS ns1.zzu.edu.cn. ns1 IN AAAA 2001:db8::1 www IN AAAA 2001:db8::2

参数说明:refresh(22880秒≈6.3小时)是从服务器向主服务器查询 serial 是否更新的间隔;retry(7200秒=2小时)是查询失败后的重试间隔;expire(604800秒=7天)是若从服务器长期无法联系主服务器,其缓存数据失效的时间;minimum(86400秒=1天)是负缓存(NXDOMAIN)的 TTL。这些值影响 DNS 传播速度和容灾能力,不可随意设为 0。

3.3NS记录的权威性:不是随便写个名字,而是必须能被上游解析

NS(Name Server)记录声明了谁对该 zone 拥有权威。论文中@ IN NS ipv6.zzu.edu.cn.的ipv6.zzu.edu.cn.必须是一个能被外部解析的、且其AAAA记录指向本机 IPv6 地址的域名。若你写@ IN NS ns1.zzu.edu.cn.,则必须确保ns1.zzu.edu.cn.在zzu.edu.cn.zone文件中有对应的AAAA记录:

; ✅ 正确:NS 记录指向的域名,其 AAAA 记录必须存在且正确 @ IN NS ns1.zzu.edu.cn. ns1 IN AAAA 2001:db8::1 www IN AAAA 2001:db8::2 ; ❌ 错误:NS 记录指向的域名无 AAAA 记录,外部解析器会认为该 zone 不可用 @ IN NS ns1.zzu.edu.cn. www IN AAAA 2001:db8::2 ; 缺少 ns1 的 AAAA 记录 → dig NS zzu.edu.cn 会返回 ns1.zzu.edu.cn.,但 dig AAAA ns1.zzu.edu.cn 会失败

4.ip6.arpa反向解析不是in-addr.arpa的镜像:nibble 格式与地址链的深度解耦

4.1 nibble 格式:为什么3ffe:321f::7c2变成了2.c.7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0............?

因为 RFC 3596 规定,IPv6 反向 DNS 查询必须将 128 位地址拆成 32 个 4-bit 的「半字节」(nibble),然后从最低位(最右边)开始,逐个倒序排列,每个 nibble 后加一个点.。3ffe:321f::7c2的完整形式是3ffe:321f:0000:0000:0000:0000:0000:07c2,我们只取最后 16 位07c2:

  • 07c2拆成 nibble:0,7,c,2
  • 倒序:2,c,7,0
  • 加点:2.c.7.0

但dig -x查询的是整个 128 位,所以要对全部 32 个 nibble 做同样操作。07c2是最后 16 位,对应最后 4 个 nibble;前面的0000:0000:0000:0000:0000:0000:321f:3ffe共 112 位,对应前 28 个 nibble,全部是0,倒序后仍是 28 个0.。因此,3ffe:321f::7c2的 nibble 格式就是2.c.7.0+ 28 个0.,再加ip6.arpa.后缀。

4.2ip6.arpa.zone文件结构:PTR记录的域名必须是 nibble 格式全路径

论文中第 207 页的ipv6-addr.arpa.zone文件,其PTR记录直接写了 `0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0......

本文还有配套的精品资源,点击获取

返回列表