[]Vyattaで経路制御?(Prefix-listで経路フィルタ)

IHAnet関連で、Vyattaの経路制御を試しているので少しずつメモ書きします。多分あってるんじゃないかなー。BGPでの経路制御は一つの目的でも色々なやり方があるので、これが正しいとは限りません。

フィルタしたい経路用のPrefix-listを作成する

PeerとのBGPがestablishになると、ルーティングテーブル上にPeerが広告した経路が載ってきます。なんでも載せられてしまうと自身のルーティングテーブルがおかしくなってしまうので、広告されるはずのない経路は受け取らないようにします。

まずは、受け取りたくない経路をdenyする為のprefix-listを作成し、ルール番号をずらしながら登録していきます。Prefix-listは暗黙のDenyが存在するので、Rule999のようにpermitしたい物を明示します。Ciscoと比べると縦長で一覧性が悪いです。。。


[text]
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
}
}
[/text]
  • 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など様々な経路制御を設定するようになると、設定作業が煩雑になります。


    [text]
    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
    }
    }
    [/text]

    これは運用的にイマイチなので、peer-groupの設定を利用します。peer-groupを利用すると、フィルタが設定されたpeer-groupにpeerを追加だけで、そのpeerに全経路フィルタが適応されるようになります。下記の例は、IHAnetというpeer-groupを作り、先程作成した「Special-Use-prefix」を関連づけています。line25の部分です。

    [text]
    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
    }
    [/text]

    このpeer-groupに、各Peerを追加すれば設定終了なのですが、どうもうちのVyattaでは設定出来ないらしい。下記の通り、Peerの設定項目にPeer-groupが出てこない。

    [text]
    # 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]
    [/text]

    下記のコマンドでpeerとpeer-groupを関連づけると、IPv4のBGPにpeer-groupの設定が反映されてしまって意味がありませんでした。

    [text]
    root@v6-Gateway# set protocols bgp 64585 neighbor 2001:**:**:**::6 peer-group IHAnet
    [/text]

    仕方がないので、Vyatta経由ではなくQuaggaで直接peerを追加します。Ciscoのままなので簡単です。

    [text]
    # 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
    [/text]

    動作確認

    こうする事で、IPv6でpeer-groupが利用可能になります。実際にSpecial-Use-prefixが適応されている事がline11で確認できます。試しにSpecial-Use-prefixのrule90に、peerが広告するprefixを追加してみた所、peerから経路を受け取れなくなりましたので、ちゃんと動いているようです。


    [text]
    $ 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
    [/text]