V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
phpfpm
V2EX  ›  宽带症候群

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

  •  
  •   phpfpm · 2022-03-26 19:59:17 +08:00 · 6335 次点击
    这是一个创建于 1001 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网络拓扑 /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 服务的)

    12 条回复    2022-03-27 13:51:38 +08:00
    jacyl4
        1
    jacyl4  
       2022-03-26 20:06:10 +08:00
    建一个 dns 服务器,提供双栈优选或者 ipv4 解析优先功能。
    Kiriya
        2
    Kiriya  
       2022-03-26 20:07:49 +08:00
    装个 adguardhome (在操作系统或软路由) 然后设置只解析 IPV4
    JensenQian
        3
    JensenQian  
       2022-03-26 20:08:28 +08:00
    windows 下 netsh 可以改 v4 优先的,不过我电脑一般都是把 v6 关了的
    JensenQian
        4
    JensenQian  
       2022-03-26 20:18:17 +08:00
    @JensenQian #3 不好意思,看错了,我以为是设备上访问网站 v4 优先,dns 的话路由器上 smartdns 里面有个双栈 ip 优选功能,可能适合楼主
    phpfpm
        5
    phpfpm  
    OP
       2022-03-26 20:24:18 +08:00
    @Kiriya emm 但是对于 v6 还是有需求的
    phpfpm
        6
    phpfpm  
    OP
       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
        7
    yaott2020  
       2022-03-26 21:00:23 +08:00 via Android
    mosdns 可以优先 v4
    Hconk
        8
    Hconk  
       2022-03-26 21:01:32 +08:00 via iPhone
    我在 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
        9
    jim9606  
       2022-03-26 21:23:54 +08:00   ❤️ 1
    我建议的做法是,主路由(也就是发送 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
        10
    phpfpm  
    OP
       2022-03-27 10:22:41 +08:00
    @jim9606 感谢详细解答,我一点点理解一下

    1 RA 是指?分配 ip(v4/v6)的 DHCP 服务吗?
    2 dhcp v6 也可以支持 AAA 记录,这个我理解了
    phpfpm
        11
    phpfpm  
    OP
       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
        12
    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 记录实现的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2487 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 05:25 · PVG 13:25 · LAX 21:25 · JFK 00:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.