内容

はじめに

前提条件

要件

使用するコンポーネント

背景説明

コマンド構文

例

パケット フロー

関連情報

はじめに

このドキュメントでは、ヌルインターフェイスへのスタティックルートによってルーティングループがどのように防止されるかについて説明します。

前提条件

要件

このドキュメントに関しては個別の前提条件はありません。

使用するコンポーネント

このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づくものです。

- Cisco IOS(R) ソフトウェア リリース 12.3

このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな（デフォルト）設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。

背景説明

ヌル インターフェイスは一般に、ルーティング ループを避ける目的で使用されます。 たとえば Enhanced Interior Gateway Routing Protocol（EIGRP）では、ルート グループを集約する際に必ず Null0 インターフェイスへのルートが作成されます。 ルーティングプロトコルが集約される場合は常に、集約内の任意のIPアドレスのトラフィックをルータが受信できることを意味します。

すべての IP アドレスが常に使用されているわけではないので、集約対象のトラフィックを受信するルータでデフォルト ルートが使用されている場合にはパケットがループする危険性があります。

コマンド構文

Null0へのスタティックルートは、仮想Cisco IOSインターフェイスであるNull0インターフェイスを指している点を除き、通常のスタティックルートです。

ip route コマンドの詳細については、『IPルーティングプロトコル非依存のコマンドA ～ R』の章の「ip route」セクションを参照してください。

次のセクションでは、ip route コマンドを使用してNull0へのスタティックルートを作成する方法の例を示しています。

例

Null0へのスタティックルートを追加する必要がある一般的なシナリオは、多数のクライアントがダイヤルインしているアクセスサーバの場合です。 このシナリオでは、ホスト ルートがアクセス サーバ ルーティング テーブルにインストールされます。

ホスト ルートのあるネットワーク全体にフラッディングを発生させずに、これらのクライアントへの到達可能性を確保するためには、ネットワーク内の他のルータにアクセス サーバをポイントする集約ルートを設定するのが一般的です。 このタイプの設定では、アクセスサーバには、アクセスサーバのNull0インターフェイスを指す同じ集約ルートが必要です。 そうでない場合、ダイヤルインクライアントに現在割り当てられていないIPアドレスに外部ホストが到達しようとするときに、ルーティングループが発生する可能性がありますが、これは集約ルートの一部です。 これは、その宛先に対する特定のホスト ルートがアクセス サーバにないために、アクセス サーバのデフォルト ルートを経由して、アクセス サーバがコア ネットワークにパケットをバウンス バックするためです。

次の例を検討します。

Network Topology

小規模なISP(ISP-R1)は、ユーザの1人に192.168.0.0/16のネットワークブロックを提供します。この例では、ユーザは192.168.0.0/16を/24ネットワークに分割し、現時点では192.168.1.0/24と192.168.2.0/24のみを使用しています。 ルータISP-R1で、ISPはユーザルータ(cust-R2)への192.168.0.0/16のスタティックルートを設定します。 次に ISP は BB-R3 というルータで表されるバックボーン ISP に接続します。 ルータ BB-R3 はデフォルト ルートを ISP-R1 に送信し、ISP-R1 から BGP 経由で 192.168.0.0/16 というネットワークを受信します。

cust-R2にはISP-R1を指すデフォルトルートが設定されているため、インターネット（バックボーンISPルータBB-R3）からユーザルータcust-R2への到達可能性が保証されます。

しかし、192.168.0.0/16 の範囲のうちで使用中ではないネットワーク ブロックにパケットの宛先が指定されていると、cust-R2 ルータは ISP-R1 へのデフォルト ルートを使用してそれらのパケットを転送します。

その結果、パケットは TTL の期限が切れるまで ISP-R1 と cust-R2 の間をループすることになります。これにより、ルータの CPU とリンクの使用率に重大な影響が及ぶ可能性があります。

未使用のIPアドレスへのこのトラフィックの発信元となる例としては、DoS攻撃、脆弱なホストを見つけるためのIPブロックのスキャンなどがあります。

関連する設定を次に示します。

cust-R2

version 12.3

!

hostname cust-R2

!

ip subnet-zero

!

interface Loopback0

ip address 10.2.2.2 255.255.255.255

!

interface Ethernet0/0

ip address 192.168.1.1 255.255.255.0

!

interface Ethernet1/0

ip address 192.168.2.1 255.255.255.0

!

interface Serial2/0

ip address 10.0.0.2 255.255.255.252

!--- This interface leads to ISP-R1.

!

ip classless

ip route 0.0.0.0 0.0.0.0 10.0.0.1

!--- Default route going to ISP-R1.

!

end

ISP-R1

