最近我被分配了一项任务,任务是优化安装在 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::1
和198.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
$