概要
mpls ip-ttl-propagate について
・mpls ip-ttl-propagate は IP Header 内の TTL Field と MPLS Header 内の TTL Field 間で、その値についての伝搬を制御する機能となります。
・IOS XR での Default の挙動は IP パケットが IP 網から MPLS 網内に入る際には IP Header 内の TTL 値が MPLS Header 内 の TTL 値に引き継がれ、MPLS 網内では hop を通過する毎に MPLS TTL 値が減少し MPLS 網内を抜ける際には、その MPLS TTL 値を IP Header 内の TTL 値へと引き継がれます。この機能を disable とした場合は、MPLS TTL 値を 255 として、MPLS 網内を通過する毎に MPLS TTL 値は減少しますが、網内を抜ける際にはこの値は引き継がれません。
・この機能は、traceroute による MPLS 網内のアドレス情報を表示させない用途として主に使用されています。
Default |
Disable |
|
|
ネットワーク構成
上記構成において PE 側 にて mpls ip-ttl-propagate を disable に設定しているにも関わらず、
CE1 から CE4 に向けて traceroute を実施した際に網側のアドレスが表示されます。
CE1
RP/0/RSP0/CPU0:CE1#traceroute 4.4.4.4
Type escape sequence to abort. Tracing the route to 4.4.4.4
1 172.0.12.2 0 msec 0 msec 0 msec 2 10.0.23.3 [MPLS: Label 16005 Exp 0] 0 msec 0 msec 0 msec 3 172.0.34.4 0 msec * 0 msec
|
PE3
RP/0/RSP0/CPU0:PE3(config)#do sho run | i mpls Building configuration... mpls ldp mpls ip-ttl-propagate disable |
IOS-XR では icmp time exceeded packet を作成して送信する際に ingress 側の interface 情報が参照されます。
そのため、traceroute では 'mpls ip-ttl-propagate disable' を設定していても、mpls 網内のアドレス が CE 側
からの traceroute の結果に表示されますが、これは期待された動作となります。
この icmp packet の response を適切な source にするコマンドが 'icmp ipv4 source vrf ' となります。
動作確認
PE3
PE3 にて 'icmp ipv4 source vrf' を設定していない場合の 'debug icmp ipv4' の出力結果
<snip> RP/0/RSP0/CPU0:Nov 29 09:30:47.550 : ipv4_io[264]: Punt reason: TTL Expired RP/0/RSP0/CPU0:Nov 29 09:30:47.550 : ipv4_io[264]: normal pak: type: 11, code: 0, mtu: 0, df: 0, ttl: 1 RP/0/RSP0/CPU0:Nov 29 09:30:47.550 : ipv4_io[264]: ip_offset: 4 RP/0/RSP0/CPU0:Nov 29 09:30:47.550 : ipv4_io[264]: ip_lib_mpls_ipv4_rx_punt_pak: badpak ip hdr: src=<172.0.12.1>,dst=<4.4.4.4>,frag_off=0x0 RP/0/RSP0/CPU0:Nov 29 09:30:47.550 : ipv4_io[264]: Creating icmp time exceed pkt RP/0/RSP0/CPU0:Nov 29 09:30:47.550 : ipv4_io[264]: icmp time exceed pkt i/f 0x800 RP/0/RSP0/CPU0:Nov 29 09:30:47.550 : ipv4_io[264]: orig ssz: 50,ip_offset: 4,icmp_size: 168,stacksz: 4, mpls_off: 0 RP/0/RSP0/CPU0:Nov 29 09:30:47.550 : ipv4_io[264]: pak_client_add_tail 122 RP/0/RSP0/CPU0:Nov 29 09:30:47.550 : ipv4_io[264]: ip_lib_mpls_ipv4_rx_punt_pak: ip_icmp hdr: src=<10.0.23.3>,dst=<172.0.12.1>,frag_off=0x0 RP/0/RSP0/CPU0:Nov 29 09:30:47.550 : ipv4_io[264]: Freeing icmp pkt RP/0/RSP0/CPU0:Nov 29 09:30:47.550 : ipv4_io[264]: ip_lib_mpls_ipv4_rx_punt_pak: sending icmp packet to: src=<10.0.23.3>,dst=<172.0.12.1> |
'icmp ipv4 source vrf' を有効にした場合
RP/0/RSP0/CPU0:Nov 29 09:41:45.364 : ipv4_io[264]: Punt reason: TTL Expired RP/0/RSP0/CPU0:Nov 29 09:41:45.364 : ipv4_io[264]: normal pak: type: 11, code: 0, mtu: 0, df: 0, ttl: 1 RP/0/RSP0/CPU0:Nov 29 09:41:45.364 : ipv4_io[264]: ip_offset: 4 RP/0/RSP0/CPU0:Nov 29 09:41:45.364 : ipv4_io[264]: ip_lib_mpls_ipv4_rx_punt_pak: badpak ip hdr: src=<172.0.12.1>,dst=<4.4.4.4>,frag_off=0x0 RP/0/RSP0/CPU0:Nov 29 09:41:45.364 : ipv4_io[264]: Creating icmp time exceed pkt RP/0/RSP0/CPU0:Nov 29 09:41:45.364 : ipv4_io[264]: icmp time exceed pkt i/f 0x800 RP/0/RSP0/CPU0:Nov 29 09:41:45.364 : ipv4_io[264]: orig ssz: 50,ip_offset: 4,icmp_size: 168,stacksz: 4, mpls_off: 0 RP/0/RSP0/CPU0:Nov 29 09:41:45.364 : ipv4_io[264]: pak_client_add_tail 122 RP/0/RSP0/CPU0:Nov 29 09:41:45.364 : ipv4_io[264]: ip_lib_mpls_ipv4_rx_punt_pak: ip_icmp hdr: src=<172.0.34.3>,dst=<172.0.12.1>,frag_off=0x0 RP/0/RSP0/CPU0:Nov 29 09:41:45.364 : ipv4_io[264]: Freeing icmp pkt RP/0/RSP0/CPU0:Nov 29 09:41:45.364 : ipv4_io[264]: ip_lib_mpls_ipv4_rx_punt_pak: sending icmp packet to: src=<172.0.34.3>,dst=<172.0.12.1> |
関連情報