EIGRP の Hello パケットは、通常はマルチキャストアドレス 224.0.0.10 宛てに送られます。neighbor コマンドでネイバーを指定すると、そのインタフェースでは Hello をユニキャストで、指定した相手にだけ送るようになります。この記事では、片側だけに設定したときと両側に設定したときの動きを、ログ・debug・パケットキャプチャで確かめます。
- 既定の状態で Hello がマルチキャストで送られていること
- 片側だけに
neighborを設定するとネイバーがダウンする理由 - 両側に設定してユニキャストでネイバーになったときの Hello の中身
neighbor コマンドを使う場面
neighbor コマンドで指定したネイバーは「スタティックネイバー」と呼ばれます。主に次のような場面で使います。
- フレームリレーなど、マルチキャストを転送できない、または転送させたくない回線でネイバーを張るとき
- 同じセグメントに複数のルータがいるが、決まった相手とだけネイバーになりたいとき
スタティックネイバーを設定したインタフェースでは、EIGRP はマルチキャストを使わなくなります。そのため、同じインタフェースの先にいる EIGRP ルータとは、すべて neighbor コマンドでネイバーを指定する必要があります。
検証構成
R2 と R3 が 192.168.23.0/24 でつながり、EIGRP AS 100 でネイバーになっています。基本設定は EIGRP の基本設定とネイバー・ルーティングテーブルの確認 を参照してください。
R2
R2(config)# router eigrp 100 R2(config-router)# network 2.2.2.2 0.0.0.0 R2(config-router)# network 192.168.23.0
R3
R3(config)# router eigrp 100 R3(config-router)# network 3.3.3.3 0.0.0.0 R3(config-router)# network 192.168.23.0
既定の Hello を確認する
この状態で R2 が送る Hello をキャプチャすると、宛先は 224.0.0.10 のマルチキャストです。
この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
1▸ Internet Protocol Version 4, Src: 192.168.23.2, Dst: 224.0.0.10▾ Cisco EIGRP Version: 2 Opcode: Hello (5) Checksum: 0xef6e [correct] [Checksum Status: Good] ▸ Flags: 0x00000000 Sequence: 0 Acknowledge: 0 Virtual Router ID: 0 (Address-Family) Autonomous System: 100 ▸ Parameters ▸ Software Version: EIGRP=10.0, TLV=2.0
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Dst: 224.0.0.10 | EIGRP のマルチキャストアドレス宛て。同じセグメントの EIGRP ルータすべてが受け取る |
R2 だけに neighbor を設定する
R2 で、R3 のアドレスと、R3 につながるインタフェースを指定します。インタフェースの指定は省略できません。
R2
R2(config)# router eigrp 100 R2(config-router)# neighbor 192.168.23.3 fastEthernet 0/0.23 %DUAL-5-NBRCHANGE: EIGRP-IPv4 100: Neighbor 192.168.23.3 (FastEthernet0/0.23) is down: Static peer replaces multicast
設定した直後に、R3 とのネイバーがダウンします。理由の Static peer replaces multicast は、このインタフェースではマルチキャストのネイバーをやめて、スタティックネイバーに切り替えたことを示しています。
debug eigrp packets:R3 が受け取った Hello
R3 で debug eigrp packets を有効にすると、R2 から Hello は届いていますが、ユニキャストなので無視されています。
R3
R3# debug eigrp packets
(UPDATE, REQUEST, QUERY, REPLY, HELLO, IPXSAP, PROBE, ACK, STUB,
SIAQUERY, SIAREPLY)
EIGRP Packet debugging is on
R3#
*Sep 22 06:38:19.527: EIGRP: Received HELLO on Fa0/0.23 - paklen 20 nbr 192.168.23.2
*Sep 22 06:38:19.527: AS 100, Flags 0x0:(NULL), Seq 0/0 interfaceQ 0/0
*Sep 22 06:38:19.527: {type = 1, length = 12}
R3#
*Sep 22 06:38:19.527: {vector = {
*Sep 22 06:38:19.527: {01000100 0000000F}
*Sep 22 06:38:19.527: }
*Sep 22 06:38:19.527: {type = 4, length = 8}
*Sep 22 06:38:19.527: {vector = {
*Sep 22 06:38:19.527: {0A000200}
*Sep 22 06:38:19.527: }
*Sep 22 06:38:19.527: EIGRP: Ignore unicast Hello from FastEthernet0/0.23 192.168.23.2
| 表示 | 意味 |
|---|---|
| Received HELLO … nbr 192.168.23.2 | R2 からの Hello を Fa0/0.23 で受け取った |
| {type = 1, length = 12} | Parameters の TLV。値の 01000100 0000000F は K1〜K6(1、0、1、0、0、0)とホールドタイム 0x000F(15秒) |
| {type = 4, length = 8} | Software Version の TLV。0A000200 は EIGRP 10.0、TLV 2.0 |
| Ignore unicast Hello | R3 には R2 がスタティックネイバーとして設定されていないので、ユニキャストの Hello を無視した |
R2 は R3 にユニキャストでしか Hello を送らず、R3 からのマルチキャストの Hello も受け付けません。R3 は R2 からのユニキャストの Hello を無視します。お互いに相手の Hello を使えないため、ネイバーになれません(図1の②)。
R3 にも neighbor を設定する
R3 でも同じように、R2 のアドレスとインタフェースを指定します。
R3
R3(config)# router eigrp 100 R3(config-router)# neighbor 192.168.23.2 fastEthernet 0/0.23 %DUAL-5-NBRCHANGE: EIGRP-IPv4 100: Neighbor 192.168.23.2 (FastEthernet0/0.23) is up: new adjacency
両側がスタティックネイバーになり、ネイバーが確立しました。このとき R2 が送る Hello をキャプチャすると、宛先は R3 の 192.168.23.3 で、TTL は 1 になっています。
1▾ Internet Protocol Version 4, Src: 192.168.23.2, Dst: 192.168.23.3 0100 .... = Version: 4 .... 0101 = Header Length: 20 bytes (5) ▸ Differentiated Services Field: 0xc0 (DSCP: CS6, ECN: Not-ECT) Total Length: 60 Identification: 0x0000 (0) ▸ Flags: 0x0000 Fragment offset: 02 ▸ Time to live: 13 Protocol: EIGRP (88) Header checksum: 0x0955 [validation disabled] [Header checksum status: Unverified] Source: 192.168.23.2 Destination: 192.168.23.3▾ Cisco EIGRP Version: 2 Opcode: Hello (5) Checksum: 0xef6e [correct] [Checksum Status: Good] ▸ Flags: 0x00000000 Sequence: 0 Acknowledge: 0 Virtual Router ID: 0 (Address-Family) Autonomous System: 100 ▸ Parameters ▸ Software Version: EIGRP=10.0, TLV=2.0
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Dst: 192.168.23.3 | 宛先が R3 のユニキャストアドレスになった |
| 2 | Time to live: 1 | TTL 1。隣のルータを越えて転送されない |
| 3 | Protocol: EIGRP (88) | EIGRP は TCP や UDP を使わず、IP の上で直接動く(プロトコル番号 88) |
うまくいかないときの確認
| 状態 | よくある原因 | 確認すること |
|---|---|---|
| neighbor を設定したらネイバーが落ちた | 相手側に neighbor を設定していない | 相手の debug eigrp packets に Ignore unicast Hello が出ていないか |
| 同じセグメントの別のルータとネイバーが切れた | そのインタフェースのマルチキャストが止まった | 同じインタフェースの先にいる EIGRP ルータすべてを neighbor で指定しているか |
| neighbor がエラーになる | インタフェースの指定がない、またはアドレスがそのインタフェースのネットワークにない | ネイバーのアドレスと、指定したインタフェースのアドレスが同じネットワークか |
まとめ
| 項目 | 内容 |
|---|---|
| コマンド | neighbor <ネイバーのアドレス> <インタフェース>(router eigrp の中) |
| Hello の宛先 | 既定は 224.0.0.10。neighbor を設定すると、指定した相手へのユニキャストになる |
| 設定の範囲 | neighbor を設定したインタフェースでは、マルチキャストのネイバーは張れなくなる |
| 必要な設定 | ネイバーになる両側に neighbor を設定する |
コメント