系统管理指南:IP 服务

第 17 章 对 DHCP 问题进行疑难解答(参考)

本章提供的信息可帮助您解决在配置 DHCP 服务器或客户机时可能遇到的问题,还可帮助您解决配置完成后使用 DHCP 时可能遇到的问题。

本章包含以下信息:

有关配置 DHCP 服务器的信息,请参见第 14 章。有关配置 DHCP 客户机的信息,请参见启用和禁用 Oracle Solaris : DHCP 客户机

对 DHCP 服务器问题进行疑难解答

在配置服务器时,您可能会遇到以下几类问题:

NIS+ 问题和 DHCP 数据存储

如果使用 NIS+ 作为 DHCP 数据存储,则可能遇到以下几类问题:

无法选择 NIS+ 作为 DHCP 数据存储

如果您尝试使用 NIS+ 作为数据存储,则 DHCP 管理程序可能不会提供 NIS+ 作为数据存储的选择。如果使用 dhcpconfig 命令,则可能会看到一条消息,指出 NIS+ 似乎未安装,它当前未运行。这两种症状表示尽管网络可能正在使用 NIS+,但尚未针对此服务器配置 NIS+。必须先将服务器系统配置为 NIS+ 客户机,然后才能选择 NIS+ 作为数据存储。

在将 DHCP 服务器系统设置为 NIS+ 客户机之前,以下语句必须成立:

有关配置 NIS+ 客户机的详细信息,请参见《System Administration Guide: Naming and Directory Services (NIS+)》中的“Setting Up NIS+ Client Machines”

未完全配置用于 DHCP 数据存储的 NIS+

将 NIS+ 成功用于 DHCP 之后,如果对 NIS+ 进行更改,则可能会遇到错误。这些更改可能会引起配置问题。请使用以下问题说明和解决方法来帮助确定配置问题的原因。

问题:

NIS+ 域中不存在根对象。

解决方法:

键入以下命令:

/usr/lib/nis/nisstat

此命令会显示域的统计信息。如果不存在根对象,则不会返回任何统计信息。

使用《System Administration Guide: Naming and Directory Services (NIS+)》设置 NIS+ 域。

问题:

NIS+ 无法用于 passwdpublickey 信息。

解决方法:

键入以下命令来查看名称服务转换器的配置文件:

cat /etc/nsswitch.conf

passwdpublickey 项中检查 "nisplus" 关键字。有关配置名称服务转换器的信息,请参阅《System Administration Guide: Naming and Directory Services (NIS+)》

问题:

域名为空。

解决方法:

键入以下命令:

domainname

如果此命令列出一个空字符串,则表明域尚未设置域名。请使用本地文件进行数据存储或者为网络设置 NIS+ 域。请参阅《System Administration Guide: Naming and Directory Services (NIS+)》

问题:

NIS_COLD_START 文件不存在。

解决方法:

在服务器系统上键入以下命令来确定此文件是否存在:

cat /var/nis/NIS_COLD_START

使用本地文件进行数据存储或者创建 NIS+ 客户机。请参阅《System Administration Guide: Naming and Directory Services (NIS+)》

有关 DHCP 数据存储的 NIS+ 访问问题

NIS+ 访问问题可能会导致有关 DES 凭证不正确或者更新 NIS+ 对象或表的权限不足的错误消息。请使用以下问题说明和解决方案来确定所遇到的 NIS+ 访问错误的原因。

问题:

DHCP 服务器系统没有创建对 NIS+ 域中 org_dir 对象的访问权限。

解决方法:

键入以下命令:


nisls -ld org_dir

访问权限以 r---rmcdrmcdr--- 形式列出,其中权限分别应用于无人 (nobody)、属主 (owner)、组 (group) 和全局 (world)。对象的属主将在随后列出。

通常,org_dir 目录对象为属主和组提供了完全权限。完全权限包括读取、修改、创建和销毁。org_dir 目录对象仅会为全局和无人这两个类提供读取访问权限。

DHCP 服务器名必须作为 org_dir 对象的属主列出,或者作为组的主体列出。组必须具有创建访问权限。请使用以下命令列出组:


nisls -ldg org_dir

如有必要,可使用 nischmod 命令更改 org_dir 的权限。例如,要向组添加创建权限,可键入以下命令:


nischmod g+c org_dir

有关更多信息,请参见 nischmod(1) 手册页。

问题:

DHCP 服务器没有在 org_dir 对象下创建表的权限。

通常,此问题表示服务器系统的主体名不是 org_dir 对象的所属组的成员,或者不存在所属组。

解决方法:

键入以下命令查找所属组的名称:


niscat -o org_dir

查找显示如下内容的行:

Group : "admin.example.com."

使用以下命令列出组中的主体名:


nisgrpadm -l groupname

例如,以下命令可列出组 admin.example.com 的主体名:

nisgrpadm -l admin.example.com

