概要

トランジットASでは、すべてのルータでBGPを有効化してIBGPネイバーをフルメッシュで確立する必要があります。MPLSを利用すれば、AS境界のルータでのみBGPを有効化してIBGPネイバーを確立するだけでOKです。MPLSを利用した拡張性が高いトランジットASの設定と確認を行います。

ネットワーク構成

図のAS1234をトランジットASとして設定します。それによって、AS100とAS200間の通信ができるように設定します。

図 トランジットASの構成
図 トランジットASの構成

各ルータのIPアドレスを次の表にまとめています。また、AS1234内はEIGRP AS1でルーティングを行っています。

ルータインタフェースIPアドレス
R1Fa0/0.12192.168.12.1/24
Lo01.1.1.1/32
R2Fa0/0.12192.168.12.2/24
Fa0/0.23192.168.23.2/24
Lo02.2.2.2/32
R3Fa0/0.23192.168.23.3/24
Fa0/0.34192.168.34.3/24
Lo03.3.3.3/32
R4Fa0/0.34192.168.34.4/24
Lo04.4.4.4/32
表 各ルータのIPアドレス

設定と確認

Step1. BGPネイバーの設定

AS1234をトランジットASにするために、次の図のようにBGPネイバーを設定します。AS1234では、AS境界のR1とR4でのみBGPを有効にしてIBGPネイバーとします。

図 BGPネイバー
図 BGPネイバー

R1 BGPネイバーの設定

router bgp 1234
 no synchronization
 bgp log-neighbor-changes
 neighbor 4.4.4.4 remote-as 1234
 neighbor 4.4.4.4 update-source Loopback0
 neighbor 4.4.4.4 next-hop-self
 neighbor 15.15.15.5 remote-as 100

R4 BGPネイバーの設定

router bgp 1234
 no synchronization
 bgp log-neighbor-changes
 neighbor 1.1.1.1 remote-as 1234
 neighbor 1.1.1.1 update-source Loopback0
 neighbor 1.1.1.1 next-hop-self
 neighbor 46.46.46.6 remote-as 200

R5 BGPネイバーの設定

router bgp 100
 bgp log-neighbor-changes
 network 100.100.1.0 mask 255.255.255.0
 network 100.100.2.0 mask 255.255.255.0
 neighbor 15.15.15.1 remote-as 1234

R6 BGPネイバーの設定

router bgp 200
 bgp log-neighbor-changes
 network 200.200.1.0
 network 200.200.2.0
 neighbor 46.46.46.4 remote-as 1234

Step2. AS100からAS200への通信の確認

R1とR4でno synchronizationになっているので、AS100とAS200のルート情報がお互いにAS1234を経由して交換できています。たとえば、R5でルーティングテーブルみると、次のようにAS200のルート200.200.1.0/24と200.200.2.0/24が存在しています。

R5 ルーティングテーブル

R5#show ip route 
~省略~

     100.0.0.0/24 is subnetted, 2 subnets
C       100.100.1.0 is directly connected, Loopback0
C       100.100.2.0 is directly connected, Loopback1
     4.0.0.0/32 is subnetted, 1 subnets
B    200.200.1.0/24 [20/0] via 15.15.15.1, 01:29:44
B    200.200.2.0/24 [20/0] via 15.15.15.1, 01:29:44
     15.0.0.0/24 is subnetted, 1 subnets
C       15.15.15.0 is directly connected, Ethernet0

ところが、AS100からAS200へパケットを送信すると、そのパケットは途中で破棄されます。R5で送信元IPアドレスを100.100.1.5として、200.200.1.6へPingすると次のようになります。

R5からR6へPing

R5#ping 
Protocol [ip]: 
Target IP address: 200.200.1.6
Repeat count [5]: 
Datagram size [100]: 
Timeout in seconds [2]: 
Extended commands [n]: y
Source address or interface: 100.100.1.5
~省略~
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 200.200.1.6, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)

この原因はAS1234ではR1とR4しかトランジット対象のルートを学習できていないからです。R2やR3にはトランジット対象のAS100、AS200のルート情報が存在しません。ルート情報が存在しなければ、パケットをルーティングできずに破棄します。R2でICMPパケットをデバッグするとよくわかります。

R2でICMPパケットのデバッグ

