参考資料・時間
資料:
CCIE Enterprise Infrastructure Foundation lab
MPLS Lab 1
勉強時間:
20251011 : 約4.5時間
20251012 : 約3時間
20251013 : 約0時間
20251014 : 約3時間
20251015 : 約3時間
20251016 : 約3時間
学習内容
MPLSによるラベルスイッチング
LDPを有効化するには、以下の手順が必要。
・LDPのHelloメッセージはMulticast:224.0.0.2 UPD/646で送信される。
・ネイバー認識後、TCPセッションを張った後にラベル情報を交換し合う。
TCPセッションは指定がない場合、一番大きいループバックのIPをLDPのIPとして使う。
もし指定する場合は以下のコマンドで指定。
mpls ldp router-id Loopback0 [force]
[force]オプションは設定時点で強制的にLDPのルータIDを変更する。
ルータIDのアドレスに対してTCP接続できないと、LDPセッションは張れない。
データの保持方法は2種類。
・Liberal retention mode
デフォルトの方法。
すべてのネイバーからのラベルを保持する。
・Conservative mode
特定のルートに対して、最短経路となるルートのネクストホップのみを保持する。
プレフィックスのバインディング
show mpls ldp bindings
R1#show mpls ldp bindings 1.1.1.1 32
lib entry: 1.1.1.1/32, rev 4
local binding: label: imp-null
remote binding: lsr: 2.2.2.2:0, label: 204
R2#sh mpls ldp bindings 1.1.1.1 32
lib entry: 1.1.1.1/32, rev 16
local binding: label: 204
remote binding: lsr: 11.1.1.1:0, label: imp-null
remote binding: lsr: 3.3.3.3:0, label: 305
各プレフィックスに対してローカルでラベルを割り当てる。
上記結果では、
local binding: ルータ内でプレフィックスに割り当てたラベル
remote-binding: 隣接ルータが特定のプレフィックスに対して割り当てたラベル
つまり、LDPドメイン内で一つのプレフィックスに対してユニークなラベルを割り当てるんではなく、
ルータごとに一つのプレフィックスを各自で好きにラベル付けし、それを交換しあう。
野良猫を皆で同じ名前で呼ぶんじゃなく、各家庭で好き勝手に呼んであだ名だけお隣さんで交換し合う感じ?
TTL Propagation
MPLSのヘッダ(SHIM Header)はL2ヘッダとL3ヘッダの間に存在する。
また、TTLフィールドが存在する。
ラベル転送により、MPLSヘッダのTTLが1つずつ減っていくが、このままではIPヘッダのTTLは消費されない。
そのためTTLの限界数の255以上ホップする可能性もある。何より、IPヘッダのTTLが消費されないことでTraceroute等によってホップ数を正しく測定できない事象が発生する。
これを防止するため、TTL PropagationによってMPLSのヘッダとIPパケットのTTLをお互いにコピーし合う。
これによって、ルータによるラベル転送でもTTLが減少する。
これはデフォルトで有効化されている。
問題点
しかし、これを有効化している場合、tracerouteを実行した際、以下のように経由ルータとローカルラベルが表示される。
R1#traceroute 7.7.7.7
Type escape sequence to abort.
Tracing the route to 7.7.7.7
VRF info: (vrf in name/id, vrf out name/id)
1 12.1.1.2 2 msec 1 msec 1 msec
2 23.1.1.3 [MPLS: Label 308 Exp 0] 5 msec 4 msec 4 msec
3 34.1.1.4 [MPLS: Label 408 Exp 0] 5 msec 4 msec 4 msec
4 45.1.1.5 [MPLS: Label 503 Exp 0] 5 msec 5 msec 6 msec
5 56.1.1.6 [MPLS: Label 602 Exp 0] 4 msec 4 msec 4 msec
6 67.1.1.7 5 msec * 5 msec
MPLSネットワークを通る際のネットワークが分かってしまうので、セキュリティ上よろしくない。
そのため、TTL propagetionを無効にすることでMPLSネットワークを秘匿化する。
# 全てのトラフィックにおいてIPパケットからTTLをコピーしない
R2(config)#no mpls ip propagate-ttl
# 自身が生成したトラフィックにおいてIPパケットからTTLをコピーしない
# 通過したパケットに関してはIPパケットからTTLをコピーする。
R2(config)#no mpls ip propagate-ttl local
# 通過したパケットに関してはIPパケットからTTLをコピーしない。
# 自身が生成したトラフィックにおいてIPパケットからTTLをコピーする。
R2(config)#no mpls ip propagate-ttl forwarded
OSPFによるMPLS有効化
OSPFが有効化されているインターフェースに対してLDPを有効化する。
以下のコマンドがある場合、自動的に設定する。
mpls ldp autoconfig area 0
これはグローバルに設定される。
◆設定
router ospf 1
mpls ldp autoconfig area 0
router-id 0.0.0.4
network 4.4.4.4 0.0.0.0 area 0
network 34.1.1.4 0.0.0.0 area 0
network 45.1.1.4 0.0.0.0 area 0
◆確認
R4#sh mpls interfaces
Interface IP Tunnel BGP Static Operational
GigabitEthernet0/3 Yes (ldp) No No No Yes
GigabitEthernet0/5 Yes (ldp) No No No Yes
ループバックである4.4.4.4もMPLSを有効化されているが、
show mpls interfacesには表示されない。
グローバルに有効化されるため、IF単位で無効化する場合、
no mpls ldp igp autoconfigを投入する。
R3(config-if)#int gi 0/2
R3(config-if)#no mpls ldp igp autoconfig
R3(config-if)#
*Oct 16 04:35:28.175: LDP SP: 2.2.2.2:0: disabling session protection: session DOWN
*Oct 16 04:35:28.175: LDP SP: 2.2.2.2:0: state change (Incomplete -> None)
R3(config-if)#
*Oct 16 04:35:28.176: %LDP-5-NBRCHG: LDP Neighbor 2.2.2.2:0 (1) is DOWN (LDP disabled on interface)
LDPの経路冗長
mpls ldp session protection
によって、経路の状態を保護できる。
ここでいう保護とは、セッションが切断されても他の経路がある場合、通信を継続できることを指す。
通常のMPLSのHelloはマルチキャストのため1ホップ離れた相手にのみ届くが、targeted Hello というユニキャストで送信することで複数ホップ離れた相手にもHelloを送信することが出来る。
このTargeted Helloが届く前提なので、複数のリンクで冗長されていることが前提条件となる。
R3#sh run | i mpls ldp session protection
mpls ldp session protection
R3#sh mpls ldp discovery
Local LDP Identifier:
3.3.3.3:0
Discovery Sources:
Interfaces:
GigabitEthernet0/2 (ldp): xmit/recv
LDP Id: 2.2.2.2:0; IP addr: 23.1.1.2; no host route
GigabitEthernet0/5 (ldp): xmit/recv
LDP Id: 5.5.5.5:0
Targeted Hellos:
3.3.3.3 -> 4.4.4.4 (ldp): active/passive, xmit/recv
LDP Id: 4.4.4.4:0
3.3.3.3 -> 5.5.5.5 (ldp): active/passive, xmit/recv
LDP Id: 5.5.5.5:0
3.3.3.3 -> 2.2.2.2 (ldp): active, xmit
「Targeted Hellos:」欄に注目。
「active/passive, xmit/recv」となっており、4.4.4.4と5.5.5.5には相互にTargeted Helloが出来ている。
ただ、2.2.2.2.に対しては「active, xmit」とこちらから送信のみしている形であり、相互にはなっていないため冗長はされていない。