version 12.3

!

hostname ISP-R1

!

ip subnet-zero

!

interface Loopback0

ip address 10.1.1.1 255.255.255.255

!

interface Serial0/0

ip address 10.0.0.1 255.255.255.252

!--- Interface to cust-R2.

!

interface Serial1/0

ip unnumbered Loopback0

!--- Interface going to BB-R3.

!

router bgp 65501

no synchronization

network 192.168.0.0 mask 255.255.0.0

!--- ISP-R1 injects 192.168.0.0/16 into BGP to

!--- advertise it to BB-R3.

neighbor 10.3.3.3 remote-as 65503

neighbor 10.3.3.3 ebgp-multihop 255

no auto-summary

!

ip classless

ip route 10.3.3.3 255.255.255.255 Serial1/0

ip route 192.168.0.0 255.255.0.0 Serial0/0

!--- The first route is necessary for the eBGP

!--- session to BB-R3 to come up.

!--- The route to 192.168.0.0/16 points towards cust-R2.

!

!

end

BB-R3

version 12.3

!

hostname BB-R3

!

ip subnet-zero

!

!

interface Loopback0

ip address 10.3.3.3 255.255.255.255

!

interface Serial2/0

ip unnumbered Loopback0

!--- This interface goes to ISP-R1.

!

router bgp 65503

no synchronization

bgp log-neighbor-changes

neighbor 10.1.1.1 remote-as 65501

neighbor 10.1.1.1 ebgp-multihop 255

neighbor 10.1.1.1 default-originate

!--- BB-R3 injects a default route into BGP and

!--- sends it to ISP-R1.

no auto-summary

!

ip classless

ip route 10.1.1.1 255.255.255.255 Serial2/0

!--- This route points to ISP-R1 and is

!--- used to establish the eBGP peering.

!

end

パケット フロー

注：パケットフローをよりわかりやすく示すために、一部の debug コマンド、具体的には debug ip packet と debug ip icmpがルータで有効にされています。その影響を十分に理解しているのでない限り、実稼働環境ではこれらのコマンドを有効にしないでください。

BB-R3#ping ip 192.168.20.1 repeat 1

Type escape sequence to abort.

Sending 1, 100-byte ICMP Echos to 192.168.20.1, timeout is 2 seconds:

*Oct  6 09:36:45.355: IP: tableid=0, s=10.3.3.3 (local), d=192.168.20.1 (Serial2/0), routed via FIB

*Oct  6 09:36:45.355: IP: s=10.3.3.3 (local), d=192.168.20.1 (Serial2/0), len 100, sending.

Success rate is 0 percent (0/1)

BB-R3#

*Oct  6 09:36:50.943: ICMP: time exceeded rcvd from 10.0.0.1

cust-R2 で使用中ではない 192.168.0.0/16 のブロック内の IP アドレスに BB-R3 が 1 つの ICMP 要求を送信します。

BB-R3 が ICMP 時間超過を ISP-R1 から返信として受信します。

ISP-R1 では次のように処理されます。

18:50:22: IP: tableid=0, s=10.3.3.3 (Serial1/0), d=192.168.20.1 (Serial0/0), routed via RIB

18:50:22: IP: s=10.3.3.3 (Serial1/0), d=192.168.20.1 (Serial0/0), g=192.168.20.1, len 100, forward

18:50:22: IP: tableid=0, s=10.3.3.3 (Serial0/0), d=192.168.20.1 (Serial0/0), routed via RIB

18:50:22: IP: s=10.3.3.3 (Serial0/0), d=192.168.20.1 (Serial0/0), g=192.168.20.1, len 100, forward

18:50:22: IP: tableid=0, s=10.3.3.3 (Serial0/0), d=192.168.20.1 (Serial0/0), routed via RIB

18:50:22: IP: s=10.3.3.3 (Serial0/0), d=192.168.20.1 (Serial0/0), g=192.168.20.1, len 100, forward

18:50:22: IP: tableid=0, s=10.3.3.3 (Serial0/0), d=192.168.20.1 (Serial0/0), routed via RIB

最初のパケットはBB-R3からISP-R1のserial1/0で受信され、予期したとおりにserial0/0のcust-R2に転送されます。

同じパケットが ISP-R1 のシリアル 0/0 に返送され、次のようなルートがあるので、すぐに同じインターフェイスから cust-R2 に送出されます。

ISP-R1#show ip route 192.168.20.1

Routing entry for 192.168.0.0/16, supernet

Known via "static", distance 1, metric 0 (connected)

Advertised by bgp 65501

Routing Descriptor Blocks:

* directly connected, via Serial0/0

Route metric is 0, traffic share count is 1

