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区間だけです。
CE1 ------ PE1 ------ P1 ------ P2 ------ PE2 ------ CE2
(AS 65101) | ^ | (AS 65102)
vrf CUST-A | vrf CUST-A
+------ iBGP vpnv4 (Lo0) ------+
ここに認証を入れる| ルータ | Lo0 | 役割 | ラベル範囲 |
|---|---|---|---|
| CE1 | 1.1.1.1 | AS 65101、192.168.1.0/24 | - |
| PE1 | 2.2.2.2 | 入口/出口LSR、vrf CUST-A | 24000 - 24999 |
| P1 | 3.3.3.3 | 中継LSR。PE1とP2の2ピアを持つ | 33000 - 33999 |
| P2 | 4.4.4.4 | 中継LSR | 44000 - 44999 |
| PE2 | 5.5.5.5 | 入口/出口LSR、vrf CUST-A | 55000 - 55999 |
| CE2 | 6.6.6.6 | AS 65102、192.168.2.0/24 | - |
ラベルの範囲を装置ごとに分けてあります。 show mpls forwardingに出るラベルが誰の割り当てか読めるようにするためです。
P1がPE1とP2の2ピアを持つので、PE1 - P1だけに認証を入れたときに、P1 - P2が無傷かどうかを同じ装置の上で確かめられます。
検証の全体像
| STEP | 操作 | 確かめること |
|---|---|---|
| 0 | 認証なし | セッションが確立し、ping / tracerouteが通ること |
| 1 | PE1だけにneighbor 3.3.3.3:0 password | セッションが落ち、隣接は残ること。IPは通るのにVPNが落ちること。P1 - P2は無傷であること |
| 2 | P1にも同じパスワード | 復旧し、TCPにMD5オプションが載ること |
| 3 | PE1のパスワードだけ別の値に変える | 変更も一度切れること |
| 4 | P1も新しい値に追従 | 復旧すること |
| 5 | 両側を全ピア共通の形に置き換える | PE1 - P1は保たれるが、P1 - P2が落ちること |
| 6 | PE1にneighbor 3.3.3.3:0 password disable | そのピアだけ認証なしに戻り、また落ちること |
| 7 | PE1の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本のラベルを受け取っています。
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 0STEP 1:PE1だけにパスワードを入れる
PE1にだけ設定します。投入した内容はpassword clearですが、保存された時点でencryptedになっています。
mpls ldp
neighbor
3.3.3.3:0 password encrypted 11253D3536273F2455
!
!隣接は残り、セッションだけが落ちる
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の時刻は設定を変える前のまま途切れていません。
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が割り当てたものです(ラベルの範囲を装置ごとに分けてあるので、どの装置が配ったラベルか読めます)。
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になります。宛先も出力インタフェースも変わらず、ラベルを積む情報だけが無くなった状態です。
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 5100IPは通るのにVPNだけが落ちる
CE1からCE2への疎通は完全に断です。
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疎通は無損失です。
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 msOSPFは動いているのでIPの経路は残り、トランスポートLSPだけが消えます。経路表を見ても異常は出ません。
TCPは応答が返らない
P1はセッションを張り直そうとしてSYNを送り続けます。そのSYNのTCPオプションは、MSSとWindow scaleだけの8バイトで、MD5 signatureがありません。
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の出方が両側で違います。原因が分かるのはパスワードを入れた側だけです。
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)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 discovery | Helloは届いている。 原因はセッション層にある |
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本に戻りました。
mpls ldp
neighbor
2.2.2.2:0 password encrypted 00283736256E3F2E5E
!
!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バイトに増えました。
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)返ってきたSYN/ACKにも同じようにMD5 signatureが載っています(ダイジェストの値は方向ごとに違います)。
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)オプションが8バイトから28バイトへ20バイト増え、広告するMSSは1240バイトから1216バイトへ24バイト減っています。 MD5 signatureはKindとLengthを含めて18バイトのオプションで、詰め物を入れて20バイトになります。MSSの減り方がオプションの増え方と一致しないので、XRが広告するMSSをどう決めているかは、このキャプチャーからは読み取れません(インタフェースのIPv4 MTUは1500で、そこから直接引いた値でもありません)。
STEP 3〜4:パスワードの変更も一度切れる
PE1のパスワードだけを別の値にします。
mpls ldp
neighbor
3.3.3.3:0 password encrypted 153E2F3C251F1F0C7A
!
!不一致になった瞬間にセッションが落ち、syslogはSTEP 1と同じ理由を出します。
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のセッションは保たれます。
mpls ldp
neighbor
password encrypted 013F22347A3E322773
no 2.2.2.2:0 password encrypted 0527223F00797A214B
!
!ところがP1 - P2が落ちます。P2から見ると、相手はPE2だけになりました。
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 0P1は全ピアにMD5を要求するようになったので、パスワードを持たないP2のセグメントを捨てます。P2はSYNを送り続け、応答は1つも返りません。
$ 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バイトです。
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)STEP 1とまったく同じ壊れ方が、触っていない区間で起きています。 1区間を守るつもりの設定が、その装置の全セッションに効いたためです。
STEP 6〜7:ピアごとに無効化する
共通パスワードを残したまま、PE1でこのピアだけ認証を外します。
mpls ldp
neighbor
3.3.3.3:0 password disable
!
!PE1はMD5を付けずに送るようになり、要求し続けるP1との間でまた落ちます。disableを外す(STEP 7)と共通パスワードに戻って復旧します。
STEP 8:撤去して元に戻る
両側からパスワードを外すと、MD5オプションの無いハンドシェイクでセッションが張り直され、P1 - P2も戻ります。
mpls ldp
neighbor
no password encrypted 04772F362E1478665B
!
!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でどのセッションが生きていたかをまとめます。数字は受け取っていたラベルの本数です。
| STEP | PE1 - P1 | P1 - P2 | P2 - PE2 | CE1 → CE2(VPN) | PE1 → PE2(コアのIP) |
|---|---|---|---|---|---|
| 0 | 7 | 7 | 7 | 100%(50/50) | 100%(50/50) |
| 1 | 落ち | 7 | 7 | 0%(0/50) | 100%(50/50) |
| 2 | 7 | 7 | 7 | 100%(50/50) | 100%(50/50) |
| 3 | 落ち | 7 | 7 | 0%(0/50) | 100%(50/50) |
| 4 | 7 | 7 | 7 | 100%(50/50) | 100%(50/50) |
| 5 | 7 | 落ち | 7 | 0%(0/50) | 100%(50/50) |
| 6 | 落ち | 落ち | 7 | 0%(0/50) | 100%(50/50) |
| 7 | 7 | 落ち | 7 | 0%(0/50) | 100%(50/50) |
| 8 | 7 | 7 | 7 | 100%(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.txt | show 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.txt | show mpls ldp trace peer / binding / show mpls lsd trace(コア4台のみ) |
..._commit.cfg | そのSTEPで実際にcommitした設定だけ。 設定を変えたルータの分のみ |
STEP 0:認証なし
| ルータ | クリア | ping | show出力 | syslog | running-config | trace |
|---|---|---|---|---|---|---|
| CE1 | clear | ping | show | log | run | — |
| PE1 | clear | ping | show | log | run | trace |
| P1 | clear | ping | show | log | run | trace |
| P2 | clear | ping | show | log | run | trace |
| PE2 | clear | ping | show | log | run | trace |
| CE2 | clear | ping | show | log | run | — |
STEP 1:PE1だけにneighbor 3.3.3.3:0 password
| ルータ | クリア | ping | show出力 | syslog | running-config | trace | 投入した設定 |
|---|---|---|---|---|---|---|---|
| CE1 | clear | ping | show | log | run | — | — |
| PE1 | clear | ping | show | log | run | trace | commit |
| P1 | clear | ping | show | log | run | trace | — |
| P2 | clear | ping | show | log | run | trace | — |
| PE2 | clear | ping | show | log | run | trace | — |
| CE2 | clear | ping | show | log | run | — | — |
STEP 2:P1にも同じパスワード
| ルータ | クリア | ping | show出力 | syslog | running-config | trace | 投入した設定 |
|---|---|---|---|---|---|---|---|
| CE1 | clear | ping | show | log | run | — | — |
| PE1 | clear | ping | show | log | run | trace | — |
| P1 | clear | ping | show | log | run | trace | commit |
| P2 | clear | ping | show | log | run | trace | — |
| PE2 | clear | ping | show | log | run | trace | — |
| CE2 | clear | ping | show | log | run | — | — |
STEP 3:PE1のパスワードだけ別の値に変える
| ルータ | クリア | ping | show出力 | syslog | running-config | trace | 投入した設定 |
|---|---|---|---|---|---|---|---|
| CE1 | clear | ping | show | log | run | — | — |
| PE1 | clear | ping | show | log | run | trace | commit |
| P1 | clear | ping | show | log | run | trace | — |
| P2 | clear | ping | show | log | run | trace | — |
| PE2 | clear | ping | show | log | run | trace | — |
| CE2 | clear | ping | show | log | run | — | — |
STEP 4:P1も新しい値に追従
| ルータ | クリア | ping | show出力 | syslog | running-config | trace | 投入した設定 |
|---|---|---|---|---|---|---|---|
| CE1 | clear | ping | show | log | run | — | — |
| PE1 | clear | ping | show | log | run | trace | — |
| P1 | clear | ping | show | log | run | trace | commit |
| P2 | clear | ping | show | log | run | trace | — |
| PE2 | clear | ping | show | log | run | trace | — |
| CE2 | clear | ping | show | log | run | — | — |
STEP 5:両側を全ピア共通のneighbor passwordに置き換える
| ルータ | クリア | ping | show出力 | syslog | running-config | trace | 投入した設定 |
|---|---|---|---|---|---|---|---|
| CE1 | clear | ping | show | log | run | — | — |
| PE1 | clear | ping | show | log | run | trace | commit |
| P1 | clear | ping | show | log | run | trace | commit |
| P2 | clear | ping | show | log | run | trace | — |
| PE2 | clear | ping | show | log | run | trace | — |
| CE2 | clear | ping | show | log | run | — | — |
STEP 6:PE1にneighbor 3.3.3.3:0 password disable
| ルータ | クリア | ping | show出力 | syslog | running-config | trace | 投入した設定 |
|---|---|---|---|---|---|---|---|
| CE1 | clear | ping | show | log | run | — | — |
| PE1 | clear | ping | show | log | run | trace | commit |
| P1 | clear | ping | show | log | run | trace | — |
| P2 | clear | ping | show | log | run | trace | — |
| PE2 | clear | ping | show | log | run | trace | — |
| CE2 | clear | ping | show | log | run | — | — |
STEP 7:PE1のdisableを外す
| ルータ | クリア | ping | show出力 | syslog | running-config | trace | 投入した設定 |
|---|---|---|---|---|---|---|---|
| CE1 | clear | ping | show | log | run | — | — |
| PE1 | clear | ping | show | log | run | trace | commit |
| P1 | clear | ping | show | log | run | trace | — |
| P2 | clear | ping | show | log | run | trace | — |
| PE2 | clear | ping | show | log | run | trace | — |
| CE2 | clear | ping | show | log | run | — | — |
STEP 8:両側から撤去(最終状態)
| ルータ | クリア | ping | show出力 | syslog | running-config | trace | 投入した設定 |
|---|---|---|---|---|---|---|---|
| CE1 | clear | ping | show | log | run | — | — |
| PE1 | clear | ping | show | log | run | trace | commit |
| P1 | clear | ping | show | log | run | trace | commit |
| P2 | clear | ping | show | log | run | trace | — |
| PE2 | clear | ping | show | log | run | trace | — |
| CE2 | clear | ping | show | log | run | — | — |
パケットキャプチャーはSTEPごとに2つの区間で取得しています。
| STEP | PE1 - P1間 | P1 - P2間 |
|---|---|---|
| 0 | pcap | pcap |
| 1 | pcap | pcap |
| 2 | pcap | pcap |
| 3 | pcap | pcap |
| 4 | pcap | pcap |
| 5 | pcap | pcap |
| 6 | pcap | pcap |
| 7 | pcap | pcap |
| 8 | pcap | pcap |
参考
| 出典 | 参照した箇所 |
|---|---|
| RFC 5036 LDP Specification | 2.9.1節(TCP MD5 Signature Option)、2.9.2節(ピアごとのパスワード、照合失敗時は応答せず破棄、パスワード未設定の相手のHelloを無視)、5.2節(暗号化されないこと) |
| RFC 2385 Protection of BGP Sessions via the TCP MD5 Signature Option | MD5 signatureのTCPオプション(Kind 19)。オプションは18バイトで、実装では20バイトに詰められること |
| IOS XR MPLS Configuration Guide | neighbor password / neighbor <LDP識別子> password / password disableの構文 |
検証はXRd 26.1.1(Cisco Modeling Labs)で実施しました。
- MPLSとは
- MPLSラベルとラベルスタック
- MPLSのラベル操作(push / swap / pop)とPHP
- MPLSのTTL処理とMTU
- LDPとは
- LDPのラベル配布モードとラベルスペース
- LDP-IGPシンクロナイゼーションとLDPセッション保護
- LDPのラベル広告制御(フィルタリング)
- LDPのセッション認証(TCP MD5)
- MPLSのOAM(LSP Ping / LSP Traceroute)
- MPLS TE(RSVP-TE)とは
- MPLS TEのCSPFと経路の制約(帯域 / affinity / TEメトリック)
- MPLS TEトンネルへのトラフィック誘導
- MPLS TEのFRR(リンク保護とノード保護)
- MPLS TEのFRR(auto-tunnel backupとSRLG)
- MPLSのQoS(EXPとuniform / pipe / short-pipe)
- MPLSのQoSの帯域制御とキューイング(policer / shaper / priority)