故事是这样的, 这篇文章提到, 我的家庭宽带分到了一个SLAAC的slash-64地址作为链路地址, 以及一个DHCPv6 PD的slash-60作为终端的地址。为了安全, 主要是防止我内网的某些服务意外地暴露给公网, 我在主路由器上配置了几条ACL, 过滤了公网发往内网方向的TCP和UDP的端口小于1024的所有数据包。(事实上, 测试表明学校的ACL似乎也是这么配的, 还额外屏蔽了3389等大于1024的危险服务端口。) 用公网服务器进行nmap扫描并确定数据包被过滤后, 看似毫无问题, 我就安安心心回学校搞毕设了。
然而, 到周末回家, 我发现DHCPv6 PD又没有了, 只剩一个SLAAC的slash-64的链路地址, 我猜想是北京联通在进行IPv6网络的调整, 就没有仔细研究, 只是每周都测一下DHCPv6 PD有没有恢复。(事后反思, 一个富有经验的网络维护者到此应该已经知道哪里不对了。聪明的你, 看出来了吗?)
今天, 我突然尝试使用光猫拨号(之前已改为桥接), 发现DHCPv6 PD明明好好的。经过一些尝试后, 我把光猫改回了桥接, 并决定在光猫和路由器之间串联一个端口镜像器, 分析线上的报文。分析发现, 路由器能够发出DHCPv6 Solicit报文, DHCP服务器能够返回Advertise报文, 然后就没有下文了。进一步观察发现, 路由器以一定周期发送Solicit报文, 每次DHCP服务器都有响应, 且响应报文里已经成功分配了DHCPv6地址前缀。这大概率说明路由器没有接收到Advertise报文, 或是接收到该报文但丢弃了。至此我才想明白是怎么回事, 我修改了ACL, 放通了DHCPv6数据包(UDP端口546、547), DHCPv6 PD恢复正常。
这个故事告诉我们, 我太菜了, 离富有经验的网络维护者还有很大一段距离。
特此记录。
发表评论