服务器系统名应作为组的显式成员列出,或者作为隐式成员包括在组中。如有必要,可使用 nisgrpadm 命令将服务器系统的名称添加到组中。

例如,要将服务器名称 pacific 添加到组 admin.example.com 中,可键入以下命令:


nisgrpadm -a admin.example.com pacific.example.com

有关更多信息,请参见 nisgrpadm(1) 手册页。

问题:

DHCP 服务器在 NIS+ cred 表中没有有效的数据加密标准 (Data Encryption Standard, DES) 凭证。

解决方法:

如果存在凭证问题,则会显示错误消息,表明用户在 NIS+ 名称服务中没有 DES 凭证。

使用 nisaddcred 命令可为 DHCP 服务器系统添加安全凭证。

以下示例说明如何在域 example.com 中为系统 mercury 添加 DES 凭证:


nisaddcred -p unix.mercury@example.com \
-P mercury.example.com. DES example.com.

此命令会提示输入超级用户口令,生成加密密钥时需要使用此口令。

有关更多信息,请参见 nisaddcred(1M) 手册页。

DHCP 中的 IP 地址分配错误

当客户机尝试获取或检验 IP 地址时,可能会出现一些问题,这些问题记录到 syslog 中或以服务器调试模式输出。以下列出的常见错误消息后指明了可能的原因和解决方案。


There is no n.n.n.n dhcp-network table for DHCP client's network

原因:

客户机正在请求特定的 IP 地址或请求延长其当前 IP 地址的租用期。DHCP 服务器无法找到此地址的 DHCP 网络表。

解决方法:

DHCP 网络表可能已被错误地删除。您可以通过使用 DHCP 管理程序或 dhcpconfig 命令再次添加网络来重新创建网络表。


ICMP ECHO reply to OFFER candidate: n.n.n.n, disabling

原因:

要提供给 DHCP 客户机的 IP 地址已处于使用状态。如果多台 DHCP 服务器拥有此地址,则可能会出现此问题。如果已为非 DHCP 网络客户机手动配置了地址,也可能会出现此问题。

解决方法:

确定正确的地址拥有权。更正 DHCP 服务器数据库或主机的网络配置。


ICMP ECHO reply to OFFER candidate: n.n.n.n. No corresponding dhcp network record.

原因:

要提供给 DHCP 客户机的 IP 地址在网络表中没有记录。此错误表示选择了 IP 地址之后,便从 DHCP 网络表中删除了此地址记录。此错误仅会在完成重复地址检查之前的短时间内出现。

解决方法:

使用 DHCP 管理程序或 pntadm 命令查看 DHCP 网络表。如果 IP 地址缺失,请从 DHCP 管理程序的“地址”选项卡上的“编辑”菜单中选择“创建”来创建地址。您还可以使用 pntadm 创建 IP 地址。


DHCP network record for n.n.n.nis unavailable, ignoring request.

原因:

所请求的 IP 地址的记录不在 DHCP 网络表中,因此服务器将删除此请求。

解决方法:

使用 DHCP 管理程序或 pntadm 命令查看 DHCP 网络表。如果 IP 地址缺失,请从 DHCP 管理程序的“地址”选项卡上的“编辑”菜单中选择“创建”来创建地址。您还可以使用 pntadm 创建地址。


n.n.n.n currently marked as unusable.

原因:

无法提供所请求的 IP 地址,因为此地址已在网络表中标记为不可用。

解决方法:

您可以使用 DHCP 管理程序或 pntadm 命令来使此地址可用。


n.n.n.n was manually allocated. No dynamic address will be allocated.

原因:

已经为客户机 ID 指定了一个手动分配的地址,并且此地址标记为不可用。服务器无法为此客户机分配其他地址。

解决方法:

您可以使用 DHCP 管理程序或 pntadm 命令使此地址可用,或者为此客户机手动分配其他地址。


Manual allocation (n.n.n.n, client ID) has n other records. Should have 0.

原因:

已经为具有指定客户机 ID 的客户机手动指定了多个 IP 地址。一台客户机只能指定一个地址。服务器将选择网络表中最近手动指定的地址。

解决方法:

使用 DHCP 管理程序或 pntadm 命令修改 IP 地址,从而删除其他手动分配的地址。


No more IP addresses on n.n.n.nnetwork.

原因:

在指定网络中,当前由 DHCP 管理的所有 IP 地址均已分配。

解决方法:

使用 DHCP 管理程序或 pntadm 命令为该网络创建新的 IP 地址。


Client: clientid lease on n.n.n.n expired.

原因:

租用期不可协商并已超时。

解决方法:

客户机应该自动重新启动协议以获取新的租用期。


Offer expired for client: n.n.n.n

原因:

服务器为客户机提供 IP 地址,但客户机响应时间太长而导致所提供的地址过期。

解决方法:

客户机应该再次自动发出一条搜索消息。如果此消息也超时,请增加 DHCP 服务器对所提供的地址进行高速缓存的超时时间。在 DHCP 管理程序中,从“服务”菜单中选择“修改”。


