↓ メインコンテンツへスキップ
  1. ネットワーク 記事一覧/
  2. MPLS記事一覧/

LDPのセッション認証(TCP MD5)

目次

LDPのセッション認証(TCP MD5)

LDPのセッションはTCPの646番の上に載ります。そこへ偽のセグメントを差し込まれないよう、RFC 5036はTCP MD5 Signature Option(RFC 2385)による保護を定めています。守られるのはセッションだけで、隣接の発見にもラベルの中身にも認証はかかりません。この非対称と、片側だけ設定したときに起きる紛らわしい状態、そして設定の範囲を間違えると無関係なピアまで落ちることを、IOS XR(XRd)のラボで確かめます。LDPの基本はLDPとはで解説しています。

何を守り、何を守らないのか

RFC 5036の2.9.1節が参照するRFC 2385は、接続の両端だけが知る情報からMD5ダイジェストを計算し、TCPセグメントに付ける仕組みです。パスワードそのものは接続のストリームに現れません。攻撃者はシーケンス番号を当てるだけでなくパスワードも入手する必要があります。

2.9.2節が、LDPでの使い方を定めています。

項目規定
設定の単位ピアごとにパスワード(共有秘密)を設定する
照合に失敗したとき送信元に何も返さずセグメントを捨てる
パスワードを設定していない相手その相手からのHelloを無視する

守られない範囲も明記されています。5.2節 Privacy のとおり、LDPはラベル配布の情報を暗号化しません。経路上でラベルの対応関係を読むことは防げず、防げるのは偽のセグメントを差し込まれることです。

Hello(UDP 646)には認証がありません。 2.9.2節の「Helloを無視する」はパスワードを設定していない相手に対する動作なので、設定済みの相手から届くHelloは無視されません。つまり片側だけにパスワードを入れると、隣接は見えたままセッションだけが張れなくなります。

IOS XRの設定

mpls ldpの直下で指定します。ピアはLDP識別子(3.3.3.3:0のようにラベルスペース番号まで含む形)で指定します。

範囲コマンド効く相手
ピアごとneighbor <LDP識別子> password clear <パスワード>そのピアだけ
全ピア共通neighbor password clear <パスワード>その装置のLDPピア全部
共通パスワードをこのピアだけ無効化neighbor <LDP識別子> password disableそのピアだけ認証なしに戻す

clearは「これから平文を入力する」という意味で、保存されるときは暗号化されます。

「全ピア共通」は、関係のないピアも巻き込みます

全ピア共通の形は、その装置が張っている他のLDPセッションにもそのまま効きます。 1つの区間を守るつもりで入れると、パスワードを知らない他のピアとのセッションが同時に落ちます。名前のとおりの動作ですが、「まだ設定していない相手には影響しない」と読むと逆になります。

区間を限って守るならピアごとの形を使います。全ピア共通を使うのは、その装置の全ピアに同じパスワードを配り終えているときだけです。

なおピア指定のpasswordとpassword disableは同じ設定行で、後から入れたほうが前を置き換えます。全ピア共通を入れたうえで特定のピアだけdisableにする、という組み合わせは成り立ちます。

片側だけ入れると何が起きるか

パスワードを入れた側は、届くセグメントにダイジェストが付いていることを期待します。入れていない側は付けずに送るので、照合に失敗し、応答を返さずに捨てられます。送る側からは相手が沈黙しているようにしか見えず、TCPのSYNを再送し続けます。

Helloは流れ続けるので、show mpls ldp discoveryでは隣接が見えたままです。一方show mpls ldp neighborは空になります。

セッションが落ちるとラベルの交換も止まります。IGPは無関係なのでIPの経路は残り、コア内のIP疎通は通ったまま、MPLSで運ぶVPNの通信だけが落ちます。経路表が正常に見えるため、原因の見当をつけにくい状態になります。

パスワードを変えるときも同じです。 片側だけ値を変えた瞬間に不一致になるので、投入と同じく一度切れます。

検証構成

冗長性のない直列構成です。コア(PE1 - P1 - P2 - PE2)でOSPFとLDPを動かし、CE1とCE2はVRF CUST-AでPEに接続してVPNv4で疎通させます。認証を入れるのはPE1 - P1の1区間だけです。

