BGPPeerをlink-local Addressで張っている時、BESTPATHがその対向ルータになった場合トラフィックが落ちる

IHANetのほうでもまとめておきました。ちょっとこれは気になった現象だったのでこっちにも記載。

IOSは、nexthop Addressにlink-local Addressが利用されている場合、そのnext-hop AddressがBESTPATHとして選択されたとき正しくルーティングすることができない。
そのため、link-local AddressでPeerを張っているルータから経路をもらうときは、意図的にnext-hopを変えなければならない。

・nexthop Addressがグローバルアドレスのとき
正しくICMPv6が到達する。

Sending 5, 100-byte ICMP Echos to 2001:xxx::xxxx, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/21/24 ms

・nexthop Addressがlinklocal Addressのとき
正しくICMPv6が到達する用に見えるが、実際に応答しているのは自分自身でパケットは送信されていない。
そのためRTTが0になる。

Sending 5, 100-byte ICMP Echos to 2001:xxx::xxxx, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/0/0 ms

・受け取るときの設定
link-local AddressでPeerを張っているルータから経路を受け取るときは以下の設定を行う。
受け取った経路のnexthopを書き換えるとき、書き換え先アドレスは必ず設定するルータから到達可能なグローバルアドレスにすること。このとき、到達可能性はIGPかstaticで設定する。もしかしたらBGPで受け取った経路で解決できるかも?

また、書き換えたnexthopを優先的に使いたいときは local-preference を設定しておくとよい。nexthopは複数記述可能で、先頭に記載されたものから優先的に利用される。

# 特定のneighborから受け取った経路についてroute-mapを適応する
router bgp xxxxx
 address-family ipv6 unicast
  neighbor FE80::XXXX:XXXX route-map bgp-linklocal-in in

# route-mapを適応するprefixを指定
ipv6 prefix-list ipv6-any seq 10 permit ::/0 le 128

# route-mapの詳細
route-map bgp-linklocal-in permit 10
 match ipv6 address prefix-list ipv6-any
 set ipv6 next-hop グローバルアドレス
 set local-preference 100
!

到達性のないnexthopアドレスを入力したときの挙動は未検証なので、今度やってみたいです。

参考文献
http://www.cisco.com/en/US/docs/ios/ipv6/configuration/guide/ip6-mptcl_bgp.html#wp1037072