MPLSの基本
・MPLSネットワークを構築する
・各ルーターに,MPLSのラベル情報が配布されていることを確認する
ネットワーク構成(画像を別ウインドウで表示)
RouterAのコンフィグ
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname RouterA
!
ip cef ←MPLSを使うときはCEFを有効にする
!
interface Serial1/0
ip address 192.1.1.2 255.255.255.0
serial restart-delay 0
no dce-terminal-timing-enable
!
interface Serial1/1
ip address 193.1.1.1 255.255.255.0
mpls ip ←このインタフェースでMPLSを有効にする
serial restart-delay 0
no dce-terminal-timing-enable
!
router ospf 1
log-adjacency-changes
network 0.0.0.0 255.255.255.255 area 0
!
line con 0
stopbits 1
line aux 0
stopbits 1
line vty 0 4
login
!
end
RouterBのコンフィグ
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname RouterB
!
ip cef ←MPLSを使うときはCEFを有効にする
!
interface Serial1/0
ip address 193.1.1.2 255.255.255.0
mpls ip ←このインタフェースでMPLSを有効にする
serial restart-delay 0
no dce-terminal-timing-enable
!
interface Serial1/1
ip address 194.1.1.1 255.255.255.0
mpls ip ←このインタフェースでMPLSを有効にする
serial restart-delay 0
no dce-terminal-timing-enable
!
router ospf 1
log-adjacency-changes
network 0.0.0.0 255.255.255.255 area 0
!
line con 0
stopbits 1
line aux 0
stopbits 1
line vty 0 4
login
!
end
RouterCのコンフィグ
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname RouterC
!
ip cef ←MPLSを使うときはCEFを有効にする
!
interface Serial1/0
ip address 194.1.1.2 255.255.255.0
mpls ip ←このインタフェースでMPLSを有効にする
serial restart-delay 0
no dce-terminal-timing-enable
!
interface Serial1/1
ip address 195.1.1.1 255.255.255.0
mpls ip ←このインタフェースでMPLSを有効にする
serial restart-delay 0
no dce-terminal-timing-enable
!
router ospf 1
log-adjacency-changes
network 0.0.0.0 255.255.255.255 area 0
!
line con 0
stopbits 1
line aux 0
stopbits 1
line vty 0 4
login
!
end
RouterDのコンフィグ
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname RouterD
!
ip cef ←MPLSを使うときはCEFを有効にする
!
interface Serial1/0
ip address 195.1.1.2 255.255.255.0
mpls ip ←このインタフェースでMPLSを有効にする
serial restart-delay 0
no dce-terminal-timing-enable
!
interface Serial1/1
ip address 196.1.1.1 255.255.255.0
mpls ip
serial restart-delay 0
no dce-terminal-timing-enable
!
router ospf 1
log-adjacency-changes
network 0.0.0.0 255.255.255.255 area 0
!
line con 0
stopbits 1
line aux 0
stopbits 1
line vty 0 4
login
!
end
CE_A1のコンフィグ
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname CE_A1
!
interface Serial1/0
ip address 192.1.1.1 255.255.255.0
serial restart-delay 0
no dce-terminal-timing-enable
!
ip route 0.0.0.0 0.0.0.0 192.1.1.2 ←デフォルトルートをMPLS網に向ける
no ip http server
no ip http secure-server
!
line con 0
stopbits 1
line aux 0
stopbits 1
line vty 0 4
login
!
end
CE_A2のコンフィグ
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname CE_A2
!
interface Serial1/0
ip address 196.1.1.2 255.255.255.0
serial restart-delay 0
no dce-terminal-timing-enable
!
ip route 0.0.0.0 0.0.0.0 196.1.1.1 ←デフォルトルートをMPLS網に向ける
no ip http server
no ip http secure-server
!
line con 0
stopbits 1
line aux 0
stopbits 1
line vty 0 4
login
!
end
確認
MPLSは,IP-VPNサービスで使われているラベル転送プロトコルです。
IPパケットにラベルを付け,MPLS対応ルーターはそのラベルを見てパケットを転送します。
MPLSネットワーク上でラベル付きのパケットを転送できようにしてみましょう。

●MPLSの設定と動作のしくみ
MPLSネットワークの構築は簡単です。
最初に,MPLSを動作するルーターでCEF(cisco express fowarding)を有効にします。
CEFを有効にする理由は,MPLSではFIB(fowarding information base)と呼ばれるパケット転送テーブルを基に,ラベル転送用のテーブルを作るからです。
そして,MPLSを動作させたいインタフェースでmpls ipコマンドを入力します。

RouterA(config)#ip cef
RouterA(config)#interface serial 1/0
RouterA(config-if)#mpls ip

MPLSで通信できるようになる流れは以下です。
■MPLSの動作の流れ
1.ルーティング・テーブルからFIBを作る(CEFを有効にすると実行される)
2.FIBに記載されているネットワークに対応するラベルを作り,そのラベルをLDP(label distribution protocol)でネイバーに通知する
3.全ネイバーからLDPで集めたラベル情報をLIB(label information base)に集める
4.LIBから必要な情報を抽出してLFIB(label fowarding information base)に記載する
5.LFIBを使ってラベル情報を参照しながらパケットを転送する

ちなみに,MPLSではルーターの設置場所ごとに名前が付いており,以下のようになっています。
■MPLSルーターの名称
・PE(プロバイダエッジ)…顧客とつながるルーター…RouterA,RouterD
・P(プロバイダ)…MPLSネットワークの中核ルーター…RouterB,RouterC
・CE(カスタマエッジ)…MPLSネットワークとつながる顧客のルーター…CE_A1,CE_A2

●設定の確認
今回は,RouterA〜RouterDの4台のルーターでMPLSを動作させます。
4台すべてのルーターは,OSPFによってMPLSネットワーク内の経路情報を把握しています。

RouterAでMPLSの動作状況を見てみましょう。
show mpls interfaceで,MPLSが稼働しているインタフェースを確認できます。

RouterA#show mpls interfaces
Interface       IP      Tunnel  Operational
Serial1/1       Yes (ldp)   No    Yes


Selial1/1でMPLSが動作しているのがわかります。
また,ラベル配布プロトコルとしてLDPが動作していることもわかります(上の赤字)。
MPLSネットワーク内では,パケットにラベルを付け,そのラベル情報を基にパケットを転送します。
LDP(label distribution protocol)は,「ラベルにどのような値を付けるか」という情報を配布するプロトコルです。
ラベル配布プロトコルには,LDPのほかにシスコ独自のTDP(tag distibution protovol)があります。
IOS12.4(3)以降では,LDPがデフォルトで動作するようになっています。

ルーターはLDPを使って隣接ルーター(ネイバー)とラベル情報を交換します。
RouterAでラベルを交換しているネイバーを確認してみましょう。

RouterA#show mpls ldp neighbor
  Peer LDP Ident: 194.1.1.1:0; Local LDP Ident 193.1.1.1:0
    TCP connection: 194.1.1.1.18089 - 193.1.1.1.646
    State: Oper; Msgs sent/rcvd: 30/29; Downstream
    Up time: 00:19:01
    LDP discovery sources:
     Serial1/1, Src IP addr: 193.1.1.2
    Addresses bound to peer LDP Ident:
     194.1.1.1    193.1.1.2


表示された「194.1.1.1」というのは,RouterBのルーターIDです。
RouterAはRouterBとラベル情報をやりとりしていることがわかります。

ルーターがやりとりしたラベル情報は,LIB(label information base)と呼ばれるデータベースに記録されます。
RouterAのLIBを確認してみましょう。

RouterA#show mpls ldp bindings
 tib entry: 192.1.1.0/24, rev 2
    local binding: tag: imp-null
    remote binding: tsr: 194.1.1.1:0, tag: 17
 tib entry: 193.1.1.0/24, rev 4
    local binding: tag: imp-null
    remote binding: tsr: 194.1.1.1:0, tag: imp-null
 tib entry: 194.1.1.0/24, rev 6
    local binding: tag: 16
    remote binding: tsr: 194.1.1.1:0, tag: imp-null
 tib entry: 195.1.1.0/24, rev 8
    local binding: tag: 17
    remote binding: tsr: 194.1.1.1:0, tag: 16
 tib entry: 196.1.1.0/24, rev 10
    local binding: tag: 18
    remote binding: tsr: 194.1.1.1:0, tag: 18


192.1.1.1.0/24〜196.1.1.0/24という五つのエントリができているのがわかります。
一番下の196.1.1.1.0/24のエントリに注目してみましょう(上の赤字)。
「local binding」は,「自分が決めたラベル」です。
つまり,「196.1.1.1.0/24あてのパケットはラベルの値を18にして転送する」という意味で,この情報をネイバーのRouterBへ通知しているわけです。
一方の「remote binding」は,「相手から通知されたラベル」です。
つまり,RouterB(ルーターIDが194.1.1.1)から,「196.1.1.1.0/24あてのパケットはラベルの値を18にして転送する」という情報を受け取っているわけです。

MPLS対応ルーターは,ルーティングテーブル(FIB)に存在するエントリごとにラベルの値を決めます。
そして,そのラベルの値をネイバーに通知し合います。
つまり,RouterAのLIB情報から,RouterBと以下の情報をやりとりしたことがわかります(下の図)。
ちなみに「imp-null」というのは,「ラベルなし」という意味です。

 RouteAのLIB情報からわかるラベル配布の様子

LIBは,全ネイバーから受け取ったラベル情報を保存するデータベースの役割を果たします。
そして,ルーターが実際のパケット転送時に使うのが,LFIB(label forwarding information base)です。
RouterAのLFIBを見てみましょう。

RouterA#show mpls forwarding-table
Local Outgoing  Prefix      Bytes tag Outgoing  Next Hop
tag   tag or VC  or Tunnel Id   switched  interface
16   Pop tag   194.1.1.0/24   0      Se1/1   point2point
17   16      195.1.1.0/24   0      Se1/1   point2point
18   18      196.1.1.0/24   0      Se1/1   point2point


三つのエントリがあります。
上からそれぞれ,
「194.1.1.0/24」へパケットを送るときには「タグを取って(Popして)」転送,
「195.1.1.0/24」へパケットを送るときには「タグの値を16にして」転送,
「196.1.1.0/24」へパケットを送るときには「タグの値を18にして」転送,
という転送テーブルが作られています。

RouterB〜RouterDのLIBとLFIBも確認しておきましょう。
RouterBのネイバーは,RouterAとRouterCの二つなので,各エントリにremote bindingが二つあります。
そのうちの196.1.1.0/24のエントリに注目してみましょう(下の赤字)。
196.1.1.0/24あてのラベル情報は,RouterC(ルーターIDが195.1.1.1)とRouterA(ルーターIDが193.1.1.1)の二つから受信しています。
どちらを採用するかというと,FIB(ルーティング・テーブル)に掲載されているネクストホップのルーターから通知されたラベル情報を採用します。
この場合,RouterBの196.1.1.0/24のネクストホップはRouterCのため,RouterCが通知した方のラベル情報を採用するわけです。

RouterB#show mpls ldp bindings
 tib entry: 192.1.1.0/24, rev 8
    local binding: tag: 17
    remote binding: tsr: 195.1.1.1:0, tag: 16
    remote binding: tsr: 193.1.1.1:0, tag: imp-null
 tib entry: 193.1.1.0/24, rev 2
    local binding: tag: imp-null
    remote binding: tsr: 195.1.1.1:0, tag: 17
    remote binding: tsr: 193.1.1.1:0, tag: imp-null
 tib entry: 194.1.1.0/24, rev 4
    local binding: tag: imp-null
    remote binding: tsr: 195.1.1.1:0, tag: imp-null
    remote binding: tsr: 193.1.1.1:0, tag: 16
 tib entry: 195.1.1.0/24, rev 6
    local binding: tag: 16
    remote binding: tsr: 195.1.1.1:0, tag: imp-null
    remote binding: tsr: 193.1.1.1:0, tag: 17
 tib entry: 196.1.1.0/24, rev 10
    local binding: tag: 18
    remote binding: tsr: 195.1.1.1:0, tag: 18
    remote binding: tsr: 193.1.1.1:0, tag: 18


このことを確認するために,RouterBのLFIBを見てみましょう。
一番下のエントリが196.1.1.0/24あてのラベル情報です。
送出インタフェース(Outgoing interface)が「Se1/1」となっており,RouterCが通知したラベル情報が採用されていることがわかります。

RouterB#show mpls forwarding-table
Local Outgoing  Prefix      Bytes tag Outgoing  Next Hop
tag  tag or VC  or Tunnel Id   switched  interface
16   Pop tag   195.1.1.0/24   1040    Se1/1   point2point
17   Pop tag   192.1.1.0/24   0      Se1/0   point2point
18   18      196.1.1.0/24   1620    Se1/1   point2point


この一番下の196.1.1.0/24のエントリをもう少し詳しく見てみます。
一番左の項目の「Local tag」は,自分が通知したラベル情報で,「18」になっています。
また,左から2番目の「Outgoing tag」は,ラベルを付け替えて送り出す値で,これも「18」になっています。
RouterBはこれらの情報を見て,「18のラベルが付いたパケットが入ってきたら,18に付け替えて送り出せば,最終的に196.1.1.0/24に到達する」と判断するわけです。

RouterCのLIBも見ておきましょう。
こちらも,ネイバーが二つ(RouterBとRouterD)なので,remote bindingが二つあります。

RouterC#show mpls ldp bindings
 tib entry: 192.1.1.0/24, rev 7
    local binding: tag: 16
    remote binding: tsr: 194.1.1.1:0, tag: 17
    remote binding: tsr: 196.1.1.1:0, tag: 16
 tib entry: 193.1.1.0/24, rev 8
    local binding: tag: 17
    remote binding: tsr: 194.1.1.1:0, tag: imp-null
    remote binding: tsr: 196.1.1.1:0, tag: 17
 tib entry: 194.1.1.0/24, rev 2
    local binding: tag: imp-null
    remote binding: tsr: 194.1.1.1:0, tag: imp-null
    remote binding: tsr: 196.1.1.1:0, tag: 18
 tib entry: 195.1.1.0/24, rev 4
    local binding: tag: imp-null
    remote binding: tsr: 194.1.1.1:0, tag: 16
    remote binding: tsr: 196.1.1.1:0, tag: imp-null
 tib entry: 196.1.1.0/24, rev 10
    local binding: tag: 18
    remote binding: tsr: 194.1.1.1:0, tag: 18
    remote binding: tsr: 196.1.1.1:0, tag: imp-null


RouterCのLFIBは以下です。

RouterC#show mpls forwarding-table
Local Outgoing  Prefix      Bytes tag Outgoing  Next Hop
tag  tag or VC  or Tunnel Id   switched  interface
16   17      192.1.1.0/24   1080    Se1/0   point2point
17   Pop tag   193.1.1.0/24   520     Se1/0   point2point
18   Pop tag   196.1.1.0/24   1560    Se1/1   point2point


RouterDのLIBとLFIBも見ておきましょう。
RouterDのLFIBは以下です。

RouterD#show mpls ldp bindings
 tib entry: 192.1.1.0/24, rev 9
    local binding: tag: 16
    remote binding: tsr: 195.1.1.1:0, tag: 16
 tib entry: 193.1.1.0/24, rev 11
    local binding: tag: 17
    remote binding: tsr: 195.1.1.1:0, tag: 17
 tib entry: 194.1.1.0/24, rev 13
    local binding: tag: 18
    remote binding: tsr: 195.1.1.1:0, tag: imp-null
 tib entry: 195.1.1.0/24, rev 2
    local binding: tag: imp-null
    remote binding: tsr: 195.1.1.1:0, tag: imp-null
 tib entry: 196.1.1.0/24, rev 7
    local binding: tag: imp-null
    remote binding: tsr: 195.1.1.1:0, tag: 18


RouterDのLFIBは以下です。

RouterD#show mpls forwarding-table
Local Outgoing  Prefix      Bytes tag Outgoing  Next Hop
tag  tag or VC  or Tunnel Id   switched  interface
16   16      192.1.1.0/24   0      Se1/0   point2point
17   17      193.1.1.0/24   0      Se1/0   point2point
18   Pop tag   194.1.1.0/24   0      Se1/0   point2point


そして,各ルーターのlocal bindingの値を図にしたものが,以下の図です。
つまりこれが,各ルーターが配布したラベル情報というわけです。

 各ルーターのラベル配布の様子

各ルーターのLFIBにある196.1.1.0/24あてのラベル情報だけを取り出したのが下の図です。
この例では,RouterAとRouterBのラベル情報は18で同じです。
というのも,ラベル情報は個々のルーターで一意に決めるものなので,このように同じになるケースもあるのです。
ただ,同じになったとしても,ラベルを付け替える作業は実行します(このケースでは「18」から「18」に付け替える)。
また,196.1.1.0/24あてのパケットの流れも示します。

 196.1.1.0/24あての各ルーターのLFIBと,そのLFIB情報に基づくパケットの流れ

図を見ると,出口の一歩手前であるRouterCでラベルを外して(POPして)います。
これは,シスコ・ルーターではデフォルトでPHP(penultimate hop popping)という機能が有効になっているからです。
というのも,RouterDはMPLSネットワークの出口に位置していて他のルーターにラベル付きパケットを送るわけではないので,パケットのラベル情報を見る必要はありません。
そこで,MPLSネットワークの出口のひとつ手前のルーターでラベルを取ってしまうわけです。

