当カテゴリのポストは、独自の勉強で既にCCIE Blueprintをそれなりに網羅している事が前提の説明が多々含まれています。分からない用語等が出てきた場合は、Workbook等を勉強して戻ってきてください。
DHCP。。。CCIE勉強中の皆さんは好きですか?
私は大嫌いです!!
そもそもBlueprintの中のSystem Management自体が嫌いなんですよ。ネットワークのテクノロジーを学ぶのは楽しいんですけど、Cisco機器のフィーチャーなんて勉強してもなにも面白くない。IP ServicesとSystem Managementは私がCCIEの勉強をしている時に一番モチベーションを下げる要因でした。
その中でもDHCP周りは私が最も嫌いな設定のうちの一つでした。だって無駄に複雑じゃないですか、特にOptionが多すぎる。。。こんなこと覚えても結局実世界ではルーターにDHCPサーバーを構築する環境なんて構築する事ないしね。
でも、Blueprintに載っているのでCCIEを取得する為には勉強するしかありません。そんな思いの方、いらっしゃいますよね?
当記事の結論:DHCPのTshootをするときは、まずはServer側で「debug ip dhcp server packet detail」をすること。
DHCPのTshootは特に難しい
DHCPがうまくいかない。そんな時、みなさんはどうやってTshootしていますか?DHCPはClientもServerもデバッグオプションが非常に多く、さらに設定も多岐に渡るので面倒くさいです。時間をかけたら解決出来る問題も、短時間で問題箇所を発見するのは至難の業ですよね。
そんなDHCPについて、私なりの問題切り分け方法を紹介します。
練習してみましょう
例えば以下の様な簡単なトポロジを例にしてみましょう
R2/R3の各インターフェースのIPは各セグメントの第4オクテットをRouter番号に置き換えてください。例えばR2のDHCP_Client側は192.168.1.2です。
DHCP_ClientがDHCPでIPを貰いたいとします。DHCP_Clientは以下の通り、既にDHCPでIPを取得する設定が出来ているとします。
DHCP_Client#sh run int f0/0 Building configuration... Current configuration : 73 bytes ! interface FastEthernet0/0 ip address dhcp shutdown duplex full end
ふむ、単純に「ip address dhcp」やっているだけですね。
では、interfaceを起動してDHCPからIPを取得出来るか確認してみましょう。
DHCP_Client#conf t Enter configuration commands, one per line. End with CNTL/Z. DHCP_Client(config)#int f0/0 DHCP_Client(config-if)#no sh *Jul 5 17:54:55.059: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up *Jul 5 17:54:56.059: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up DHCP_Client(config-if)#do sh ip int bri Interface IP-Address OK? Method Status Protocol FastEthernet0/0 unassigned YES DHCP up up DHCP_Client(config-if)#
・・・取得出来ていませんね。まぁTshoot対策の為にわざと取得出来ない構成にしているからですけど(笑)。
こういう時、どのように対応しますか?
CCIEラボ試験は時間がありません。いくら沢山showコマンドを知っていても時間内に解決出来なければ意味がありません。最も短い時間で対応できる方法が正解です!
debug ip dhcp server packet detailを心のよりどころにする
DHCPは様々な設定箇所・デバッグオプションがあるので戸惑う事が多いですが
私は「debug ip dhcp server packet detail」をDHCPサーバーに対していきなりセットしちゃいます。
R3# R3#debug ip dhcp server packet detail DHCP server packet detail debugging is on. R3#
再度クライアント側のインターフェースを上げてみます
DHCP_Client(config-if)#no shut DHCP_Client(config-if)# *Jul 5 18:01:34.839: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up *Jul 5 18:01:35.839: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up DHCP_Client(config-if)#do sh ip int bri Interface IP-Address OK? Method Status Protocol FastEthernet0/0 unassigned YES DHCP up up DHCP_Client(config-if)#
ダメですね(そりゃあそうだ)。R3側を見てみましょう。
R3# R3#debug ip dhcp server packet detail DHCP server packet detail debugging is on. R3#
何も画面が変わっていません。
この時点で、仮にR3にDHCP通信が来ていたら、少なくとも何らかのメッセージが表示されるはずです。メッセージが表示されないという事は、なんらかの理由でR3にDHCPリクエストが来ていないのです。QOSの設定がおかしかったり、ACL等でフィルタリングされていたり、IGPの設定でプレフィックスが届いていなかったり、色々理由は考えられますがDHCPとは関係ないL3の問題の可能性が高いので、しっかり切り分けましょう。
R2のリレー情報を見てみましょう。
R2(config-if)#do sh run int f0/0 Building configuration... Current configuration : 96 bytes ! interface FastEthernet0/0 ip address 192.168.1.2 255.255.255.0 speed auto duplex auto end R2(config-if)#
今回はDHCP_Client側のインターフェースにrelay設定が出来ていませんね。これだとR3側にDHCP情報を流されません。設定しましょう。
R2(config-if)#int f0/0 R2(config-if)# ip helper-address 172.16.1.3 R2(config-if)#do sh run int f0/0 Building configuration... Current configuration : 126 bytes ! interface FastEthernet0/0 ip address 192.168.1.2 255.255.255.0 ip helper-address 172.16.1.3 speed auto duplex auto end
再度クライアント側のインターフェースを起動します。
DHCP_Client(config-if)#no shut DHCP_Client(config-if)# *Jul 5 18:01:34.839: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up *Jul 5 18:01:35.839: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up DHCP_Client(config-if)#do sh ip int bri Interface IP-Address OK? Method Status Protocol FastEthernet0/0 unassigned YES DHCP up up DHCP_Client(config-if)#
まだダメですね。R3側はどうでしょうか。
R3#debug ip dhcp server packet detail DHCP server packet detail debugging is on. R3# *Jul 5 18:14:12.819: DHCPD: Reload workspace interface FastEthernet0/0 tableid 0. *Jul 5 18:14:12.819: DHCPD: tableid for 172.16.1.3 on FastEthernet0/0 is 0 *Jul 5 18:14:12.819: DHCPD: client's VPN is . *Jul 5 18:14:12.823: DHCPD: DHCPDISCOVER received from client 0063.6973.636f.2d63.6130.332e.3034.6661.2e30.3030.302d.4661.302f.30 through relay 192.168.1.2. R3#
お!少なくともデバッグに表示がされましたね!これでDHCPサーバーまでのコネクティビティは大丈夫です。
この辺りまで来たらDHCPサーバーの設定を見てみます。
R3#sh run | s dhcp ip dhcp pool DHCP_CLIENT host 192.168.1.1 255.255.255.0 client-identifier 0aaa.bbbb.cccc.dddd default-router 192.168.1.2 R3#
4行目を見てください。client-identifierを指定しています。これがクライアントが送信しているclient-identifierと違う可能性はありますね。
CCIEラボ試験のTshootは、仮に既に設定がされているものは、設定自体を消す訳ではなく出来るだけ設定内容を修正する方がよいと言われています。とすると、client-identifierを正しいものに直した方がよさそうです。
そうなると通常は「ええと、client-identifierは頭に01を・・・」とかなりますよね。「debug ip dhcp server packet detail」さえ覚えておけば、client-identifierの算出方法を覚える必要はありません。
*Jul 5 18:14:12.819: DHCPD: Reload workspace interface FastEthernet0/0 tableid 0.
*Jul 5 18:14:12.819: DHCPD: tableid for 172.16.1.3 on FastEthernet0/0 is 0
*Jul 5 18:14:12.819: DHCPD: client's VPN is .
*Jul 5 18:14:12.823: DHCPD: DHCPDISCOVER received from client 0063.6973.636f.2d63.6130.332e.3034.6661.2e30.3030.302d.4661.302f.30 through relay 192.168.1.2.
上記の最後の行を見てください。「0063.6973.636f.2d63.6130.332e.3034.6661.2e30.3030.302d.4661.302f.30」がclient-identifierです。このメッセージさえ覚えておけば、client-identifierの法則を覚える必要はありませんね!
DHCP_Clientが送信しているclient-identifierをセットしてみましょう。
R3#conf t Enter configuration commands, one per line. End with CNTL/Z. R3(config)#ip dhcp pool DHCP_CLIENT R3(dhcp-config)#$f.2d63.6130.332e.3034.6661.2e30.3030.302d.4661.302f.30 R3(dhcp-config)#end R3#sh run *Jul 5 18:32:14.295: %SYS-5-CONFIG_I: Configured from console by console R3#sh run | s dhcp ip dhcp pool DHCP_CLIENT host 192.168.1.1 255.255.255.0 client-identifier 0063.6973.636f.2d63.6130.332e.3034.6661.2e30.3030.302d.4661.302f.30 default-router 192.168.1.2 R3#
client-identifierが長過ぎるので書式が切れてしまっていますが、とりあえずセットしました。
クライアントのインターフェースを起動してみましょう。
DHCP_Client(config-if)#no shut
DHCP_Client(config-if)#
*Jul 5 18:33:55.215: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
DHCP_Client(config-if)#
*Jul 5 18:33:56.215: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
DHCP_Client(config-if)#
*Jul 5 18:33:58.231: %DHCP-6-ADDRESS_ASSIGN: Interface FastEthernet0/0 assigned DHCP address 192.168.1.1, mask 255.255.255.0, hostname DHCP_Client
DHCP_Client(config-if)#
おおお!きましたね!!参考までにR3側のデバッグは以下の通り表示されています。
R3# *Jul 5 18:33:53.147: DHCPD: Reload workspace interface FastEthernet0/0 tableid 0. *Jul 5 18:33:53.147: DHCPD: tableid for 172.16.1.3 on FastEthernet0/0 is 0 *Jul 5 18:33:53.151: DHCPD: client's VPN is . *Jul 5 18:33:53.151: DHCPD: DHCPDISCOVER received from client 0063.6973.636f.2d63.6130.332e.3034.6661.2e30.3030.302d.4661.302f.30 through relay 192.168.1.2. *Jul 5 18:33:53.155: DHCPD: Sending DHCPOFFER to client 0063.6973.636f.2d63.6130.332e.3034.6661.2e30.3030.302d.4661.302f.30 (192.168.1.1). *Jul 5 18:33:53.159: DHCPD: unicasting BOOTREPLY for client ca03.04fa.0000 to relay 192.168.1.2. R3# *Jul 5 18:33:53.867: DHCPD: Reload workspace interface FastEthernet0/0 tableid 0. *Jul 5 18:33:53.867: DHCPD: tableid for 172.16.1.3 on FastEthernet0/0 is 0 *Jul 5 18:33:53.867: DHCPD: client's VPN is . *Jul 5 18:33:53.871: DHCPD: DHCPREQUEST received from client 0063.6973.636f.2d63.6130.332e.3034.6661.2e30.3030.302d.4661.302f.30. *Jul 5 18:33:53.871: DHCPD: DHCPREQUEST received on interface FastEthernet0/0. *Jul 5 18:33:53.875: DHCPD: Sending DHCPACK to client 0063.6973.636f.2d63.6130.332e.3034.6661.2e30.3030.302d.4661.302f.30 (192.168.1.1). *Jul 5 18:33:53.875: DHCPD: unicasting BOOTREPLY for client ca03.04fa.0000 to relay 192.168.1.2.
DHCP応答を返していますね。
(ちなみに、R3は192.168.1.0/24プレフィックスをEIGRPで伝搬しておきました。そうしないと、R2へ応答を返せないはずです)
まとめ
とりあえずDHCPからみの問題が出た場合は、debug ip dhcp server packet detailをやってみてください。Tshootの場合は切り分けの短縮が期待出来ますし、Configセクションで「クライアント毎のプールを設定する事」みたいな課題が出たとしても、client-identifierを簡単に見つける事が出来るので非常に効果的です。
※お願い:いかがでしたか?参考になりましたか?出来ればコメントください。難易度に合わせて次回の投稿を準備するように努力します!
コメント