我试图想出一种干净的方法来根据网络设置确定机器的位置(主要是它们所属的数据中心).
我希望它是动态的,我正在考虑使用特定于每个数据中心的DNS服务器的特殊DNS记录.
例如,您可以:
root@machine1# dig TXT mysite ... mysite 3600 IN TXT "DC1" ... root@machine2# dig TXT mysite ... mysite 3600 IN TXT "DC2" ...
等等
我知道DNS有一个特殊的LOC位置记录,但它需要坐标,所以它对我的情况没有帮助.是否有解决此问题的标准方法,另一种特殊类型的记录,或TXT记录中的一些标准条目?
解决方法
(首先,请原谅我不同意你的问题.)恕我直言,显然这种主机配置信息的正确位置是DHCP. DHCP旨在为客户端提供使用子网上可用的各种服务所需的所有信息.
您可以使用一些标准的DHCP选项,我发现域名最接近您的目的.你可以在你的DHCP服务器上使用这样的东西:
option domain-name DC1; option domain-name dc1.example.org;
或者(甚至可能更好),DHCP允许site-specific options,你可以定义一个名为的DHCP选项,比如text类型的选项site-name(它也需要一些数字选项代码),如下所示:
option site-name code 222 = text; option site-name "DC1";
在DHCP客户端上,您可以定义此选项代码,请求选项并在实际使用它的地方烘焙一些/ etc / dhcp / dhclient-enter-hooks脚本.
编辑:在最近的发行版中,dhclient-enter-hooks不再调用,而是将您的脚本放到/etc/NetwokManager/dispatcher.d/文件夹中,如下所示:
#!/bin/sh # save me as /etc/NetwokManager/dispatcher.d/02test printenv >>/tmp/dhcp-env
一旦DHCP获得租约,您将看到所有DHCP变量都转储到/ tmp / dhcp-env中.
也许您最好在一个单独的DHCP选项中定义所有打印机名称,apt服务器等,而不是仅仅标识数据中心,而是将所有相关配置存储在客户端中.
如果您仍然选择使用DNS,我发现您的TXT是一个不错的选择,不知道为此目的定义的任何标准,除了可能为此:named.conf中的server-id选项:服务器在接收时应报告的ID …. 一个
使用类型TXT,类CHAOS查询名称ID.SERVER.
即在你定义的named.conf中
server-id DC1; //or DC2 etc.
Sorta旨在识别我正在与哪个DNS服务器通信,这与您需要的接近.