Client: clientid REQUEST is missing requested IP option.

原因:

客户机的请求未指定所提供的 IP 地址,所以 DHCP 服务器忽略了该请求。如果使用的第三方 DHCP 客户机不符合更新的 DHCP 协议 RFC 2131,则可能会出现此问题。

解决方法:

更新客户机软件。


Client: clientid is trying to renew n.n.n.n, an IP address it has not leased.

原因:

此客户机在 DHCP 网络表中的 IP 地址与该客户机在其更新请求中指定的 IP 地址不匹配。DHCP 服务器未更新租期。如果在客户机仍在使用该 IP 地址时删除该客户机的记录,则可能会出现此问题。

解决方法:

使用 DHCP 管理程序或 pntadm 命令检查网络表,并在必要时更正客户机的记录。应将客户机 ID 绑定到指定的 IP 地址。如果客户机 ID 未绑定,请编辑地址属性以添加客户机 ID。


Client: clientid is trying to verify unrecorded address: n.n.n.n, ignored.

原因:

指定的客户机尚未在 DHCP 网络表中注册此地址,所以此 DHCP 服务器忽略了该请求。

网络中的其他 DHCP 服务器可能已为此客户机指定了该地址。但是,也可能是由于在客户机仍在使用 IP 地址时删除了该客户机的记录。

解决方法:

使用 DHCP 管理程序或 pntadm 命令检查此服务器以及网络中任何其他 DHCP 服务器上的网络表。如有必要,请进行更正。

您也可以不执行任何操作并使租用过期。客户机会自动请求新的地址租用期。

如果希望客户机立即获取新的租用期,请键入以下命令,在客户机上重新启动 DHCP 协议:


ifconfig interface dhcp release
ifconfig interface dhcp start

对 DHCP 客户机配置问题进行疑难解答

您可能会遇到以下几类 DHCP 客户机问题:

与 DHCP 服务器通信时出现的问题

本节介绍了将 DHCP 客户机添加到网络时可能会遇到的问题。

启用客户机软件并重新引导系统之后,客户机会尝试访问 DHCP 服务器以获取其网络配置。如果客户机无法访问服务器,则可能会看到如下错误消息:


DHCP or BOOTP server not responding 

    在确定问题之前,必须同时从客户机和服务器收集诊断信息。要收集信息,可以执行以下任务:

  1. 如何在调试模式下运行 DHCP 客户机

  2. 如何在调试模式下运行 DHCP 服务器

  3. 如何使用 snoop 监视 DHCP 网络通信流量

您可以单独执行这些操作,也可以同时执行这些操作。

所收集的信息可以帮助确定是客户机、服务器还是中继代理出现了问题。然后,即可寻找解决方案。

Procedure如何在调试模式下运行 DHCP 客户机

如果客户机不是 Oracle Solaris : DHCP 客户机,请参阅客户机文档,以获取有关如何在调试模式下运行客户机的信息。

如果您拥有 Oracle Solaris : DHCP 客户机,请使用以下步骤。

  1. 以超级用户身份登录 DHCP 客户机系统。

  2. 中止 DHCP 客户机守护进程。


    # pkill -x dhcpagent
    
  3. 在调试模式下重新启动守护进程。


    # /sbin/dhcpagent -d1 -f &
    

    -d 开关可将 DHCP 客户机置于详细级别为 1 的调试模式。-f 开关会导致输出发送到控制台而不是 syslog

  4. 配置接口以启动 DHCP 协商。


    # ifconfig interface dhcp start
    

    使用客户机的网络接口名称(如 ge0)替换 interface

    在调试模式下运行时,客户机守护进程会在执行 DHCP 请求时将消息显示到屏幕上。有关客户机调试模式输出的信息,请参见DHCP 客户机在调试模式下的输出

Procedure如何在调试模式下运行 DHCP 服务器

  1. 以超级用户的身份登录服务器系统。

  2. 临时停止 DHCP 服务器。


    # svcadm disable -t svc:/network/dhcp-server
    

    也可以使用 DHCP 管理程序或 dhcpconfig 停止服务器。

  3. 在调试模式下重新启动守护进程。


    # /usr/lib/inet/in.dhcpd -d -v
    

    您还应该使用在运行守护进程时通常使用的所有 in.dhcpd 命令行选项。例如,如果将守护进程作为 BOOTP 中继代理运行,请在 in.dhcpd -d -v 命令中包括 -r 选项。

    在调试模式下运行时,守护进程会在处理 DHCP 或 BOOTP 请求时将消息显示到屏幕上。有关服务器调试模式输出的信息,请参见DHCP 服务器在调试模式下的输出