MPLS-LDPAUTHラボ
  CE1 ------ PE1 ------ P1 ------ P2 ------ PE2 ------ CE2
(AS 65101)    |          ^                   |   (AS 65102)
           vrf CUST-A    |                vrf CUST-A
              +------ iBGP vpnv4 (Lo0) ------+
                         ここに認証を入れる
ルータLo0役割ラベル範囲
CE11.1.1.1AS 65101、192.168.1.0/24-
PE12.2.2.2入口/出口LSR、vrf CUST-A24000 - 24999
P13.3.3.3中継LSR。PE1とP2の2ピアを持つ33000 - 33999
P24.4.4.4中継LSR44000 - 44999
PE25.5.5.5入口/出口LSR、vrf CUST-A55000 - 55999
CE26.6.6.6AS 65102、192.168.2.0/24-

ラベルの範囲を装置ごとに分けてあります。 show mpls forwardingに出るラベルが誰の割り当てか読めるようにするためです。

P1がPE1とP2の2ピアを持つので、PE1 - P1だけに認証を入れたときに、P1 - P2が無傷かどうかを同じ装置の上で確かめられます。

検証の全体像

STEP操作確かめること
0認証なしセッションが確立し、ping / tracerouteが通ること
1PE1だけにneighbor 3.3.3.3:0 passwordセッションが落ち、隣接は残ること。IPは通るのにVPNが落ちること。P1 - P2は無傷であること
2P1にも同じパスワード復旧し、TCPにMD5オプションが載ること
3PE1のパスワードだけ別の値に変える変更も一度切れること
4P1も新しい値に追従復旧すること
5両側を全ピア共通の形に置き換えるPE1 - P1は保たれるが、P1 - P2が落ちること
6PE1にneighbor 3.3.3.3:0 password disableそのピアだけ認証なしに戻り、また落ちること
7PE1のdisableを外すPE1 - P1が復旧すること
8両側から撤去(最終状態)STEP 0と同じに戻ること

疎通はCE1からping 192.168.2.1 source 192.168.1.1 count 50 timeout 1で、コア内はPE1からping 5.5.5.5 source 2.2.2.2で、各STEP測っています。

STEP 0:認証なしの状態

PE1とP1のセッションが確立し、7本のラベルを受け取っています。

STEP 0 PE1 show mpls ldp neighbor brief
RP/0/RP0/CPU0:PE1#show mpls ldp neighbor brief
Sun Oct 11 23:04:12.772 UTC

Peer               GR  NSR  Up Time     Discovery   Addresses     Labels
                                        ipv4  ipv6  ipv4  ipv6  ipv4   ipv6
-----------------  --  ---  ----------  ----------  ----------  ------------
3.3.3.3:0          N   N    00:21:00    1     0     3     0     7      0

STEP 1:PE1だけにパスワードを入れる

PE1にだけ設定します。投入した内容はpassword clearですが、保存された時点でencryptedになっています。

STEP 1 PE1にcommitした設定
mpls ldp
 neighbor
  3.3.3.3:0 password encrypted 11253D3536273F2455
 !
!

隣接は残り、セッションだけが落ちる

show mpls ldp neighbor briefは何も返しません。

STEP 1 PE1 show mpls ldp neighbor brief(何も返らない)
RP/0/RP0/CPU0:PE1#show mpls ldp neighbor brief
Sun Oct 11 23:12:09.977 UTC

ところがshow mpls ldp discoveryでは隣接が生きています。xmit/recvのままで、Establishedの時刻は設定を変える前のまま途切れていません。

STEP 1 PE1 show mpls ldp discovery
RP/0/RP0/CPU0:PE1#show mpls ldp discovery
Sun Oct 11 23:12:09.646 UTC

Local LDP Identifier: 2.2.2.2:0
Discovery Sources:
  Interfaces:
    GigabitEthernet0/0/0/1 : xmit/recv
      VRF: 'default' (0x60000000)
      LDP Id: 3.3.3.3:0, Transport address: 3.3.3.3
          Hold time: 15 sec (local:15 sec, peer:15 sec)
          Established: Oct 11 22:43:06.419 (00:29:03 ago)

