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