IHAnet関連で、Vyattaの経路制御を試しているので少しずつメモ書きします。多分あってるんじゃないかなー。BGPでの経路制御は一つの目的でも色々なやり方があるので、これが正しいとは限りません。
フィルタしたい経路用のPrefix-listを作成する
PeerとのBGPがestablishになると、ルーティングテーブル上にPeerが広告した経路が載ってきます。なんでも載せられてしまうと自身のルーティングテーブルがおかしくなってしまうので、広告されるはずのない経路は受け取らないようにします。
まずは、受け取りたくない経路をdenyする為のprefix-listを作成し、ルール番号をずらしながら登録していきます。Prefix-listは暗黙のDenyが存在するので、Rule999のようにpermitしたい物を明示します。Ciscoと比べると縦長で一覧性が悪いです。。。
policy{
prefix-list6 Special-Use-prefix {
rule 10 {
action deny
prefix ::/0
}
rule 20 {
action deny
le 128
prefix ::/8
}
rule 30 {
action deny
le 128
prefix fe80::/10
}
rule 40 {
action deny
le 128
prefix fec0::/10
}
rule 50 {
action deny
le 128
prefix fc00::/7
}
rule 60 {
action deny
prefix ff00::/8
}
rule 70 {
action deny
prefix 2001:db8::/32
}
rule 80 {
action deny
le 128
prefix 2001:e41:31d4:3648::/64
}
rule 999 {
action permit
le 128
prefix ::/0
}
}
- Rule10:デフォルトルート
- Rule20:ループバック、未指定、予約等を一括指定
- Rule30:リンクローカル
- Rule40:元サイトローカル
- Rule50:ユニークローカル
- Rule60:マルチキャスト
- Rule70:文章用空間
- Rule80:自ASが広告している経路
- Rule999:上記Ruleにmatchしなかった経路
作成したprefix-listをPeerに関連付ける
下記の様に各Peerごとにprefix-listを関連付けてもいいのですが、Peerが増えるたびに同じ設定しなければなりません。今はinのprefix-listだけなので簡単ですが、一つのpeerに対して、outのprefix-listやas-path-list、route-mapなど様々な経路制御を設定するようになると、設定作業が煩雑になります。
bgp 64585 {
address-family {
ipv6-unicast {
network 2001:e41:31d4:3648::/64 {
}
}
}
neighbor 2001:**:**:**::6 {
address-family {
ipv6-unicast {
prefix-list {
import Special-Use-prefix
}
}
これは運用的にイマイチなので、peer-groupの設定を利用します。peer-groupを利用すると、フィルタが設定されたpeer-groupにpeerを追加だけで、そのpeerに全経路フィルタが適応されるようになります。下記の例は、IHAnetというpeer-groupを作り、先程作成した「Special-Use-prefix」を関連づけています。line25の部分です。
protocols {
bgp 64585 {
address-family {
ipv6-unicast {
network 2001:e41:31d4:3648::/64 {
}
}
}
neighbor 2001:**:**:**::6 {
address-family {
ipv6-unicast {
}
}
remote-as 64***
update-source 2001:**:**:**::5
}
peer-group IHAnet {
address-family {
ipv6-unicast {
filter-list {
import peer-path
}
prefix-list {
export this-network
import Special-Use-prefix
}
soft-reconfiguration {
inbound
}
このpeer-groupに、各Peerを追加すれば設定終了なのですが、どうもうちのVyattaでは設定出来ないらしい。下記の通り、Peerの設定項目にPeer-groupが出てこない。
# set protocols bgp 64585 neighbor 2001:**:**:**::6 address-family ipv6-unicast
allowas-in distribute-list prefix-list soft-reconfiguration
attribute-unchanged filter-list remove-private-as unsuppress-map
capability maximum-prefix route-map
default-originate nexthop-local route-reflector-client
disable-send-community nexthop-self route-server-client
[edit]
下記のコマンドでpeerとpeer-groupを関連づけると、IPv4のBGPにpeer-groupの設定が反映されてしまって意味がありませんでした。
root@v6-Gateway# set protocols bgp 64585 neighbor 2001:**:**:**::6 peer-group IHAnet
仕方がないので、Vyatta経由ではなくQuaggaで直接peerを追加します。Ciscoのままなので簡単です。
# vts ysh
#configure terminal
(config)# router bgp
(config)# router bgp 64585
(config-router)# address-family ipv6 unicast
(config-router-af)# neighbor 2001:**:**:**::6 peer-group IHAnet
動作確認
こうする事で、IPv6でpeer-groupが利用可能になります。実際にSpecial-Use-prefixが適応されている事がline11で確認できます。試しにSpecial-Use-prefixのrule90に、peerが広告するprefixを追加してみた所、peerから経路を受け取れなくなりましたので、ちゃんと動いているようです。
$ show ipv6 bgp neighbors
BGP neighbor is 2001:**:**:**::6, remote AS 64***, local AS 64585, external link
Member of peer-group IHAnet for session parameters
(中略)
For address family: IPv6 Unicast
IHAnet peer-group member
Inbound soft reconfiguration allowed
Community attribute sent to this neighbor(both)
Inbound path policy configured
Outbound path policy configured
Incoming update prefix filter list is *Special-Use-prefix
Outgoing update prefix filter list is *this-network
Incoming update AS path filter list is *peer-path
85 accepted prefixes