Helloは認証されないので、隣接だけが無傷で残ります。show mpls ldp neighborだけを見ると「相手がいない」ように見えますが、実際には相手は見えています。

ラベルだけが消える

転送テーブルを見ると、何が失われたのかがはっきりします。STEP 0では出ラベルが付いていました。出ラベルの33001〜33003はP1が割り当てたものです(ラベルの範囲を装置ごとに分けてあるので、どの装置が配ったラベルか読めます)。

STEP 0 PE1 show mpls forwarding
RP/0/RP0/CPU0:PE1#show mpls forwarding
Sun Oct 11 23:04:14.341 UTC
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes
Label  Label       or ID              Interface                    Switched
------ ----------- ------------------ ------------ --------------- ------------
24000  Pop         3.3.3.3/32         Gi0/0/0/1    10.2.3.3        212
24001  Pop         10.3.4.0/24        Gi0/0/0/1    10.2.3.3        0
24002  33001       4.4.4.4/32         Gi0/0/0/1    10.2.3.3        5644
24003  33002       10.4.5.0/24        Gi0/0/0/1    10.2.3.3        0
24004  33003       5.5.5.5/32         Gi0/0/0/1    10.2.3.3        23751
24005  Unlabelled  192.168.1.0/24[V]  Gi0/0/0/0    10.1.2.1        12400

セッションが落ちると、同じエントリーがすべてUnlabelledになります。宛先も出力インタフェースも変わらず、ラベルを積む情報だけが無くなった状態です。

STEP 1 PE1 show mpls forwarding
RP/0/RP0/CPU0:PE1#show mpls forwarding
Sun Oct 11 23:12:11.216 UTC
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes
Label  Label       or ID              Interface                    Switched
------ ----------- ------------------ ------------ --------------- ------------
24000  Unlabelled  3.3.3.3/32         Gi0/0/0/1    10.2.3.3        0
24001  Unlabelled  10.3.4.0/24        Gi0/0/0/1    10.2.3.3        0
24002  Unlabelled  4.4.4.4/32         Gi0/0/0/1    10.2.3.3        5644
24003  Unlabelled  10.4.5.0/24        Gi0/0/0/1    10.2.3.3        0
24004  Unlabelled  5.5.5.5/32         Gi0/0/0/1    10.2.3.3        11701
24005  Unlabelled  192.168.1.0/24[V]  Gi0/0/0/0    10.1.2.1        5100

IPは通るのにVPNだけが落ちる

CE1からCE2への疎通は完全に断です。

STEP 1 CE1 ping 192.168.2.1(VPNの通信)
RP/0/RP0/CPU0:CE1#ping 192.168.2.1 source 192.168.1.1 count 50 timeout 1
Sun Oct 11 23:09:25.544 UTC
Type escape sequence to abort.
Sending 50, 100-byte ICMP Echos to 192.168.2.1 timeout is 1 seconds:
..................................................
Success rate is 0 percent (0/50)

同じSTEPで、PE1からPE2のLoopback宛のIP疎通は無損失です。

STEP 1 PE1 ping 5.5.5.5(コア内のIP疎通)
RP/0/RP0/CPU0:PE1#ping 5.5.5.5 source 2.2.2.2 count 50 timeout 1
Sun Oct 11 23:10:22.902 UTC
Type escape sequence to abort.
Sending 50, 100-byte ICMP Echos to 5.5.5.5 timeout is 1 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 100 percent (50/50), round-trip min/avg/max = 8/11/26 ms

OSPFは動いているのでIPの経路は残り、トランスポートLSPだけが消えます。経路表を見ても異常は出ません。

TCPは応答が返らない

P1はセッションを張り直そうとしてSYNを送り続けます。そのSYNのTCPオプションは、MSSとWindow scaleだけの8バイトで、MD5 signatureがありません。

STEP 1 No.14 SYN(P1 → PE1)のTCPオプション
    Options: (8 bytes), Maximum segment size, Window scale, End of Option List (EOL)
        TCP Option - Maximum segment size: 1240 bytes
            Kind: Maximum Segment Size (2)
            Length: 4
            MSS Value: 1240
        TCP Option - Window scale: 0 (multiply by 1)
            Kind: Window Scale (3)
            Length: 3
            Shift count: 0
            [Multiplier: 1]
        TCP Option - End of Option List (EOL)
            Kind: End of Option List (0)

