开启 ipv6 之后,仍然想优先用 ipv4 的 dns 怎么办?

2022-03-26 19:59:17 +08:00
 phpfpm

网络拓扑 /ipv6 开启方式:

  1. TL-R483G ,选择复用 ipv4 拨号,开启前缀授权;
  2. LAN 侧,用 SLAAC 的 DHCP 方式分发 DHCPIP
  3. 客户端:macos 15 ,在 test-ipv6 网站上 10 分满分通过
  4. ipv4 的 lan 侧,设置旁路网关( DNS 和 gateway 都是 192.168.0.2 )
  5. 在旁路网关上有一些自定义解析(类似 test.com)

遇到的问题

在成功获取 ipv6 ip 的机器上执行 dig

$ dig test.com
;; SERVER: 2409:8a00:
...
(反正是没结果)

$dig -4 test.com
;; SERVER: 192.168.0.2#53(192.168.0.2)
结果正常

想问的问题

  1. ipv4 和 ipv6dns 选路的问题,我该在哪层处理?

A 操作系统:修改配置

B 网关层:好像也干不了啥

C 路由器层(提供 DHCP 服务的)

5555 次点击
所在节点    宽带症候群
12 条回复
jacyl4
2022-03-26 20:06:10 +08:00
建一个 dns 服务器,提供双栈优选或者 ipv4 解析优先功能。
Kiriya
2022-03-26 20:07:49 +08:00
装个 adguardhome (在操作系统或软路由) 然后设置只解析 IPV4
JensenQian
2022-03-26 20:08:28 +08:00
windows 下 netsh 可以改 v4 优先的,不过我电脑一般都是把 v6 关了的
JensenQian
2022-03-26 20:18:17 +08:00
@JensenQian #3 不好意思,看错了,我以为是设备上访问网站 v4 优先,dns 的话路由器上 smartdns 里面有个双栈 ip 优选功能,可能适合楼主
phpfpm
2022-03-26 20:24:18 +08:00
@Kiriya emm 但是对于 v6 还是有需求的
phpfpm
2022-03-26 20:44:21 +08:00
@JensenQian 但是有个问题诶

我的 ipv6 的 dns 是 0.1 分配的,v4 的 dns 也是 0.1 分配的( dns0.2 ,网关 0.2 )
那么 0.1 在做 ipv6 slaac 的时候应该分配的 ipv6 的 dns (我这边看是 2409 开头的公网地址)

就是说我建好 dns 之后,至少应该 listen 一个 v6 的端口,地址是一个静态地址还是内网可达的一台机器?
yaott2020
2022-03-26 21:00:23 +08:00
mosdns 可以优先 v4
Hconk
2022-03-26 21:01:32 +08:00
我在 windows 上是通过改注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\ ,加一个 DWORD 类型的 DisabledComponents ,值为十进制 32 。优先使用 ipv4 。
Linux 有也可以配置 https://xmsg.org/wordpress/2020/03/在 linux 中设置优先使用 ipv4 而不是 ipv6 转 / 。
macOS 没找到,应该可以在路由加个 smartdns 服务,配置双栈优选功能来实现。
jim9606
2022-03-26 21:23:54 +08:00
我建议的做法是,主路由(也就是发送 RA 的路由)配置禁用 DHCPv6 (有状态和无状态都禁用),配置发送的 RA 不包含 RDNNS option ( RA option 25 ,RFC5006 ),或者将这个选项覆写为旁路由地址。Openwrt 支持这些配置。

Android 据说仅支持 RA option 25 ,macos 和 win 仅支持 DHCPv6 DNS option ,所以理论上只要禁用 DHCPv6 就够了。

需要注意,DNS 服务器是 v4 还是 v6 并不影响 DNS 响应本身是否包含 AAAA 记录( IPv6 记录)
phpfpm
2022-03-27 10:22:41 +08:00
@jim9606 感谢详细解答,我一点点理解一下

1 RA 是指?分配 ip(v4/v6)的 DHCP 服务吗?
2 dhcp v6 也可以支持 AAA 记录,这个我理解了
phpfpm
2022-03-27 11:53:41 +08:00
@jim9606

单开一个楼说下我的进展。

1. 主路由( pppoe 拨号)保持自动获取 ipv6 地址+运营商的 dns

2. 主路由的 lan 侧:

启用 ipv6 ,采取 EUI-64 的分配方式,ip 地址前缀取从 wan1 口获取的地址前缀(自动配置的)


3. SLAAC 设置

DNS 配置方式选择 DHCPv6 (还有 RDNSS 备选,我没用)

首选 DNS 服务器选择旁路由的 v6 的地址


4 旁路由( N1 ,openwrt )

接口新建一个 lanv6 ,选择 dhcp 客户端,防火墙区域选择 lan

这样就得到了步骤 3 需要的内网的 dns 地址了

5 设备效果

macos 重启设备之后会,dig/dig -6 都返回 N1 的 v6 地址做的 dns 解析的 A v4 地址

网络管理看到了有两个 dns ,分别是 0.2 和 0.2 的 LANv6 端口的地址

windows 重启之后 nslookup 的 server 会命中 N1 的 v6 地址


test-ipv6 10 分满分通过


6 总结

slaac 也可以通告一个 v6 的 dns ,只需要让旁路由获取 v6 的地址即可
jim9606
2022-03-27 13:51:38 +08:00
@phpfpm
1. RA=Router Advertisement (路由通告),这是所有 IPv6 设备必须支持的功能,不管何种地址分配方式均需要 RA ,用来通告可用前缀和网关链路地址,Android 还会通过 RA 获取 DNS 服务器,好像 macos 和 windows 都不会通过 RA 获取 DNS 服务器。
2. DNS 响应是否包含 A 记录 /AAAA 记录与 DNS 服务器 IP 是 IPv4 还是 IPv6 无关,也就是说,DNS 服务器地址是从何种方式获得跟 DNS 响应没有任何关系。

实际上我非常怀疑所谓 DNS 双选的意义,因为它是通过不返回 A 记录或者不返回 AAAA 记录实现的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/843085

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX