如何让ntpd遵循DNS服务器的IPv6地址排序规则?
你好,针对你遇到的ntpd在IPv6场景下不遵循DNS sortlist排序的问题,结合你提供的环境和ntpd版本(ntpd 4.2.8p15@1.3728-o Wed Sep 23 11:46:38 UTC 2020 (1)),我给你几个实用的排查和解决方向:
先确认DNS返回的IPv6地址顺序是否符合预期
先在B子网的主机上手动执行dig AAAA <C的域名>(替换成你实际的服务器域名),看看DNS返回的IPv6地址是不是主网地址排在最前面。如果顺序不对,那得先检查bind9的sortlist配置在IPv6下是否生效——bind9的IPv6 sortlist配置逻辑和IPv4略有差异,要确保你的规则正确匹配了IPv6子网段,比如是否用了正确的前缀长度来区分主网和路由子网。强制ntpd优先使用指定的主网IPv6地址
ntpd本身可能有自己的地址选择逻辑,不一定完全依赖DNS返回的顺序。你可以直接在/etc/ntp.conf的服务器配置行里,明确指定服务器的主网IPv6地址,并加上prefer选项,比如:server [2001:db8::c] prefer这样就能强制ntpd优先使用这个主网地址,而不是去解析域名后选择路由地址。
调整系统的IPv6地址选择策略
ntpd在选择地址时,可能会遵循系统的getaddrinfo规则,而这个规则由/etc/gai.conf(Linux系统)控制。你可以在这个文件里添加优先级规则,让主网的IPv6前缀优先级高于路由子网的前缀。
举个例子,如果你的主网IPv6前缀是2001:db8::/32,B和C的路由子网前缀分别是2001:db8:1::/64和2001:db8:2::/64,可以在gai.conf里添加:prefix 2001:db8::/32 50 prefix 2001:db8:1::/64 40 prefix 2001:db8:2::/64 40数值越大优先级越高,这样系统会把主网地址排在DNS解析结果的前面,ntpd自然会优先选择它。
考虑升级ntpd版本
你使用的4.2.8p15是2020年的老版本,虽然支持IPv6,但可能在地址选择逻辑上存在一些已知问题。如果上面的方法都没能解决问题,可以尝试升级到更新的ntpd版本(比如4.2.8p18及以上),新版本通常会修复一些IPv6相关的兼容性和逻辑问题。
备注:内容来源于stack exchange,提问作者David G.

