我正在尝试想出一种干净的方法,根据机器的网络设置来确定机器的位置(主要是它们属于哪个数据中心)。
我希望它是动态的,并且我正在考虑使用特定于每个数据中心的 DNS 服务器的特殊 DNS 记录。
例如,您可以:
root@machine1# dig TXT mysite
...
mysite 3600 IN TXT "DC1"
...
root@machine2# dig TXT mysite
...
mysite 3600 IN TXT "DC2"
...
ETC。
我知道 DNS 有一个特殊的LOC
位置记录,但它需要坐标,所以对我的情况没有帮助。有没有解决这个问题的标准方法,另一种特殊的记录类型,或者TXT
记录中的一些标准条目?
答案1
(首先,请原谅我不同意你的问题。)恕我直言,显然这种主机配置信息的正确位置是 DHCP。DHCP故意的向客户提供使用子网上各种服务所需的所有信息。
您可以使用一些标准的 DHCP 选项,我发现domain-name
这些选项最符合您的目的。您可以在 DHCP 上使用类似这样的选项服务器:
option domain-name DC1;
option domain-name dc1.example.org;
或者(可能更好),DHCP 允许特定于站点的选项,您可以定义一个名为 DHCP 选项,比如说site-name
类型的选项text
(它还需要一些数字选项代码),如下所示:
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 是一个很好的选择,不知道为此目的定义的任何标准,也许除了这个:server-id
选项named.conf
:服务器在接收时应该报告的 ID.... 名称为 ID.SERVER 的查询,类型为 TXT,类为 CHAOS。
即在你的named.conf中定义
server-id DC1; //or DC2 etc.
有点想识别我正在与哪个 DNS 服务器通信,这有点接近您的需要。
答案2
如果您想将其放入自由文本,DNS 是一个非常奇怪的位置。
从您的描述中我得出,不同数据中心的自动设置程序有所不同(因为它们使用不同的主 DNS 服务器)。
我正在做的事情 - 这是我给您的建议 - 独立于操作系统:在自动安装期间设置 SNMP-SysLocation 并激活 SNMPD。如果您有多宿主服务器(即许多不同的网络连接),您可能还会有一个单独的管理网络。使用 snmpd.conf 中的“AgentAddress”指令设置 snmpd 以在该网络中进行监听。
答案3
如果您想要更简单的东西,只需文本,如“US/IL/Chicago/1060 W Addison St/floor 1/rack 2”,使用 TXT 记录。这就是它们的用途。如有必要,使用动态 DNS 编写脚本。TXT 可以是附加到主机名的正向 DNS,也可以是附加到 IP 地址甚至整个子网的反向 DNS(这对您的情况来说可能是最有意义的)。
答案4
我个人不建议使用 DNS,因为它是一种集中管理服务,这意味着如果服务器移动位置,您必须更新 DNS 服务器上的位置信息,而不能简单地在移动的系统上控制它。
如果您管理的所有系统都可以运行 SNMP,并且您知道 SNMP 配置允许您存储系统位置(我相信它们应该允许,正如 Nils 提到的),那么您可以运行 SNMP 并让系统在那里存储位置条目。这样会稍微好一点,因为您可以在服务器本身上控制服务器位置 - 如果服务器移动,您可以轻松更改位置,如果服务器关闭,您将不会获得过时的信息。但是,如果 SNMP 关闭,您将不知道服务器在哪里,因为您将无法查询 SNMP。
我相信,正确管理此类信息的最佳选择是使用 DC 资产管理系统 - 至于使用哪一个,这取决于您(有很多可供选择)。