DHCP 服务器能否通过 DHCP 为自己分配 IP 地址

DHCP 服务器能否通过 DHCP 为自己分配 IP 地址

这似乎是一个愚蠢的问题(我担心它可能如此),但是,作为网络唯一 DHCP 服务器的服务器是否可以向网络发送 IP 地址请求,然后捕获自己的请求并回答它?

我的所有直觉都指向一个否定答案,理想情况下我会测试一下,但我目前没有时间/多余的资源,所以我希望其他人可能有同样的想法并尝试一下。

这是一个一般性问题,但如果有人感兴趣的话,我在 ubuntu 11.04 上运行 isc-dhcp

答案1

从技术上来说,规格允许这种情况发生,但尝试这样做是极其愚蠢的。

答案2

从两个方面来说这都是一个坏主意,但是它确实是可能的。

  1. 如果同一台计算机上的 DHCP 服务器尚未启动,则服务器无法在启动期间分配 IP。因此,在尝试分配 IP 之前,您必须确保 DHCP 服务器已启动。
  2. 如果 DHCP 还更新动态分配主机的 DNS,那么当 DNS 发生故障时(无论出于何种原因),很难知道 DHCP 服务器在哪里

答案3

理论上,我认为这应该是可能的,因为大多数 Linux 发行版都带有一个 apipa(169.254.0.1 到 169.254.255.254)地址(如果未配置或提供)。因此,dhcp 服务器应该能够运行并可能响应请求。现在,如果您为服务器自己的 mac 地址配置一个保留(固定)ip 地址,并且如果 dhcp 客户端守护程序保持运行并不断尝试,理论上它应该能够由 dhcp 服务器守护程序响应。然后它应该能够设置自己的正确 ip 地址,并继续响应来自其他机器的 dhcp 请求。

我不确定 dhcp 服务器是否可以有 apipa 地址,我认为在 ip 更改后需要重新启动服务器守护进程,但除此之外……我仍然想不出任何合理的用例。

答案4

也许你正在寻找一个单一事实来源部署策略,通过使用 dhcpd.conf 的单一副本来保存所有网络信息,例如option routersoption domain-name-serversoption domain-name。你可以尝试以下步骤(Debian):

为网络接口定义静态 IP 地址

这是必需的,否则 dhcp 服务器将无法启动。

$ cat /etc/network/interfaces
auto eth0
allow-hotplug eth0
iface eth0 inet static
  address 192.168.1.1/24

可选:在 DHCP 客户端配置中定义固定 IP 地址

除非您想要 DHCP 主机的 IP 地址,否则此步骤是可选的。

$ cat /etc/dhcp/dhclient.conf
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers,
        domain-name, domain-name-servers, domain-search, host-name,
        dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
        netbios-name-servers, netbios-scope, interface-mtu,
        rfc3442-classless-static-routes, ntp-servers;

interface "eth0" {
  send dhcp-requested-address 192.168.1.1;
}

为网络定义 DHCP 池范围

$ cat /etc/dhcp/dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 {
  option domain-name "example.lan";
  option subnet-mask 255.255.255.0;
  option routers 192.168.1.254;
  option domain-name-servers 192.168.1.253;

  pool {
    range 192.168.1.10 192.168.1.200;
  }
}

重启机器并检查是否有静态 IP 地址和 DHCP 服务器正在运行。现在执行以下命令从 DHCP 服务器获取 IP 地址:

# Flush the IP address of interface eth0
$ ip a flush dev eth0

# Remove dhclient lease
$ rm /var/lib/dhcp/dhclient.*

# Start dhclient for interface eth0
dhclient -v eth0

eth0应为具有 DHCP 请求选项的接口分配新的 IP 地址。

相关内容