Procedure如何使用 snoop 监视 DHCP 网络通信流量

  1. 以超级用户的身份登录 DHCP 服务器系统。

  2. 启动 snoop 以开始跟踪服务器的网络接口间的网络通信流量。


    # /usr/sbin/snoop -d interface -o snoop-output-filename udp port 67 or udp port 68
    

    例如,可以键入以下命令:


    #  /usr/sbin/snoop -d hme0 -o /tmp/snoop.output udp port 67 or udp port 68
    

    snoop 会继续监视接口,直到您获取所需信息之后按 Ctrl-C 组合键停止 snoop

  3. 引导客户机系统,或者在客户机系统上重新启动 dhcpagent

    如何在调试模式下运行 DHCP 客户机介绍了如何重新启动 dhcpagent

  4. 在服务器系统上,使用 snoop 显示包含网络包内容的输出文件:


    # /usr/sbin/snoop -i snoop-output-filename -x0 -v
    

    例如,可以键入以下命令:

    # /usr/sbin/snoop -i /tmp/snoop.output -x0 -v
    
另请参见

有关解释输出的信息,请参见DHCP snoop 输出

DHCP 客户机在调试模式下的输出

以下示例显示了 DHCP 客户机在调试模式下发送 DHCP 请求并从 DHCP 服务器接收配置信息时的标准输出。


示例 17–1 DHCP 客户机在调试模式下的标准输出


/sbin/dhcpagent: debug: set_packet_filter: set filter 0x27fc8 (DHCP filter) 
/sbin/dhcpagent: debug: init_ifs: initted interface hme0 
/sbin/dhcpagent: debug: insert_ifs: hme0: sdumax 1500, optmax 1260, hwtype 1, hwlen 6 
/sbin/dhcpagent: debug: insert_ifs: inserted interface hme0 
/sbin/dhcpagent: debug: register_acknak: registered acknak id 5 
/sbin/dhcpagent: debug: unregister_acknak: unregistered acknak id 5 
/sbin/dhcpagent: debug: set_packet_filter: set filter 0x26018 (ARP reply filter)
/sbin/dhcpagent: info: setting IP netmask on hme0 to 255.255.192.0 
/sbin/dhcpagent: info: setting IP address on hme0 to 10.23.3.233 
/sbin/dhcpagent: info: setting broadcast address on hme0 to 10.23.63.255 
/sbin/dhcpagent: info: added default router 10.23.0.1 on hme0 
/sbin/dhcpagent: debug: set_packet_filter: set filter 0x28054 (blackhole filter) 
/sbin/dhcpagent: debug: configure_if: bound ifsp->if_sock_ip_fd 
/sbin/dhcpagent: info: hme0 acquired lease, expires Tue Aug 10 16:18:33 2006 
/sbin/dhcpagent: info: hme0 begins renewal at Tue Aug 10 15:49:44 2006 
/sbin/dhcpagent: info: hme0 begins rebinding at Tue Aug 10 16:11:03 2006

如果客户机无法访问 DHCP 服务器,则看到的调试模式输出可能会类似于以下示例所显示的输出。


示例 17–2 指明 DHCP 客户机在调试模式下出现问题的输出


/sbin/dhcpagent: debug: set_packet_filter: set filter 0x27fc8 (DHCP filter)
/sbin/dhcpagent: debug: init_ifs: initted interface hme0 
/sbin/dhcpagent: debug: select_best: no valid OFFER/BOOTP reply
/sbin/dhcpagent: debug: select_best: no valid OFFER/BOOTP reply
/sbin/dhcpagent: debug: select_best: no valid OFFER/BOOTP reply
 

如果看到此消息,则表明客户机请求永远无法到达服务器,或者服务器无法将响应发送到客户机。请按照如何使用 snoop 监视 DHCP 网络通信流量中所述,在服务器上运行 snoop,以确定来自客户机的包是否已到达服务器。

DHCP 服务器在调试模式下的输出

守护进程启动时,标准的服务器调试模式输出将显示服务器配置信息,后跟有关每个网络接口的信息。守护进程启动后,调试模式输出显示有关请求该守护进程的信息。示例 17–3 显示了刚刚启动的 DHCP 服务器的调试模式输出。对于使用其他未响应的 DHCP 服务器拥有的地址的客户机,服务器将延长其租用期。


示例 17–3 DHCP 服务器在调试模式下的标准输出