PE1はこれを照合できないので、RFC 2385のとおり応答を返さずに捨てます。

上のtshark出力のパケット(No.14 SYN)のpcapをダウンロード

切り分けに使うもの

syslogの出方が両側で違います。原因が分かるのはパスワードを入れた側だけです。

STEP 1 PE1のsyslog(パスワードを入れた側)
RP/0/RP0/CPU0:Oct 11 23:07:22.906 UTC: mpls_ldp[1178]: %ROUTING-LDP-5-NBR_CHANGE : VRF 'default' (0x60000000), Neighbor 3.3.3.3:0 is DOWN (Session MD5 password changed)
STEP 1 P1のsyslog(入れていない側)
RP/0/RP0/CPU0:Oct 11 23:07:22.912 UTC: mpls_ldp[1178]: %ROUTING-LDP-5-NBR_CHANGE : VRF 'default' (0x60000000), Neighbor 2.2.2.2:0 is DOWN (TCP connection closed)

入れていない側にはTCP connection closedとしか出ません。相手が認証を入れたことは分からないので、片側だけ設定が変わった状況では、変更を知らない側は原因にたどり着けません。見るべきものをまとめます。

見るもの片側だけ認証を入れたとき
show mpls ldp neighbor空。 相手がいないように見える
show mpls ldp discoveryHelloは届いている。 原因はセッション層にある
show mpls forwardingすべてUnlabelled。 経路はあるがラベルが無い
show ospf neighbor / show route正常。IGPは無関係
syslog(設定した側)DOWN (Session MD5 password changed)
syslog(していない側)DOWN (TCP connection closed)

STEP 2:両側に同じパスワードを入れる

P1にも同じパスワードを入れると復旧します。ラベルも7本に戻りました。

STEP 2 P1にcommitした設定
mpls ldp
 neighbor
  2.2.2.2:0 password encrypted 00283736256E3F2E5E
 !
!
STEP 2 PE1 show mpls ldp neighbor brief
RP/0/RP0/CPU0:PE1#show mpls ldp neighbor brief
Sun Oct 11 23:18:14.919 UTC

Peer               GR  NSR  Up Time     Discovery   Addresses     Labels
                                        ipv4  ipv6  ipv4  ipv6  ipv4   ipv6
-----------------  --  ---  ----------  ----------  ----------  ------------
3.3.3.3:0          N   N    00:02:52    1     0     3     0     7      0

ハンドシェイクのSYNにはMD5 signature(Kind 19)が載っています。オプションは28バイトに増えました。

STEP 2 No.9 SYN(P1 → PE1)のTCPオプション
    Options: (28 bytes), Maximum segment size, Window scale, No-Operation (NOP), TCP MD5 signature, End of Option List (EOL), End of Option List (EOL)
        TCP Option - Maximum segment size: 1216 bytes
            Kind: Maximum Segment Size (2)
            Length: 4
            MSS Value: 1216
        TCP Option - Window scale: 0 (multiply by 1)
            Kind: Window Scale (3)
            Length: 3
            Shift count: 0
            [Multiplier: 1]
        TCP Option - No-Operation (NOP)
            Kind: No-Operation (1)
        TCP Option - TCP MD5 signature
            Kind: MD5 Signature Option (19)
            Length: 18
            MD5 digest: 337cab19feb964100c6a8ddb7e312780
        TCP Option - End of Option List (EOL)
            Kind: End of Option List (0)
        TCP Option - End of Option List (EOL)
            Kind: End of Option List (0)
上のtshark出力のパケット(No.9 SYN)のpcapをダウンロード

返ってきたSYN/ACKにも同じようにMD5 signatureが載っています(ダイジェストの値は方向ごとに違います)。