●動作の確認
では,通信をした際のルーターの動作を確認してみましょう。
RouterAにつないだCE_A1ルーターから,RouterDにつないだCE_A2ルーターにpingを打ってみます。
ちなみに,CE_A1とCE_A2のいずれも,MPLSネットワークの入り口のルーターにデフォルト・ルートを向けています。

それでは,CE_A1からCE_A2にpingを打ちます。

CE_A1#ping 196.1.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 196.1.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 52/116/192 ms


成功しました。
きちんと通信できているようです。

RouterBにdebugコマンドを入力して,RouterBを通過するパケットを見てみましょう。

RouterB#debug mpls packets
MPLS packet debugging is on
RouterB#
*Jun 30 23:49:02.683: MPLS: Se1/0: recvd: CoS=0, TTL=254, Label(s)=18
*Jun 30 23:49:02.687: MPLS: Se1/1: xmit: CoS=0, TTL=253,
Label(s)=18
*Jun 30 23:49:02.827: MPLS: Se1/1: recvd: CoS=0, TTL=253,
Label(s)=16
*Jun 30 23:49:02.827: MPLS: Se1/0: xmit:
(no label)
*Jun 30 23:49:02.935: MPLS: Se1/0: recvd: CoS=0, TTL=254, Label(s)=18
*Jun 30 23:49:02.935: MPLS: Se1/1: xmit: CoS=0, TTL=253, Label(s)=18
*Jun 30 23:49:02.975: MPLS: Se1/1: recvd: CoS=0, TTL=253, Label(s)=16
*Jun 30 23:49:02.975: MPLS: Se1/0: xmit: (no label)
*Jun 30 23:49:03.019: MPLS: Se1/0: recvd: CoS=0, TTL=254, Label(s)=18
*Jun 30 23:49:03.023: MPLS: Se1/1: xmit: CoS=0, TTL=253, Label(s)=18
*Jun 30 23:49:03.211: MPLS: Se1/1: recvd: CoS=0, TTL=253, Label(s)=16
*Jun 30 23:49:03.215: MPLS: Se1/0: xmit: (no label)
*Jun 30 23:49:03.263: MPLS: Se1/0: recvd: CoS=0, TTL=254, Label(s)=18
*Jun 30 23:49:03.263: MPLS: Se1/1: xmit: CoS=0, TTL=253, Label(s)=18
*Jun 30 23:49:03.351: MPLS: Se1/1: recvd: CoS=0, TTL=253, Label(s)=16
*Jun 30 23:49:03.351: MPLS: Se1/0: xmit: (no label)
*Jun 30 23:49:03.463: MPLS: Se1/0: recvd: CoS=0, TTL=254, Label(s)=18
*Jun 30 23:49:03.463: MPLS: Se1/1: xmit: CoS=0, TTL=253, Label(s)=18
*Jun 30 23:49:03.679: MPLS: Se1/1: recvd: CoS=0, TTL=253, Label(s)=16
*Jun 30 23:49:03.679: MPLS: Se1/0: xmit: (no label)


最初から4行目までが,pingの一往復のやりとりです。
最初から順番に,
Se1/0からラベル18のパケットを受信
Se1/1にラベル18のパケットを送信
Se1/1からラベル16のパケットを受信
Se1/0にラベルなしのパケットを送信
となっています。

LDPでやりとりして決めたラベル付きのパケットをやりとりしているのがわかります。


●OSPF を使用した基本的なMPLSの設定
http://www.cisco.com/japanese/warp/public/3/jp/service/tac/105/mplsospf-j.shtml


■Dynamipsでの検証
このラボ・シナリオはDynamipsで検証しました。
Dynagenのコンフィグファイルは以下です。

# MPLS lab

autostart = False

[localhost]
[[7200]]
image = C:\Program Files\Dynamips\images\c7200-**********.bin
npe = npe-400
ram = 160
idlepc = 0x********

[[ROUTER CEA1]]
S1/0 = R1 S1/0
model = 7200

[[ROUTER R1]]
S1/1 = R2 S1/0
model = 7200

[[ROUTER R2]]
S1/1 = R3 S1/0
model = 7200

[[ROUTER R3]]
S1/1 = R4 S1/0
model = 7200

[[ROUTER R4]]
S1/1 = CEA2 S1/0
model = 7200

[[ROUTER CEA2]]
model = 7200

MPLSラボ
MPLSの基本
MPLSを使ったVPN(スタティック・ルーティング)
MPLSを使ったVPN(OSPF)