Daemon Version: 3.1  
Maximum relay hops: 4  
Transaction logging to console enabled.  
Run mode is: DHCP Server Mode.  
Datastore: nisplus  
Path: org_dir.dhcp.test..:dhcp.test..:$ 
DHCP offer TTL: 10  
Ethers compatibility enabled.  
BOOTP compatibility enabled.  
ICMP validation timeout: 1000 milliseconds, Attempts: 2.  
Monitor (0005/hme0) started...  
Thread Id: 0005 - Monitoring Interface: hme0 *****  
MTU: 1500      Type: DLPI  
Broadcast: 10.21.255.255 
Netmask: 255.255.0.0  
Address: 10.21.0.2  
Monitor (0006/nf0) started...  
Thread Id: 0006 - Monitoring Interface: nf0 *****  
MTU: 4352      Type: DLPI  
Broadcast: 10.22.255.255  
Netmask: 255.255.0.0  
Address: 10.22.0.1  
Monitor (0007/qfe0) started...  
Thread Id: 0007 - Monitoring Interface: qfe0 *****  
MTU: 1500      Type: DLPI   
Broadcast: 10.23.63.255  
Netmask: 255.255.192.0  
Address: 10.23.0.1  
Read 33 entries from DHCP macro database on Tue Aug 10 15:10:27 2006 
Datagram received on network device: qfe0  
Client: 0800201DBA3A is requesting verification of address owned by 10.21.0.4 
Datagram received on network device: qfe0  
Client: 0800201DBA3A is requesting verification of address owned by 10.21.0.4  
Datagram received on network device: qfe0  
Client: 0800201DBA3A is requesting verification of address owned by 10.21.0.4  
Datagram received on network device: qfe0  
Client: 0800201DBA3A maps to IP: 10.23.3.233  
Unicasting datagram to 10.23.3.233 address.  
Adding ARP entry: 10.23.3.233 == 0800201DBA3A  
DHCP EXTEND 0934312543 0934316143 10.23.3.233 10.21.0.2 
          0800201DBA3A SUNW.Ultra-5_10 0800201DBA3A

示例 17–4 显示了作为 BOOTP 中继代理启动的 DHCP 守护进程的调试模式输出。此代理将客户机的请求中继到 DHCP 服务器,并将服务器的响应中继到客户机。


示例 17–4 BOOTP 中继在调试模式下的标准输出


Relay destination: 10.21.0.4 (blue-servr2)     network: 10.21.0.0  
Daemon Version: 3.1  
Maximum relay hops: 4  
Transaction logging to console enabled.  
Run mode is: Relay Agent Mode.  
Monitor (0005/hme0) started...  
Thread Id: 0005 - Monitoring Interface: hme0 *****  
MTU: 1500      Type: DLPI  
Broadcast: 10.21.255.255  
Netmask: 255.255.0.0  
Address: 10.21.0.2  
Monitor (0006/nf0) started...  
Thread Id: 0006 - Monitoring Interface: nf0 *****  
MTU: 4352      Type: DLPI  
Broadcast: 10.22.255.255  
Netmask: 255.255.0.0  
Address: 10.22.0.1  
Monitor (0007/qfe0) started...  
Thread Id: 0007 - Monitoring Interface: qfe0 *****  
MTU: 1500      Type: DLPI  
Broadcast: 10.23.63.255  
Netmask: 255.255.192.0  
Address: 10.23.0.1  
Relaying request 0800201DBA3A to 10.21.0.4, server port.  
BOOTP RELAY-SRVR 0934297685 0000000000 0.0.0.0 10.21.0.4 0800201DBA3A 
N/A 0800201DBA3A  
Packet received from relay agent: 10.23.0.1  
Relaying reply to client 0800201DBA3A  
Unicasting datagram to 10.23.3.233 address.  
Adding ARP entry: 10.23.3.233 == 0800201DBA3A  
BOOTP RELAY-CLNT 0934297688 0000000000 10.23.0.1 10.23.3.233 0800201DBA3A 
N/A 0800201DBA3A  
Relaying request 0800201DBA3A to 10.21.0.4, server port.  
BOOTP RELAY-SRVR 0934297689 0000000000 0.0.0.0 10.21.0.4 0800201DBA3A 
N/A 0800201DBA3A  
Packet received from relay agent: 10.23.0.1  
Relaying reply to client 0800201DBA3A  
Unicasting datagram to 10.23.3.233 address.  
Adding ARP entry: 10.23.3.233 == 0800201DBA3A 
 

如果 DHCP 存在问题,则调试模式输出可能会显示警告或错误消息。请使用以下 DHCP 服务器错误消息列表来寻找解决方案。


ICMP ECHO reply to OFFER candidate: ip_address disabling

原因:

在 DHCP 服务器向客户机提供 IP 地址之前,它会对此地址执行 ping 操作以检验地址是否正在使用。如果客户机回复,则表明此地址正在使用。

解决方法:

确保配置的地址尚未使用。您可以使用 ping 命令。有关更多信息,请参见 ping(1M) 手册页。


No more IP addresses on network-address network.

原因:

在 DHCP 网络表中没有与客户机网络关联的 IP 地址。

解决方法:

使用 DHCP 管理程序或 pntadm 命令创建更多的 IP 地址。如果 DHCP 守护进程正在监视多个子网,请确保其他地址是客户机所在子网的地址。有关更多信息,请参见将 IP 地址添加到 DHCP 服务


No more IP addresses for network-address network when you are running the DHCP daemon in BOOTP compatibility mode.

原因:

BOOTP 没有使用租用时间,因此 DHCP 服务器查找设置了 BOOTP 标志的空闲地址以将其分配给 BOOTP 客户机。

解决方法:

使用 DHCP 管理程序分配 BOOTP 地址。请参见通过 DHCP 服务支持 BOOTP 客户机(任务列表)


Request to access nonexistent per network database: database-name in datastore: datastore.

原因:

在配置 DHCP 服务器的过程中,未创建子网的 DHCP 网络表。

解决方法:

使用 DHCP 管理程序或 pntadm 命令来创建 DHCP 网络表和新的 IP 地址。请参见添加 DHCP 网络


There is no table-name dhcp-network table for DHCP client's network.

原因:

在配置 DHCP 服务器的过程中,未创建子网的 DHCP 网络表。

解决方法:

使用 DHCP 管理程序或 pntadm 命令来创建 DHCP 网络表和新的 IP 地址。请参见添加 DHCP 网络


Client using non_RFC1048 BOOTP cookie.

原因:

网络中的某个设备正在尝试访问不受支持的 BOOTP 实现。

解决方法:

如果无需配置此设备,则忽略此消息。如果您希望支持此设备,请参见通过 DHCP 服务支持 BOOTP 客户机(任务列表)获取更多信息。

DHCP snoop 输出

snoop 输出中,您应会看到在 DHCP 客户机系统和 DHCP 服务器系统之间交换了包。每个包中指明了各系统的 IP 地址,另外,还包括包路径中的所有路由器或中继代理的 IP 地址。如果两个系统未交换包,则客户机系统可能根本无法访问服务器系统。因此,不会出现太严重的问题。

要评估 snoop 输出,您必须知道预期的行为。例如,必须知道请求是否应通过 BOOTP 中继代理,还必须知道所涉及的系统的 MAC 地址和 IP 地址,以便可以确定这些值是否为期望的值。如果存在多个网络接口,则还必须知道这些网络接口的地址。

以下示例显示了从 blue-servr2 上的 DHCP 服务器发送到 MAC 地址为 8:0:20:8e:f3:7e 的客户机的 DHCP 确认消息的标准 snoop 输出。在此消息中,服务器为客户机指定了 IP 地址 192.168.252.6 和主机名 white-6。此消息还包括多个标准网络选项以及几个用于客户机的供应商特定选项。


示例 17–5 单个包的 snoop 样例输出


ETHER:  ----- Ether Header ----- 
ETHER:   
ETHER:  Packet 26 arrived at 14:43:19.14 
ETHER:  Packet size = 540 bytes 
ETHER:  Destination = 8:0:20:8e:f3:7e, Sun 
ETHER:  Source      = 8:0:20:1e:31:c1, Sun 
ETHER:  Ethertype = 0800 (IP) 
ETHER:  
IP:   ----- IP Header ----- 
IP:    
IP:   Version = 4 
IP:   Header length = 20 bytes 
IP:   Type of service = 0x00 
IP:         xxx. .... = 0 (precedence) 
IP:         ...0 .... = normal delay 
IP:         .... 0... = normal throughput 
IP:         .... .0.. = normal reliability 
IP:   Total length = 526 bytes 
IP:   Identification = 64667 
IP:   Flags = 0x4 IP:         .1.. .... = do not fragment 
IP:         ..0. .... = last fragment 
IP:   Fragment offset = 0 bytes 
IP:   Time to live = 254 seconds/hops 
IP:   Protocol = 17 (UDP) 
IP:   Header checksum = 157a 
IP:   Source address = 10.21.0.4, blue-servr2 
IP:   Destination address = 192.168.252.6, white-6 
IP:   No options 
IP:   UDP:  ----- UDP Header ----- 
UDP:   
UDP:  Source port = 67 
UDP:  Destination port = 68 (BOOTPC) 
UDP:  Length = 506  
UDP:  Checksum = 5D4C  
UDP:  
DHCP: ----- Dynamic Host Configuration Protocol ----- 
DHCP:  
DHCP: Hardware address type (htype) =  1 (Ethernet (10Mb)) 
DHCP: Hardware address length (hlen) = 6 octets 
DHCP: Relay agent hops = 0 
DHCP: Transaction ID = 0x2e210f17 
DHCP: Time since boot = 0 seconds 
DHCP: Flags = 0x0000 
DHCP: Client address (ciaddr) = 0.0.0.0 
DHCP: Your client address (yiaddr) = 192.168.252.6 
DHCP: Next server address (siaddr) = 10.21.0.2 
DHCP: Relay agent address (giaddr) = 0.0.0.0 
DHCP: Client hardware address (chaddr) = 08:00:20:11:E0:1B 
DHCP:  
DHCP: ----- (Options) field options ----- 
DHCP:  
DHCP: Message type = DHCPACK 
DHCP: DHCP Server Identifier = 10.21.0.4 
DHCP: Subnet Mask = 255.255.255.0 
DHCP: Router at = 192.168.252.1 
DHCP: Broadcast Address = 192.168.252.255 
DHCP: NISPLUS Domainname = dhcp.test 
DHCP: IP Address Lease Time = 3600 seconds 
DHCP: UTC Time Offset = -14400 seconds 
DHCP: RFC868 Time Servers at = 10.21.0.4 
DHCP: DNS Domain Name = sem.example.com 
DHCP: DNS Servers at = 10.21.0.1 
DHCP: Client Hostname = white-6 
DHCP: Vendor-specific Options (166 total octets): 
DHCP:   (02) 04 octets  0x8194AE1B (unprintable) 
DHCP:   (03) 08 octets  "pacific" 
DHCP:   (10) 04 octets  0x8194AE1B (unprintable) 
DHCP:   (11) 08 octets  "pacific" 
DHCP:   (15) 05 octets  "xterm" 
DHCP:   (04) 53 octets  "/export/s2/base.s2s/latest/Solaris_8/Tools/Boot" 
DHCP:   (12) 32 octets  "/export/s2/base.s2s/latest" 
DHCP:   (07) 27 octets  "/platform/sun4u/kernel/unix" 
DHCP:   (08) 07 octets  "EST5EDT" 
  0: 0800 208e f37e 0800 201e 31c1 0800 4500    .. .ó~.. .1...E.
 16: 020e fc9b 4000 fe11 157a ac15 0004 c0a8    ....@....z......           
 32: fc06 0043 0044 01fa 5d4c 0201 0600 2e21    ...C.D..]L.....!           
 48: 0f17 0000 0000 0000 0000 c0a8 fc06 ac15    ................           
 64: 0002 0000 0000 0800 2011 e01b 0000 0000    ........ .......           
 80: 0000 0000 0000 0000 0000 0000 0000 0000    ................           
 96: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