STEP 2 No.10 SYN/ACK(PE1 → P1)のTCPオプション
    Options: (28 bytes), Maximum segment size, Window scale, No-Operation (NOP), TCP MD5 signature, End of Option List (EOL), End of Option List (EOL)
        TCP Option - Maximum segment size: 1216 bytes
            Kind: Maximum Segment Size (2)
            Length: 4
            MSS Value: 1216
        TCP Option - Window scale: 0 (multiply by 1)
            Kind: Window Scale (3)
            Length: 3
            Shift count: 0
            [Multiplier: 1]
        TCP Option - No-Operation (NOP)
            Kind: No-Operation (1)
        TCP Option - TCP MD5 signature
            Kind: MD5 Signature Option (19)
            Length: 18
            MD5 digest: ac7599ea7de4490ef9eff0cedc3030fd
        TCP Option - End of Option List (EOL)
            Kind: End of Option List (0)
        TCP Option - End of Option List (EOL)
            Kind: End of Option List (0)
上のtshark出力のパケット(No.10 SYN/ACK)のpcapをダウンロード

オプションが8バイトから28バイトへ20バイト増え、広告するMSSは1240バイトから1216バイトへ24バイト減っています。 MD5 signatureはKindとLengthを含めて18バイトのオプションで、詰め物を入れて20バイトになります。MSSの減り方がオプションの増え方と一致しないので、XRが広告するMSSをどう決めているかは、このキャプチャーからは読み取れません(インタフェースのIPv4 MTUは1500で、そこから直接引いた値でもありません)。

STEP 3〜4:パスワードの変更も一度切れる

PE1のパスワードだけを別の値にします。

STEP 3 PE1にcommitした設定
mpls ldp
 neighbor
  3.3.3.3:0 password encrypted 153E2F3C251F1F0C7A
 !
!

不一致になった瞬間にセッションが落ち、syslogはSTEP 1と同じ理由を出します。

STEP 3 PE1のsyslog
RP/0/RP0/CPU0:Oct 11 23:21:26.608 UTC: mpls_ldp[1178]: %ROUTING-LDP-5-NBR_CHANGE : VRF 'default' (0x60000000), Neighbor 3.3.3.3:0 is DOWN (Session MD5 password changed)

P1を同じ新しい値にすると復旧します(STEP 4)。値を変えるだけでも、入れるときとまったく同じ断になります。

STEP 5:全ピア共通にすると、関係のないピアが落ちる

ピアごとの指定をやめ、全ピア共通の形に置き換えます。PE1とP1の両方に入れるので、PE1 - P1のセッションは保たれます。

STEP 5 P1にcommitした設定
mpls ldp
 neighbor
  password encrypted 013F22347A3E322773
  no 2.2.2.2:0 password encrypted 0527223F00797A214B
 !
!

ところがP1 - P2が落ちます。P2から見ると、相手はPE2だけになりました。

STEP 5 P2 show mpls ldp neighbor brief
RP/0/RP0/CPU0:P2#show mpls ldp neighbor brief
Sun Oct 11 23:42:33.104 UTC

Peer               GR  NSR  Up Time     Discovery   Addresses     Labels
                                        ipv4  ipv6  ipv4  ipv6  ipv4   ipv6
-----------------  --  ---  ----------  ----------  ----------  ------------
5.5.5.5:0          N   N    00:58:58    1     0     2     0     7      0

P1は全ピアにMD5を要求するようになったので、パスワードを持たないP2のセグメントを捨てます。P2はSYNを送り続け、応答は1つも返りません。

STEP 5 P1 - P2間のSYNと、返ってきたSYN/ACKの数
$ tshark -r - -Y 'tcp.flags.syn==1 && tcp.flags.ack==0 && ip.src==4.4.4.4' \
    < mpls-ldp-authentication-step5-p1p2.pcap | wc -l
52
$ tshark -r - -Y 'tcp.flags.syn==1 && tcp.flags.ack==1' \
    < mpls-ldp-authentication-step5-p1p2.pcap | wc -l
0

そのSYNのオプションは、STEP 1でP1がPE1へ送っていたものと同じ8バイトです。

