按服务器位置对 DNS 记录进行优先排序

按服务器位置对 DNS 记录进行优先排序

最近我被分配了一项任务,任务是优化安装在 RHEL 7.9 上的 Redhat SSO 服务的登录时间。此服务使用多个 Active Directory 来验证用户的凭据。所有这些 AD 都分布在欧洲各地。我想设置一些我已经知道的靠近我的服务器的 AD,以便首先进行查询,但我还希望能够查询其他 AD,以防那些更近的 AD 发生故障。你能帮我解决吗?最明显的方法是将首选的 AD 添加到 /etc/hosts 文件中,但这将导致无法访问其他 AD...

非常感谢!

答案1

我不知道按位置, 但按地址应该可以使用gai.conf,假设您正在查看的应用程序正在使用进行正常查找getaddrinfo,并且可以接受这种优先级影响在同一台机器上运行的应用程序的所有查找。

例如,如果我们在 DNS 中有这些记录:

test.example.com.             3600    IN      AAAA    2001:db8:1::1
test.example.com.             3600    IN      AAAA    2001:db8:ffff::1
test.example.com.             3600    IN      A       192.0.2.1
test.example.com.             3600    IN      A       198.51.100.1

getaddrinfo使用测试行为getent ahosts,使用默认配置你会得到类似这样的结果:

$ getent ahosts test.example.com
2001:db8:1::1   STREAM test.example.com
2001:db8:1::1   DGRAM
2001:db8:1::1   RAW
2001:db8:ffff::1 STREAM
2001:db8:ffff::1 DGRAM
2001:db8:ffff::1 RAW
192.0.2.1       STREAM
192.0.2.1       DGRAM
192.0.2.1       RAW
198.51.100.1    STREAM
198.51.100.1    DGRAM
198.51.100.1    RAW
$

(如果多次运行该命令,记录会分别在 v6 和 v4 替代方案之间随机跳转。)

如果我们说您最喜欢的地址是2001:db8:ffff::1198.51.100.1(基于更接近、更可靠或其他什么),您可以输入如下内容gai.conf

precedence ::ffff:198.51.100.1/128  99
precedence 2001:db8:ffff::1/128 100

并且不删除默认行为还包括:

precedence  ::1/128       50
precedence  ::/0          40
precedence  2002::/16     30
precedence ::/96          20
precedence ::ffff:0:0/96  10

然后你会得到:

$ getent ahosts test.example.com
2001:db8:ffff::1 STREAM test.example.com
2001:db8:ffff::1 DGRAM
2001:db8:ffff::1 RAW
198.51.100.1    STREAM
198.51.100.1    DGRAM
198.51.100.1    RAW
2001:db8:1::1   STREAM
2001:db8:1::1   DGRAM
2001:db8:1::1   RAW
192.0.2.1       STREAM
192.0.2.1       DGRAM
192.0.2.1       RAW
$

相关内容