はじめに
このドキュメントでは、ヌルインターフェイスへのスタティックルートによってルーティングループがどのように防止されるかについて説明します。
前提条件
要件
このドキュメントに関しては個別の前提条件はありません。
使用するコンポーネント
このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づくものです。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
表記法
ドキュメントの表記法の詳細は、「シスコ テクニカル ティップスの表記法」を参照してください。
背景説明
ヌル インターフェイスは一般に、ルーティング ループを避ける目的で使用されます。たとえば 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のネットワークブロックを提供します。この例では、ユーザは/24ネットワークで192.168.0.0/16を分割し、現時点では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への集約スタティックルートの使用が現実的でない状況があります。たとえば、前述の例が次のようになっている場合には使用できません。
注:その結果、この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 に送信されます。
関連情報