STEP 5 No.22 SYN(P2 → P1)のTCPオプション
    Options: (8 bytes), Maximum segment size, Window scale, End of Option List (EOL)
        TCP Option - Maximum segment size: 1240 bytes
            Kind: Maximum Segment Size (2)
            Length: 4
            MSS Value: 1240
        TCP Option - Window scale: 0 (multiply by 1)
            Kind: Window Scale (3)
            Length: 3
            Shift count: 0
            [Multiplier: 1]
        TCP Option - End of Option List (EOL)
            Kind: End of Option List (0)
上のtshark出力のパケット(No.22 SYN)のpcapをダウンロード

STEP 1とまったく同じ壊れ方が、触っていない区間で起きています。 1区間を守るつもりの設定が、その装置の全セッションに効いたためです。

STEP 6〜7:ピアごとに無効化する

共通パスワードを残したまま、PE1でこのピアだけ認証を外します。

STEP 6 PE1にcommitした設定
mpls ldp
 neighbor
  3.3.3.3:0 password disable
 !
!

PE1はMD5を付けずに送るようになり、要求し続けるP1との間でまた落ちます。disableを外す(STEP 7)と共通パスワードに戻って復旧します。

STEP 8:撤去して元に戻る

両側からパスワードを外すと、MD5オプションの無いハンドシェイクでセッションが張り直され、P1 - P2も戻ります。

STEP 8 PE1にcommitした設定
mpls ldp
 neighbor
  no password encrypted 04772F362E1478665B
 !
!
STEP 8 PE1 show mpls ldp neighbor brief
RP/0/RP0/CPU0:PE1#show mpls ldp neighbor brief
Mon Oct 12 00:03:10.500 UTC

Peer               GR  NSR  Up Time     Discovery   Addresses     Labels
                                        ipv4  ipv6  ipv4  ipv6  ipv4   ipv6
-----------------  --  ---  ----------  ----------  ----------  ------------
3.3.3.3:0          N   N    00:03:24    1     0     3     0     7      0

最終STEPのrunning-configは、STEP 0と一致します(6台とも差分なし。採取データを行の個数まで突き合わせて確認しています)。

各STEPでどのセッションが生きていたかをまとめます。数字は受け取っていたラベルの本数です。

STEPPE1 - P1P1 - P2P2 - PE2CE1 → CE2(VPN)PE1 → PE2(コアのIP)
0777100%(50/50)100%(50/50)
1落ち770%(0/50)100%(50/50)
2777100%(50/50)100%(50/50)
3落ち770%(0/50)100%(50/50)
4777100%(50/50)100%(50/50)
57落ち70%(0/50)100%(50/50)
6落ち落ち70%(0/50)100%(50/50)
77落ち70%(0/50)100%(50/50)
8777100%(50/50)100%(50/50)

設計上の注意

  • 両端に同時に入れられないなら、入れる順番を決めておきます。 片側だけの状態は必ずセッション断になります。運用中のコアに後から入れるときは、区間ごとに保守時間を取ります
  • 範囲はピアごとの形で指定します。 全ピア共通の形は、その装置の他のセッションまで同時に落とします。使うのは全ピアに配り終えてからです
  • 相手側には理由が出ません。 他組織との境界(インターAS)で認証を変えるときは、相手に事前に伝えないと相手側は原因を特定できません
  • パスワードを変えるときも一度切れます。 Session MD5 password changedで落ちてから張り直しになるため、変更も投入と同じ扱いで計画します
  • 暗号化は行われません。 ラベルの対応関係を隠したい場合、この仕組みでは足りません

検証Configおよびshow結果

各STEPで6台すべてから、次の種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態は最後のSTEPのもの)。

ファイル内容
..._clear.txtそのSTEPでクリアしたカウンタの記録(clear counters interface / clear mpls forwarding counters)
..._ping.txtそのSTEPのping(50発、timeout 1秒)とtraceroute
..._show.txtshow version / show interface description / OSPF・LDP・MPLS転送の一式 / show tcp brief / show running-config mpls ldpなど
..._log.txtそのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)
..._trace.txtshow mpls ldp trace peer / binding / show mpls lsd trace(コア4台のみ)
..._commit.cfgそのSTEPで実際にcommitした設定だけ。 設定を変えたルータの分のみ

STEP 0:認証なし

ルータクリアpingshow出力syslogrunning-configtrace
CE1clearpingshowlogrun—
PE1clearpingshowlogruntrace
P1clearpingshowlogruntrace
P2clearpingshowlogruntrace
PE2clearpingshowlogruntrace
CE2clearpingshowlogrun—

STEP 1:PE1だけにneighbor 3.3.3.3:0 password

ルータクリアpingshow出力syslogrunning-configtrace投入した設定
CE1clearpingshowlogrun——
PE1clearpingshowlogruntracecommit
P1clearpingshowlogruntrace—
P2clearpingshowlogruntrace—
PE2clearpingshowlogruntrace—
CE2clearpingshowlogrun——

STEP 2:P1にも同じパスワード

ルータクリアpingshow出力syslogrunning-configtrace投入した設定
CE1clearpingshowlogrun——
PE1clearpingshowlogruntrace—
P1clearpingshowlogruntracecommit
P2clearpingshowlogruntrace—
PE2clearpingshowlogruntrace—
CE2clearpingshowlogrun——

STEP 3:PE1のパスワードだけ別の値に変える

ルータクリアpingshow出力syslogrunning-configtrace投入した設定
CE1clearpingshowlogrun——
PE1clearpingshowlogruntracecommit
P1clearpingshowlogruntrace—
P2clearpingshowlogruntrace—
PE2clearpingshowlogruntrace—
CE2clearpingshowlogrun——

STEP 4:P1も新しい値に追従

ルータクリアpingshow出力syslogrunning-configtrace投入した設定
CE1clearpingshowlogrun——
PE1clearpingshowlogruntrace—
P1clearpingshowlogruntracecommit
P2clearpingshowlogruntrace—
PE2clearpingshowlogruntrace—
CE2clearpingshowlogrun——

STEP 5:両側を全ピア共通のneighbor passwordに置き換える

ルータクリアpingshow出力syslogrunning-configtrace投入した設定
CE1clearpingshowlogrun——
PE1clearpingshowlogruntracecommit
P1clearpingshowlogruntracecommit
P2clearpingshowlogruntrace—
PE2clearpingshowlogruntrace—
CE2clearpingshowlogrun——

STEP 6:PE1にneighbor 3.3.3.3:0 password disable

ルータクリアpingshow出力syslogrunning-configtrace投入した設定
CE1clearpingshowlogrun——
PE1clearpingshowlogruntracecommit
P1clearpingshowlogruntrace—
P2clearpingshowlogruntrace—
PE2clearpingshowlogruntrace—
CE2clearpingshowlogrun——

STEP 7:PE1のdisableを外す

ルータクリアpingshow出力syslogrunning-configtrace投入した設定
CE1clearpingshowlogrun——
PE1clearpingshowlogruntracecommit
P1clearpingshowlogruntrace—
P2clearpingshowlogruntrace—
PE2clearpingshowlogruntrace—
CE2clearpingshowlogrun——

STEP 8:両側から撤去(最終状態)

ルータクリアpingshow出力syslogrunning-configtrace投入した設定
CE1clearpingshowlogrun——
PE1clearpingshowlogruntracecommit
P1clearpingshowlogruntracecommit
P2clearpingshowlogruntrace—
PE2clearpingshowlogruntrace—
CE2clearpingshowlogrun——

パケットキャプチャーはSTEPごとに2つの区間で取得しています。

STEPPE1 - P1間P1 - P2間
0pcappcap
1pcappcap
2pcappcap
3pcappcap
4pcappcap
5pcappcap
6pcappcap
7pcappcap
8pcappcap

参考

出典参照した箇所
RFC 5036 LDP Specification2.9.1節(TCP MD5 Signature Option)、2.9.2節(ピアごとのパスワード、照合失敗時は応答せず破棄、パスワード未設定の相手のHelloを無視)、5.2節(暗号化されないこと)
RFC 2385 Protection of BGP Sessions via the TCP MD5 Signature OptionMD5 signatureのTCPオプション(Kind 19)。オプションは18バイトで、実装では20バイトに詰められること
IOS XR MPLS Configuration Guideneighbor password / neighbor <LDP識別子> password / password disableの構文

検証はXRd 26.1.1(Cisco Modeling Labs)で実施しました。