このトラフィックを ISP-R1 に返送する cust-R2 では何が起こっているのでしょうか。

cust-R2 では次のように処理されます。

*Oct  6 09:41:43.495: IP: s=10.3.3.3 (Serial2/0), d=192.168.20.1 (Serial2/0), g=10.0.0.1, len 100, forward

*Oct  6 09:41:43.515: IP: tableid=0, s=10.3.3.3 (Serial2/0), d=192.168.20.1 (Serial2/0), routed via RIB

*Oct  6 09:41:43.515: IP: s=10.3.3.3 (Serial2/0), d=192.168.20.1 (Serial2/0), g=10.0.0.1, len 100, forward

*Oct  6 09:41:43.555: IP: tableid=0, s=10.3.3.3 (Serial2/0), d=192.168.20.1 (Serial2/0), routed via RIB

このルートにより、cust-R2がこれらのパケットをISP-R1に返信していることがわかります。

cust-R2#show ip route 192.168.20.1 longer-prefixes

Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP

D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area

N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2

E1 - OSPF external type 1, E2 - OSPF external type 2

i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2

ia - IS-IS inter area, * - candidate default, U - per-user static route

o - ODR, P - periodic downloaded static route

Gateway of last resort is 10.0.0.1 to network 0.0.0.0

cust-R2#

ルータcust-R2には192.168.20.1へのルートがありません。これは、このネットワークがユーザネットワークで使用されていないためです。192.168.20.1への最適なルートは、ISP-R1をポイントするデフォルトルートです。その結果、TTLが期限切れになるまで、ISP-R1とcust-R2の間でパケットループが発生します。

ICMP要求が使用中のネットワーク内のIPアドレスに送信された場合、この結果は発生しません。

たとえば、cust-R2 に直接接続されている 192.168.1.x に対する ICMP 要求であれば、ループは発生していませんでした。

cust-R2#show ip route 192.168.1.1

Routing entry for 192.168.1.0/24

Known via "connected", distance 0, metric 0 (connected, via interface)

Routing Descriptor Blocks:

* directly connected, via Ethernet0/0

Route metric is 0, traffic share count is 1

この問題は、cust-R2 で 192.168.0.0/16 を Null0 へのスタティック ルートに設定すれば解決します。

cust-R2#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

cust-R2(config)#ip route 192.168.0.0 255.255.0.0 Null0

cust-R2(config)#end

cust-R2#

*Oct  6 09:53:18.015: %SYS-5-CONFIG_I: Configured from console by console

cust-R2#show ip route 192.168.20.1

Routing entry for 192.168.0.0/16, supernet

Known via "static", distance 1, metric 0 (connected)

Routing Descriptor Blocks:

* directly connected, via Null0

Route metric is 0, traffic share count is 1

ここでBB-R3から192.168.20.1にICMP要求を再送信すると、cust-R2はこのトラフィックをNull0に送信し、これによりICMP到達不能メッセージが生成されます。

BB-R3#ping ip 192.168.20.1 repeat 1

Type escape sequence to abort.

Sending 1, 100-byte ICMP Echos to 192.168.20.1, timeout is 2 seconds:

U

Success rate is 0 percent (0/1)

BB-R3#

*Oct  6 09:54:33.051: ICMP: dst (10.3.3.3) host unreachable rcv from 10.0.0.2

Null0への集約スタティックルートを使用できない状況もあります。たとえば、前述の例が次のようになっている場合には使用できません。

- ISDN 経由で cust-R2 にダイヤル接続する別のルータに 192.168.1.0/24 のブロックが接続されている場合

- ISP-R1 で 192.168.0.0/16 が割り当てられておらず、192.168.1.0/24 だけが割り当てられている場合

- ISDN リンクの接続解除が発生する場合

注：その結果、このIPアドレスブロックに到達しようとする転送中のパケットやアプリケーションによって、前述と同じルーティングループが発生することになります。

注：このルーティングループを修正するには、ip route 192.168.1.0 255.255.255.0 Null0 200コマンドを使用して、フローティングスタティックルートを192.168.1.0/24に対してNull0に設定する必要があります。コマンド内の 200 はアドミニストレーティブ ディスタンスです。詳細については、『アドミニストレーティブディスタンスの説明』を参照してください。

注：どのルーティングプロトコルよりも高いアドミニストレーティブディスタンスを使用しているため、ISDNリンク経由の192.168.1.0/24へのルートが非アクティブになると、cust-R2はフローティングスタティックルートをインストールします。そのため、ISDN リンクがアクティブになるまでは、パケットは Null0 に送信されます。

関連情報

- シスコのテクニカルサポートとダウンロード