IOSでのBGP設定方法
!
ipv6 unicast-routing
!
!
!
router bgp <自分のAS番号>
no bgp default ipv4-unicast
bgp log-neighbor-changes
bgp graceful-restart
neighbor <相手のIPv6アドレス> remote-as <相手のAS番号>
! neighbor <相手のIPv6アドレス> update-source <相手がつながっているインターフェース>
! ↑ link-local addressをpeerとの通信に使用する場合に、そのインターフェースを指定する
!
address-family ipv6
neighbor <相手のIPv6アドレス> activate
neighbor <相手のIPv6アドレス> soft-reconfiguration inbound
network <経路広告する自分のIPv6アドレス>
exit-address-family
!
!
ipv6 route <経路広告する自分のIPv6アドレス> Null0
!
ピアグループ入り版 (未テスト) - genta
! 追加した部分を,アンダーラインで示しています.
!
ipv6 unicast-routing
!
!
router bgp <自分のAS番号>
no bgp default ipv4-unicast
bgp log-neighbor-changes
bgp graceful-restart
neighbor peer peer-group
neighbor <相手のIPv6アドレス> remote-as <相手のAS番号>
! neighbor <相手のIPv6アドレス> update-source <相手がつながっているインターフェース>
! ↑ link-local addressをpeerとの通信に使用する場合に、そのインターフェースを指定する
!
address-family ipv6
network <経路広告する自分のIPv6アドレス>
! neighbor <ピアグループ名> ..., で,複数のピアに共通する設定を入れることができます
neighbor peer activate
neighbor peer soft-reconfiguration inbound
neighbor <相手のIPv6アドレス> peer-group peer
exit-address-family
!
!
ipv6 route <経路広告する自分のIPv6アドレス> Null0
ピアグループ + 経路フィルタ入り版 (未テスト) - genta
! 追加した部分を,アンダーラインで示しています.
!
ipv6 unicast-routing
!
!
router bgp <自分のAS番号>
no bgp default ipv4-unicast
bgp log-neighbor-changes
bgp graceful-restart
neighbor peer peer-group
neighbor <相手のIPv6アドレス> remote-as <相手のAS番号>
! neighbor <相手のIPv6アドレス> update-source <相手がつながっているインターフェース>
! ↑ link-local addressをpeerとの通信に使用する場合に、そのインターフェースを指定する
!
address-family ipv6
network <経路広告する自分のIPv6アドレス>
! neighbor <ピアグループ名> ..., で,複数のピアに共通する設定を入れることができます
neighbor peer activate
neighbor peer soft-reconfiguration inbound
neighbor peer distribute-list peer-in in
neighbor peer distribute-list peer-out out
neighbor <相手のIPv6アドレス> peer-group peer
exit-address-family
!
!
ipv6 route <経路広告する自分のIPv6アドレス> Null0
!
ipv6 access-list peer-in deny ::/0 exact-match
ipv6 access-list peer-in deny <経路広告する自分のIPv6アドレス>
ipv6 access-list peer-in permit any
ipv6 access-list peer-out deny ::/0 exact-match
ipv6 access-list peer-out permit <経路広告する自分のIPv6アドレス>
・よくあるミス
BGPPeerをlink-local Addressで張っている場合、BESTPATHがその対向ルータになった場合トラフィックが落ちる
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:2F0:104:E010:221:70FF:FE32:571D, 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:2F0:104:E010:221:70FF:FE32:571D, 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は複数記述可能で、先頭に記載されたものから優先的に利用される。
※到達性のない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
!
参考文献
http://www.cisco.com/en/US/docs/ios/ipv6/configuration/guide/ip6-mptcl_bgp.html#wp1037072