IPv6地址分配有两种方式:一种是路由开启RA(Router Advertisement)服务,基于路由器RA信息,客户端用SLAAC自动生成IPv6地址,DNS可以获取自RA信息(RA DNS),也可以获取自DHCPv6服务(需要路由开启无状态DHCP);另外一种是路由器开启DHCPv6服务,客户端的IPv6地址和DNS都获取自DHCPv6。不过安卓系统不支持DHCPv6,Win7、Win8.1不支持RA DNS。
使用DHCPv6静态分配IPv6地址根据DUID分配的,不是根据MAC

先在配置文件内禁用ipv6 dhcp服务:
vi /etc/config/dhcp

config dhcp 'lan'
        option interface 'lan'
        option start '150'
        option limit '100'
        option leasetime '12h'
        option ra 'disabled'
        option dhcpv6 'disabled'

config odhcpd 'odhcpd'
        option maindhcp '0'
        option leasefile '/tmp/hosts/odhcpd'
        option leasetrigger '/usr/sbin/odhcpd-update'
        option loglevel '4'

关闭odhcpd:

/etc/init.d/odhcpd stop
/etc/init.d/odhcpd disable

修改dnsmasq配置文件开启ra服务:
vi /etc/dnsmasq.conf

enable-ra
dhcp-range=::,constructor:br-lan,ra-only
#其它slaac ra-stateless等参考man文档

只想通过ipv4查询dns,下面patch让dnsmasq无状态分配ip时候不包含RDNSS,这样客户端只配置ipv4 dns而不配置ipv6 dns。

diff -urN dnsmasq-2.86/src/radv.c dnsmasq-2.86-bak/src/radv.c
--- dnsmasq-2.86/src/radv.c     2021-09-09 04:21:22.000000000 +0800
+++ dnsmasq-2.86-bak/src/radv.c 2022-01-23 11:57:01.818963642 +0800
@@ -507,7 +507,7 @@
        }
     }

-  if (daemon->port == NAMESERVER_PORT && !done_dns && parm.link_pref_time != 0)
+  if ( 0 && daemon->port == NAMESERVER_PORT && !done_dns && parm.link_pref_time != 0)
     {
       /* default == us, as long as we are supplying DNS service. */
       put_opt6_char(ICMP6_OPT_RDNSS);

odhcpd新版本参数dns_service也可实现此需求。
再次开启ipv6 dns服务,如果有配置dhcp6 dns服务器,dnsmasq会将其设置为RDNSS:

dhcp-option=option6:dns-server,[xxxx:xxxx:xxxx:xxxx::1]
#DNS监听端口默认53
port=53
#不读取 resolv-file 来确定上游服务器
no-resolv
# 也不要检测 /etc/dnsmasq/resolv.conf 的变化
no-poll
#严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止。
strict-order
# 并发查询所有上游DNS服务器
#all-servers
# 指定上游DNS服务器配置文件路径
#resolv-file=/etc/dnsmasq/resolv.conf
#监听地址,10.139.133.25这个地址替换成ifconfig运行后eth0 里的inet 地址
listen-address=192.168.10.11,127.0.0.1
#自动导入这个目录下的配置文件
conf-dir=/etc/dnsmasq.d
#conf-dir=/etc/dnsmasq.d/*.conf
#开启dnsmasq的日志记录
log-queries
#如果不想保存日志可以改为 /dev/null
log-facility=/var/log/dnsmasq/dnsmasq.log
# 如果反向查找的是私有地址例如192.168.X.X,仅从 hosts 文件查找,不再转发到上游服务器
bogus-priv
enable-ra
dhcp-range=::,constructor:eth0,ra-only
#dhcp-option=tag:DEEBIN,option6:dns-server,[::1]
#resolv server 使用本机的dnscrypt-proxy
server=192.168.10.2#53
# 设定域名解析缓存池大小
cache-size=4096