Vyattaで経路制御①(Prefix-listで経路フィルタ)

network Vyatta
Published: 2011-07-04

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