【Server Geek】一些关于 IPV6 的杂事备忘
下午在家里上网的时候突然发现,访问带域名访问局域网内的服务,有时候通,有时候不通,因为自己部署了 ADGuard Home,并且将自己的域名进行了 DNS 重写,都指向了局域网内,按理说不应该不通,排查了一下,发现跟我电脑 v6 的 DNS 有关,本文记录排查过程以及对涉及到的命令做一下备忘。
访问自己的域名不通,第一时间想到是看看有没有走到局域网 ip 。是 Windows 系统。
ping xxx.xxx.com
发现是公网 v4 的 ip,排查了自己的 dns 设置,没有看出“异常”。然后想看看是什么东西给我返回的公网的 v4 ip。
nslookup xxx.xxx.com
发现返回的是 ipv6 地址。服务器: Unknown。这时候觉得是 v6/v4 双栈网络请求的优先级问题。开始排查优先级。
netsh interface ipv6 show prefixpolicies
看 ::ffff:0:0/96
优先级为 50,比其它的高,按理说是优先 ipv4 的。不清楚这个优先级的作用原理,先改成 100 试试。
netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 100 0
将优先级改为 100。重启了一下电脑,还是没有走到局域网 ip。
写到这突然想起来中间还查了电脑的 dns 缓存,但是没有看到什么有用的东西。
ipconfig /displaydns # 查看本机 DNS 缓存
ipconfig /flushdns # 刷新本机 DNS 缓存
迷惑不解,实在没办法了,准备抓包。开了 Wireshark,在过滤器里输入 dns
, 只看 dns 相关记录,有收获。发现请求的时候,会发两条 v6 的 dns 请求,一个请求的是 AAAA 记录,一个请求的是 A 记录,是这两个请求返回了我请求域名的公网 ip 信息。
然后发现我只给电脑配置了 v4 的网关和 DNS 服务器指向了我的旁路由 OpenWRT(科学上网和 ADGuard Home 服务),但是 v6 用的是默认的,也就是主路由的 DNS 服务器,所以返回了公网的 ip。
最后把我的 NetSetMan 的配置中,加上了 ipv6 的网关和 DNS 服务器配置,发现正常了。
在这个过程中还顺便发现了,我的 ADGuard Home 部署的时候,没有监听 v6 地址,顺手在 OpenWRT 中将 v6 地址的监听加上了。