从任何操作系统进行 Linux 计算机的主机名解析

从任何操作系统进行 Linux 计算机的主机名解析

这一切都在局域网上:

  • 我有一堆 Linux 机器(我称之为端点),它们从我无法控制的 DHCP 服务器接收它们的 IP。
  • 我无法控制我们的内部 DNS
  • 但是,我确实控制着一个具有静态 IP 和已知名称的 Ubuntu 服务器:ubuntu.domain.com

我希望能够通过它们的主机名或 hostname.ubuntu.domain.com 访问这些机器。

我要么需要将这些主机名通知我们的 DNS 服务器,要么找出哪些名称解析服务已经可用(ping Windows 或 Linux 主机名都会解析到错误的 opendns IP),要么配置像 dnsmasq 这样的服务,要么使用动态 DNS 网站(对于这个几乎封闭的网络来说并不理想)

使用 dnsmasq 似乎我需要设置每台机器从 ubuntu.domain.com 获取 IP。我不想这样做。我必须保持当前的 DHCP 情况。如果我们的 DHCP 请求通过我自己的机器,有人会生气。

是否可以将 DHCP 请求从 dnsmasq 转发到我的默认 DHCP 提供商?

每台机器都需要以某种方式通知 ubuntu.domain.com 其(主机名,IP)对。

我想避免修改任何东西,除了使用 ubuntu.domain.com 作为 DNS 源的命名端点,这就是 hostname.ubuntu.domain.com 方案看起来不错的原因。不过,我不知道这是否可行。

TLDR:如何轻松解析 Linux 主机名?

答案1

你可以选择像现在一样从 DHCP 获取 IP 地址,但要覆盖 DNS 服务器,使其指向 ubuntu.domain.com

然后在 ubuntu.domain.com 上安装 bind,并为 ubuntu.domain.com 设置一个区域,接受来自本地网络的注册。在 ubuntu.domain.com 上设置 bind,以便它将任何不具有权限的区域的 DNS 请求转发到当前 DNS 服务器。

要覆盖名称服务器,请编辑/etc/dhclient.conf并添加

supersede domain-name-servers <ubuntu server ip>;

要将 PC 的主机名注册到 DNS 服务器,还需添加:

supersede domain-name "ubuntu.domain.com";
send host-name "hostname.ubuntu.domain.com";

要允许在 ubuntu.domain.com 上进行区域注册,请将其添加到 中的选项部分/etc/bind/named.conf.options。还要添加非权威区域的转发器:

options {
    allow-update { <your network>/<your subnet mask> (eg 192.168.1.0/24); };
    forwarders { <current dns server>; <current dns server>; };
};

然后您需要在以下位置定义区域/etc/bind/named.conf.local

zone "ubuntu.domain.com" {
    type master;
    file "/etc/bind/pri/db.ubuntu.domain.com";
};

区域文件/etc/bind/pri/db.ubuntu.domain.com将如下所示

$ORIGIN .
$TTL 604800     ; 1 week
ubuntu.domain.com      IN SOA  ubuntu.domain.com. dns.ubuntu.domain.com. (
                            260        ; serial
                            604800     ; refresh (1 week)
                            86400      ; retry (1 day)
                            2419200    ; expire (4 weeks)
                            604800     ; minimum (1 week)
                            )
                    NS      ubuntu.domain.com.
                    A       <ip address of ubuntu.domain.com>
 }

注册主机的附加A记录将添加到此文件中。

因此顺序是

  1. dhclient 将从当前 DHCP 服务器请求 IP
  2. dhcp 服务器响应 IP、网关和 DNS
  3. dhclient 接受 IP 和网关,并使用 ubuntu.domain.com 覆盖 dns
  4. dhclient 使用 ubuntu.domain.com dns 注册其主机名
  5. DNS 查询转到 ubuntu.domain.com - 如果它们在 ubuntu.domain.com 区域内,它将在本地解析,否则转发到当前 DNS 服务器

答案2

如果您想从任何地址解析名称,最好的办法是将它们放入 DNS。DHCP 服务器通常会注册您的主机在请求 IP 地址时使用的名称。在大多数情况下,这应该是一个非限定主机名。这通常在 DHCP 客户端配置中被禁用。然后它应该出现在可以使用 DHCP 提供的搜索列表解析的位置。

DNSMasq 可以配置为使用 DHCP 提供的 DNS 服务器。我相信 Ubuntu 上的默认配置会自动处理配置。

您使用的名称应该适合您所在组织的 DNS 层次结构。

对于需要远程访问的服务器,首选解决方案是使用静态 IP 地址。这需要与网络和 DNS 管理员协调。

编辑:如果您在没有管理员支持的情况下工作,您可以在一台服务器上构建 /etc/hosts 文件,并使用 dnsmasq 作为所有需要协调的服务器的主 DNS 服务器。/etc/hosts 文件应该可以正常工作,因为您的 DHCP 可能会为您提供有效的静态地址。

如果您的 IP 地址是动态的,您可能需要为主机设置一种机制来注册 IP 地址更改。DHCP 客户端有用于此目的的钩子。诀窍在于发现 IP 地址更改时在哪里注册。通知客户端(其他服务器)可能是最简单的解决方案。执行此操作的进程可以是无特权的(非 root)。如果是这样,那么应该使用备用主机文件配置 dnsmasq。

另一种方法是使用 avahi 来允许服务器发现彼此。它可以为本地以外的域进行配置。

相关内容