mpls ldp session protection
初期設定
・全I/FでOSPFとLDP起動
・lo0にx.x.x.x/32(x: iosv-x)を割り当ててmpls ldp router-id lo0 force←forceを設定しないと上書きしてくれない!!!
mpls ldp session protection
iosv-3(config)#mpls ldp session protection
iosv-3(config)#do clear mpls ldp neighbor *
iosv-3(config)#
Jul 18 14:00:42.673: %LDP-5-CLEAR_NBRS: Clear LDP neighbors () by console
*Jul 18 14:00:42.691: %LDP-5-NBRCHG: LDP Neighbor 192.168.2.1:0 (2) is DOWN (User cleared session manually)
*Jul 18 14:00:42.693: %LDP-5-NBRCHG: LDP Neighbor 172.16.1.2:0 (3) is DOWN (User cleared session manually)
*Jul 18 14:00:42.696: %LDP-5-NBRCHG: LDP Neighbor 192.168.1.10:0 (6) is DOWN (User cleared session manually)
iosv-3(config)#
*Jul 18 14:00:43.682: %LDP-5-NBRCHG: LDP Neighbor 192.168.1.10:0 (1) is UP
*Jul 18 14:00:44.252: %LDP-5-NBRCHG: LDP Neighbor 192.168.2.1:0 (2) is UP
iosv-3(config)#
*Jul 18 14:00:45.852: %LDP-5-NBRCHG: LDP Neighbor 172.16.1.2:0 (3) is UP
碌にCCOを読まずに進めると何も変化がなくネイバーを形成する。言葉の雰囲気からしてフィルタリングに近い機能だと思ってた。
show mpls ldp neighbor detail
iosv-3#sh mpls ldp neighbor detail
Peer LDP Ident: 4.4.4.4:0; Local LDP Ident 3.3.3.3:0
<略>
LDP Session Protection enabled, state: Incomplete
duration: 86400 seconds
Capabilities Sent:
[Dynamic Announcement (0x0506)]
[Typed Wildcard (0x050B)]
Capabilities Received:
[Dynamic Announcement (0x0506)]
[Typed Wildcard (0x050B)]
Peer LDP Ident: 1.1.1.1:0; Local LDP Ident 3.3.3.3:0
<略>
LDP Session Protection enabled, state: Ready
duration: 86400 seconds
Capabilities Sent:
[Dynamic Announcement (0x0506)]
[Typed Wildcard (0x050B)]
Capabilities Received:
[Dynamic Announcement (0x0506)]
[Typed Wildcard (0x050B)]
Peer LDP Ident: 10.10.10.10:0; Local LDP Ident 3.3.3.3:0
<略>
LDP Session Protection enabled, state: Incomplete
duration: 86400 seconds
Capabilities Sent:
[Dynamic Announcement (0x0506)]
[Typed Wildcard (0x050B)]
Capabilities Received:
[Dynamic Announcement (0x0506)]
[Typed Wildcard (0x050B)]
iosv-1とだけsession protection readyになっている。そのほかはImcomplete。
よくよく考えたら"Session Protection"でセッションを保護していて、ネイバーどうこうは特に語られていないことに気が付いた。
iosv-1 gi0/1をshutしてみる
spoke1(config)#int gi0/1
spoke1(config-if)#shut
*Jul 18 14:32:18.363: %LDP-5-SP: 1.1.1.1:0: session hold up initiated
iosv-3#sh mpls ldp nei
*Jul 18 14:32:39.575: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.1.10 on GigabitEthernet0/2 from FULL to DOWN, Neighbor Down: Dead timer expired
iosv-3#sh mpls ldp nei 1.1.1.1 detail
<略>
LDP Session Protection enabled, state: Protecting
duration: 86400 seconds
holdup time remaining: 86369 seconds
Capabilities Sent:
[Dynamic Announcement (0x0506)]
[Typed Wildcard (0x050B)]
Capabilities Received:
[Dynamic Announcement (0x0506)]
[Typed Wildcard (0x050B)]
ステータスがready→Protectingに変わった。
結論(めっちゃ大事)
つまり直接接続で形成しているLDPネイバーでも、別のルートで到達できるなら、直接接続がdownしてもLDPセッションを継続することができる。
iosv-1は直接接続とiosv-0を経由する2つのルートがあったため、shut前は「ready」であり、shut後は「Protecting」となった。
一方、iosv-0やiosv-4は直接接続以外のルートを持っていないため「Incomplete」のステータスだったと考えられる。
spoke1(config-if)#shut
iosv-3#sh mpls ldp neighbor 1.1.1.1
iosv-3#
ちなみにSession protectionを設定していない状態だと、代替ルートがあってもLDPネイバーは消滅する。
仕組みとしては、Session protectionが有効なときはLink helloだけでなくtargeted helloも自発的に送信するからProtectingになるが、基本挙動ではLink Helloしか送信されないためそれが途切れると代替経路があろうともLDPネイバーはダウンするってことだと思う。