为什么 dhclient 不使用我告诉它请求的静态 IP?

为什么 dhclient 不使用我告诉它请求的静态 IP?

这是我的 /etc/dhcp3/dhclient.conf:

request subnet-mask, broadcast-address, time-offset, routers,
        domain-name, domain-name-servers, domain-search, host-name,
        netbios-name-servers, netbios-scope, interface-mtu;
timeout 60;
alias {
  interface "eth0";
  fixed-address 192.168.1.222;
}
lease {
  interface "eth0";
  fixed-address 192.168.1.222;
  option subnet-mask 255.255.255.0;
  option broadcast-address 255.255.255.255;
  option routers 192.168.1.254;
  option domain-name-servers 192.168.1.254;
}

当我运行“dhclient eth0”时,我得到了这个:

There is already a pid file /var/run/dhclient.pid with pid 6511
killed old client process, removed PID file
Internet Systems Consortium DHCP Client V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/

wmaster0: unknown hardware address type 801
wmaster0: unknown hardware address type 801
Listening on LPF/eth0/00:1c:25:97:82:20
Sending on   LPF/eth0/00:1c:25:97:82:20
Sending on   Socket/fallback
DHCPREQUEST of 192.168.1.27 on eth0 to 255.255.255.255 port 67
DHCPACK of 192.168.1.27 from 192.168.1.254
bound to 192.168.1.27 -- renewal in 1468 seconds.

我使用 strace 来确保 dhclient 确实在读取该配置文件。为什么它不注意我的“固定地址 192.168.1.222”行?为什么它反而对 192.168.1.27 执行 DHCPREQUEST?

答案1

正如 Zoredache 正确指出的那样:固定地址设置仅适用于 DHCP 服务器未响应时才有效的租约定义。请参阅http://linux.die.net/man/5/dhclient.conf“租赁声明”部分下。

你想要的是

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

这在 dhcp-options 的手册页中有记录:http://linux.die.net/man/5/dhcp-options并符合 DHCP 选项 RFC,网址为http://www.rfc-editor.org/rfc/rfc2132.txt

但请注意:我最近遇到 dhclient3 无法使用此配置获取 IP,因为请求的地址已被占用。服务器使用 DHCPNAK 回复请求,客户端会在一段时间后放弃。我曾预计,如果请求的地址不可用,DHCP 客户端最终会获得另一个地址。

我使用这种方法是为了确保我始终知道我的服务器的地址,而无需借助于 dyndns.com 之类的东西,但最终却没有任何连接。

答案2

拒绝用于拒绝具有特定地址的服务器的提议。它不用于拒绝服务器提供的地址。

拒绝语句使 DHCP 客户端拒绝来自服务器标识符与任何指定主机或子网匹配的服务器的请求。这可用于避免被恶意或配置错误的 DHCP 服务器配置,

仅当 DHCP 服务器不响应时才使用定义的租约。

租赁 { 租赁声明 [ ... 租赁声明 ] }

DHCP 客户端可能会在一段时间后(参见协议时间)决定无法成功联系服务器。

如果您想要一个特定的地址,您可能应该在服务器上设置预留。

答案3

您是否实际检查过它是否可以通过您指定的 IP 访问(我知道,那是在 2010 年……)?

我刚才犯了那个错误。

即使您有

alias{
  fixed-address

这是因为那是一个alias,作为该接口的附加 IP 地址;该接口仍然会获得 DHCP 分配的 IP。

至于lease其他的都是正确的,基本上它会被忽略,除非 dhcp 失败。

相关内容