R2(config)#access-list 100 permit ip any 200.200.0.0 0.0.255.255
R2(config)#end
R2#debug ip packet 100
IP packet debugging is on for access list 100
03:41:58: IP: s=100.100.2.5 (FastEthernet0/0.12), d=200.200.2.6, len 100, unroutable
03:42:00: IP: s=100.100.2.5 (FastEthernet0/0.12), d=200.200.2.6, len 100, unroutable
03:42:02: IP: s=100.100.2.5 (FastEthernet0/0.12), d=200.200.2.6, len 100, unroutable
03:42:04: IP: s=100.100.2.5 (FastEthernet0/0.12), d=200.200.2.6, len 100, unroutable
03:42:06: IP: s=100.100.2.5 (FastEthernet0/0.12), d=200.200.2.6, len 100, unroutable

図 IPパケットをトランジットできない
図 IPパケットをトランジットできない

トランジットAS内のルータがトランジット対象のルートを学習するためには、すべてのルータでBGPを有効にして、IBGPフルメッシュの構成にする必要があります。ですが、今の状態はAS境界ルータのR1とR4のみでBGPを有効にして、IBGPネイバーとしています。

AS100-AS200間のパケットをきちんとトランジットするためには、R2やR3でもBGPを有効にしてR1~R4でフルメッシュIBGPの設定をことでも可能です。もっと簡単にAS100-AS200 間のパケットをトランジットするためには、AS1234内でMPLSによるラベルスイッチングを有効化します。

Step3. AS1234内でMPLSの有効化

AS1234をトランジットASになるようにMPLSを有効化します。

R1 MPLSを有効化

int fa 0/0.12
 mpls ip

R2 MPLSを有効化

int fa 0/0.12
 mpls ip
!
int fa 0/0.23
 mpls ip

R3 MPLSを有効化

int fa 0/0.23
 mpls ip
!
int fa 0/0.34
 mpls ip 

R4 MPLSを有効化

int fa 0/0.34
 mpls ip 

Step4. 再度、AS100からAS200への通信

AS1234でMPLSを有効化した後、再度AS100からAS200へパケットを送信します。R5で送信元IPアドレスを100.100.1.5として、200.200.1.6へPingすると次のようになります。

R5からR6へPing

R5#ping
Protocol [ip]: 
Target IP address: 200.200.1.6
Repeat count [5]: 
Datagram size [100]: 
Timeout in seconds [2]: 
Extended commands [n]: y
Source address or interface: 100.100.1.5
~省略~
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 200.200.1.6, timeout is 2 seconds:
!!!!!

AS1234内でMPLSを有効にすると、R2とR3はAS100やAS200のルートを学習していないのに、パケットを転送することができるようになります。これは、R2やR3はルーティングではなく、ラベルスイッチングによりR1からR4へとAS100-AS200間のパケットを転送しているからです。R2やR3は、ルーティングテーブルに他のASのルートを保持する必要がないので、メモリやCPUの負荷を少なくすることが可能です。

Step5. BGPルートに対するラベルの確認

R1でBGPルートに対するラベルを確認しましょう。FIBテーブル内の200.200.1.0/24の情報をみると次のようになります。

R1 FIBテーブル 200.200.1.0/24

R1#show ip cef 200.200.1.0 
200.200.1.0/24, version 19, cached adjacency 192.168.12.2
0 packets, 0 bytes
  tag information from 4.4.4.4/32, shared
    local tag: 18
    fast tag rewrite with Fa0/0.12, 192.168.12.2, tags imposed: {18}
  via 4.4.4.4, 0 dependencies, recursive
    next hop 192.168.12.2, FastEthernet0/0.12 via 4.4.4.4/32
    valid cached adjacency
    tag rewrite with Fa0/0.12, 192.168.12.2, tags imposed: {18}

すると、R1では200.200.1.0/24に対するラベル情報として、4.4.4.4/32のラベル情報を共有していることがわかります。BGPルートを利用して転送するパケットは、すべて同じようにBGPルートのネクストホップへと転送されます。そのため、BGPルートに対してはネクストホップのIPアドレスに対するラベル情報を共有しています。

R1は200.200.1.6あてのパケットを受信すると、そのパケットにラベル18を付加してFa0/0.12へと転送します。R2およびR3はFIBテーブルではなくLFIBテーブルのみを参照してラベルスイッチを行いR4まで転送します。そして、R4からR6へパケットを転送することでAS1234を経由してAS100-AS200間の通信が可能になっています。

図 MPLSによるトランジットASでのパケット転送
図 MPLSによるトランジットASでのパケット転送

このWebページで解説したMPLSによるトランジットASの構築の続きとして、トランジットAS内でルート集約をしてしまったときの影響について、動画解説をYoutubeでアップロードしています。