112: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
128: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
144: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
160: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
176: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
192: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
208: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
224: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
240: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
256: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
272: 0000 0000 0000 6382 5363 3501 0536 04ac    ......c.Sc5..6..          
288: 1500 0401 04ff ffff 0003 04c0 a8fc 011c    ................          
304: 04c0 a8fc ff40 0964 6863 702e 7465 7374    .....@.dhcp.test          
320: 3304 0000 0e10 0204 ffff c7c0 0404 ac15    3...............          
336: 0004 0f10 736e 742e 6561 7374 2e73 756e    ....sem.example.          
352: 2e63 6f6d 0604 ac15 0001 0c07 7768 6974    com.........whit          
368: 652d 362b a602 0481 94ae 1b03 0861 746c    e-6+.........pac          
384: 616e 7469 630a 0481 94ae 1b0b 0861 746c    ific.........pac          
400: 616e 7469 630f 0578 7465 726d 0435 2f65    ific...xterm.5/e          
416: 7870 6f72 742f 7332 382f 6261 7365 2e73    xport/sx2/bcvf.s          
432: 3238 735f 776f 732f 6c61 7465 7374 2f53    2xs_btf/latest/S          
448: 6f6c 6172 6973 5f38 2f54 6f6f 6c73 2f42    olaris_x/Tools/B          
464: 6f6f 740c 202f 6578 706f 7274 2f73 3238    oot. /export/s2x          
480: 2f62 6173 652e 7332 3873 5f77 6f73 2f6c    /bcvf.s2xs_btf/l         
496: 6174 6573 7407 1b2f 706c 6174 666f 726d    atest../platform          
512: 2f73 756e 346d 2f6b 6572 6e65 6c2f 756e    /sun4u/kernel/un          
528: 6978 0807 4553 5435 4544 54ff              ix..EST5EDT.  

DHCP 配置信息不准确时出现的问题

如果 DHCP 客户机在其网络配置信息中收到不准确的信息,请查看 DHCP 服务器数据。您必须检查 DHCP 服务器为此客户机处理的宏的选项值。不准确的信息示例可能包括错误的 NIS 域名或路由器 IP 地址。

使用以下一般原则可帮助确定不准确信息的来源:

DHCP 客户机提供的主机名存在的问题

本节介绍了 DHCP 客户机提供要向 DNS 注册的自身主机名时,可能会遇到的各种问题。

DHCP 客户机无法请求主机名

如果客户机不是 Oracle Solaris : DHCP 客户机,请参阅客户机文档以确定如何将客户机配置为请求主机名。有关 Oracle Solaris : DHCP 客户机,请参见如何使 Oracle Solaris : DHCPv4 客户机请求特定的主机名

DHCP 客户机无法获取所请求的主机名

以下列表介绍了客户机在获取其请求的主机名时可能会遇到的问题以及建议的解决方案。

问题:

客户机接受了无法发布 DNS 更新的 DHCP 服务器所提供的地址。

解决方法:

如果有两台 DHCP 服务器可用于客户机,则这两台服务器都应配置为提供 DNS 更新。有关配置 DHCP 服务器和 DNS 服务器的信息,请参见通过 DHCP 服务器启用动态 DNS 更新

