![DHCP 服务器能否通过 DHCP 为自己分配 IP 地址](https://linux22.com/image/558206/DHCP%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%83%BD%E5%90%A6%E9%80%9A%E8%BF%87%20DHCP%20%E4%B8%BA%E8%87%AA%E5%B7%B1%E5%88%86%E9%85%8D%20IP%20%E5%9C%B0%E5%9D%80.png)
这似乎是一个愚蠢的问题(我担心它可能如此),但是,作为网络唯一 DHCP 服务器的服务器是否可以向网络发送 IP 地址请求,然后捕获自己的请求并回答它?
我的所有直觉都指向一个否定答案,理想情况下我会测试一下,但我目前没有时间/多余的资源,所以我希望其他人可能有同样的想法并尝试一下。
这是一个一般性问题,但如果有人感兴趣的话,我在 ubuntu 11.04 上运行 isc-dhcp
答案1
从技术上来说,规格允许这种情况发生,但尝试这样做是极其愚蠢的。
答案2
从两个方面来说这都是一个坏主意,但是它确实是可能的。
- 如果同一台计算机上的 DHCP 服务器尚未启动,则服务器无法在启动期间分配 IP。因此,在尝试分配 IP 之前,您必须确保 DHCP 服务器已启动。
- 如果 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 routers
、option domain-name-servers
、option 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 地址。