EIGRP では、ネイバー認証を設定すると、パスワードを知っているルータからのパケットだけを受け入れるようにできます。不正なルータがネイバーになってルートを流し込むのを防ぐための設定です。この記事では、クラシックモードで MD5 認証を設定し、キーの文字列が違う場合やキーチェーンがない場合の動きも確かめます。
- キーチェーンの作り方
- インタフェースで MD5 認証を有効にし、キーチェーンを適用する方法
- キーの文字列が違うとき、キーチェーンがないときのログと debug
MD5 認証の設定の流れ
クラシックモードの MD5 認証は、次の2段階で設定します。
- STEP 1:キーチェーンを作り、キー ID と文字列(パスワード)を登録する
- STEP 2:インタフェースで MD5 認証を有効にし、キーチェーンを適用する
送信側は、パケットとキーの文字列から MD5 のダイジェストを計算してパケットに付け、受信側は同じ計算をして一致したパケットだけを受け入れます。ダイジェストにはキー ID も一緒に載せるので、受信側は同じ ID のキーで照合します。
検証構成
R2 と R3 は、すでに EIGRP AS 100 のネイバーになっています。基本設定は EIGRP の基本設定とネイバー・ルーティングテーブルの確認 を参照してください。
キーチェーンを作る
認証で使うキーの ID と文字列を、キーチェーンに登録します。「チェーン」の名前のとおり、ID を変えて複数のキーを登録できます。ここでは、キーチェーン名を EIGRP-KEY、キー ID を 1、文字列を CISCO にします。
R2
R2(config)# key chain EIGRP-KEY R2(config-keychain)# key 1 R2(config-keychain-key)# key-string CISCO
R3
R3(config)# key chain EIGRP-KEY R3(config-keychain)# key 1 R3(config-keychain-key)# key-string CISCO
キーチェーン名はルータの中だけで使う名前なので、R2 と R3 で同じにする必要はありません。そろえる必要があるのは、キー ID と文字列です。
インタフェースで MD5 認証を有効にする
R2 の R3 側インタフェースで、MD5 認証を有効にし、キーチェーンを適用します。どちらのコマンドにも EIGRP の AS 番号を入れます。
R2
R2(config)# interface fastEthernet 0/0.23 R2(config-subif)# ip authentication mode eigrp 100 md5 R2(config-subif)# ip authentication key-chain eigrp 100 EIGRP-KEY
| コマンド | 意味 |
|---|---|
| ip authentication mode eigrp 100 md5 | このインタフェースの EIGRP(AS 100)で MD5 認証を使う |
| ip authentication key-chain eigrp 100 EIGRP-KEY | 認証に使うキーチェーンを指定する |
設定した直後に、R3 とのネイバーがダウンします。R3 はまだ認証を設定していないので、R2 は R3 の Hello を受け入れられません。
R2
R2#
%DUAL-5-NBRCHANGE: EIGRP-IPv4 100: Neighbor 192.168.23.3 (FastEthernet0/0.23) is
down: authentication mode changed
R3 にも同じ設定をします。
R3
R3(config)# interface fastEthernet 0/0.23 R3(config-subif)# ip authentication mode eigrp 100 md5 R3(config-subif)# ip authentication key-chain eigrp 100 EIGRP-KEY
しばらくすると、ネイバーが確立します。
R2
R2#
%DUAL-5-NBRCHANGE: EIGRP-IPv4 100: Neighbor 192.168.23.3 (FastEthernet0/0.23) is up
: new adjacency
パケットキャプチャ:Hello に付いた認証情報
R2 が送る Hello をキャプチャすると、Authentication MD5 の TLV が付き、キーの文字列から計算したダイジェストが入っています。
この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
▸ Internet Protocol Version 4, Src: 192.168.23.2, Dst: 224.0.0.10▾ Cisco EIGRP Version: 2 Opcode: Hello (5) Checksum: 0xa2f1 [correct] [Checksum Status: Good] ▸ Flags: 0x00000000 Sequence: 0 Acknowledge: 0 Virtual Router ID: 0 (Address-Family) Autonomous System: 1001 ▾ Authentication MD5 Type: Authentication (0x0002)2 Length: 403 Type: MD5 (2) Length: 164 Key ID: 1 Key Sequence: 0 Nullpad: 00000000000000005 Digest: f180500ce3f1cee30d49c425f59a90d3 ▾ Parameters Type: Parameters (0x0001) Length: 12 K1: 1 K2: 0 K3: 1 K4: 0 K5: 0 K6: 0 Hold Time: 15 ▸ Software Version: EIGRP=10.0, TLV=2.0
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Authentication MD5 | 認証の TLV(Type 0x0002) |
| 2 | Length: 40 | 認証 TLV 全体の長さ。認証なしの Hello より 40 バイト長くなる |
| 3 | Type: MD5 (2) | 認証の種類が MD5。続く Length: 16 はダイジェストの長さ(16 バイト=128 ビット) |
| 4 | Key ID: 1 | 使ったキーの ID。キーチェーンの key 1 |
| 5 | Digest | キーの文字列とパケットから計算したダイジェスト。文字列そのものは入っていない |
キーの文字列が違う場合
R3 のキーの文字列を CISCO から CISCO1 に変えてみます。
R3
R3(config)# key chain EIGRP-KEY
R3(config-keychain)# key 1
R3(config-keychain-key)# key-string CISCO1
しばらくすると、ネイバーがダウンします。理由は Auth failure(認証の失敗)です。
R3
%DUAL-5-NBRCHANGE: EIGRP-IPv4 100: Neighbor 192.168.23.2 (FastEthernet0/0.23) is
down: Auth failure
R2 の debug eigrp packets でも、キー ID 1 のダイジェストが合わず、R3 からの Hello(opcode 5)を捨てていることがわかります。
R2
R2# debug eigrp packets
(UPDATE, REQUEST, QUERY, REPLY, HELLO, IPXSAP, PROBE, ACK, STUB,
SIAQUERY, SIAREPLY)
EIGRP Packet debugging is on
R2#
EIGRP: pkt key id = 1, authentication mismatch
EIGRP: Fa0/0.23: ignored packet from 192.168.23.3, opcode = 5 (invalid authentication)
EIGRP: Sending HELLO on Fa0/0.23 - paklen 60
AS 100, Flags 0x0:(NULL), Seq 0/0 interfaceQ 0/0 iidbQ un/rely 0/0
同じ debug の Sending HELLO on Fa0/0.23 - paklen 60 は、R2 が認証付きの Hello を送っていることを示しています。認証なしでは 20(Parameters の 12 と Software Version の 8)だったので、認証 TLV の 40 バイトが増えています。
R3 のキーの文字列を CISCO に戻します。
R3
R3(config)# key chain EIGRP-KEY
R3(config-keychain)# key 1
R3(config-keychain-key)# key-string CISCO
ネイバーが確立した後に R2 で debug を見ると、キー ID 1 の MD5 認証付きのパケットを受け取っています。
R2
R2# debug eigrp packets
(UPDATE, REQUEST, QUERY, REPLY, HELLO, IPXSAP, PROBE, ACK, STUB,
SIAQUERY, SIAREPLY)
EIGRP Packet debugging is on
EIGRP: received packet with MD5 authentication, key id = 1
EIGRP: Received HELLO on Fa0/0.23 - paklen 70 nbr 192.168.23.3
AS 100, Flags 0x0:(NULL), Seq 0/0 interfaceQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
キーチェーンを適用しない場合
R2 と R3 の両方でキーチェーンの適用を外し、MD5 認証の有効化だけを残します。
R2
R2(config)# interface FastEthernet0/0.23
R2(config-subif)# no ip authentication key-chain eigrp 100 EIGRP-KEY
R3
R3(config)# interface FastEthernet0/0.23
R3(config-subif)# no ip authentication key-chain eigrp 100 EIGRP-KEY
しばらく待ってもネイバーは確立しません。debug を見ると、キーチェーンがないために、受け取ったパケットを捨てています。両側で「キーなし」にそろえても、認証は成り立ちません。
R2
R2# debug eigrp packets
(UPDATE, REQUEST, QUERY, REPLY, HELLO, IPXSAP, PROBE, ACK, STUB,
SIAQUERY, SIAREPLY)
EIGRP Packet debugging is on
EIGRP: Fa0/0.23: ignored packet from 192.168.23.3,
opcode = 5 (missing authentication or key-chain missing)
キーチェーンに複数のキーを登録すると、送信には有効なキーのうち番号が最も小さいものが使われます。キーに send-lifetime(送信に使う期間)と accept-lifetime(受信を受け付ける期間)を設定すれば、ネイバーを切らずに期限でキーを切り替えられます。期間で切り替える場合は、ルータの時刻を NTP などで合わせておく必要があります。
うまくいかないときの確認
| ログ・debug | よくある原因 | 確認すること |
|---|---|---|
| authentication mode changed | 片側だけ認証を有効にした(設定の途中) | もう一方のルータにも同じ設定が入っているか |
| Auth failure / authentication mismatch | キーの文字列が違う | 両側の key-string が同じか(大文字・小文字も区別される) |
| key-chain missing | キーチェーンを適用していない、または名前の打ち間違い | ip authentication key-chain のキーチェーン名と、key chain の名前が同じか |
まとめ
| 項目 | 内容 |
|---|---|
| キーチェーン | key chain <名前> → key <ID> → key-string <文字列> |
| 認証の有効化 | ip authentication mode eigrp <AS> md5(インタフェース) |
| キーチェーンの適用 | ip authentication key-chain eigrp <AS> <名前>(インタフェース) |
| そろえるもの | キー ID と文字列(キーチェーン名はそろえなくてよい) |
| SHA-256 を使う場合 | 名前付きモードで設定する(ネイバー認証(SHA-256)) |
コメント