要确定是否将 DHCP 服务器配置为提供 DNS 更新,请执行下列操作:

  1. 确定客户机的 DHCP 服务器的 IP 地址。在客户机系统上,使用 snoop 或其他应用程序来捕获网络包。请参见如何使用 snoop 监视 DHCP 网络通信流量,并在客户机而不是服务器上执行此过程。在 snoop 输出中,查找 DHCP 服务器标识符以获取服务器的 IP 地址。

  2. 登录到 DHCP 服务器系统以检验此系统是否配置为进行 DNS 更新。请以超级用户身份键入以下命令:

    dhcpconfig -P

    如果将 UPDATE_TIMEOUT 列为服务器参数,则会将 DHCP 服务器配置为进行 DNS 更新。

  3. 在 DNS 服务器上,查看 /etc/named.conf 文件。在相应域的 zone 部分中查找 allow-update 关键字。如果服务器允许通过 DHCP 服务器进行 DNS 更新,则 DHCP 服务器的 IP 地址将在 allow-update 关键字中列出。

问题:

客户机使用 FQDN 选项来指定主机名。Oracle Solaris : DHCP 当前不支持 FQDN 选项,因为此选项没有正式包含在 DHCP 协议中。

解决方法:

在服务器上,使用 snoop 或其他应用程序来捕获网络包。请参见如何使用 snoop 监视 DHCP 网络通信流量。在 snoop 输出中,查找来自客户机的包中的 FQDN 选项。

将客户机配置为使用 Hostname 选项指定主机名。Hostname 的选项代码为 12。请参阅客户机文档以获取有关说明。

有关 Oracle Solaris : 客户机,请参见如何使 Oracle Solaris : DHCPv4 客户机请求特定的主机名

问题:

为客户机提供地址的 DHCP 服务器不知道客户机的 DNS 域。

解决方法:

在 DHCP 服务器上,查找具有有效值的 DNSdmain 选项。在为此客户机处理的宏中,将 DNSdmain 选项设置为正确的 DNS 域名。DNSdmain 通常包含在网络宏中。有关更改宏中的选项值的信息,请参见修改 DHCP 宏

问题:

客户机所请求的主机名对应于未由 DHCP 服务器管理的 IP 地址。Oracle Solaris : DHCP 服务器无法对不属于该服务器管理的 IP 地址执行 DNS 更新。

解决方法:

检查 syslog 以获取 DHCP 服务器发出的以下消息之一:

将客户机配置为请求其他名称。请参见如何使 Oracle Solaris : DHCPv4 客户机请求特定的主机名。选择映射到由 DHCP 服务器管理的地址的名称。您可以在 DHCP 管理程序的“地址”选项卡中看到地址映射。或者,选择未映射到任何 IP 地址的地址。

问题:

客户机所请求的主机名对应于当前不可用的 IP 地址。此地址可能正在使用,已租用给其他客户机或者准备提供给其他客户机。

解决方法:

检查 syslog 以获取 DHCP 服务器发出的以下消息: ICMP ECHO reply to OFFER candidate: n.n.n.n

将客户机配置为选择对应于其他 IP 地址的名称。或者,从使用此地址的客户机中回收此地址。

问题:

无法将 DNS 服务器配置为接受来自 DHCP 服务器的更新。

解决方法:

在 DNS 服务器上,检查 /etc/named.conf 文件。在 DHCP 服务器域相应的 zone 部分内的 allow-update 关键字中,查找 DHCP 服务器的 IP 地址。如果不存在此 IP 地址,则无法将 DNS 服务器配置为接受来自 DHCP 服务器的更新。

有关配置 DHCP 服务器的信息,请参见如何针对 DHCP 客户机启用动态 DNS 更新

如果 DHCP 服务器具有多个接口,则可能需要将 DNS 服务器配置为接受来自所有 DHCP 服务器地址的更新。在 DNS 服务器上,启用调试以查看更新是否到达 DNS 服务器。如果 DNS 服务器收到更新请求,请检查调试模式输出以确定无法进行更新的原因。有关 DNS 调试模式的信息,请参见 in.named.1M 手册页。

问题:

DNS 更新可能未在分配的时间内完成。如果 DNS 更新未在已配置的时间限制内完成,则 DHCP 服务器不会将主机名返回给客户机。但是,它会继续尝试完成 DNS 更新。

解决方法:

使用 nslookup 命令确定更新是否已成功完成。请参见 nslookup(1M) 手册页。

例如,假定 DNS 域为 hills.example.org,DNS 服务器的 IP 地址为 10.76.178.11。客户机要注册的主机名为 cathedral。您可以使用以下命令确定是否已向此 DNS 服务器中注册了 cathedral

nslookup cathedral.hills.example.org 10.76.178.11

如果更新成功完成,但用时超过了分配的时间,则需要增大超时值。请参见如何针对 DHCP 客户机启用动态 DNS 更新。在此过程中,应该增加在超时之前等待 DNS 服务器发出响应的秒数。