VyOSとEdgeRouterにおけるBGPの設定と挙動の差異

目次

概要

本記事では、VyOSとEdgeRouterそれぞれにおいてBGPを設定する場合の設定項目の差異と、挙動の違いについてまとめます。
隅々まで調査したわけではなく、利用する中で判明した点をまとめたものですので、完璧ではないことを予めご理解ください。

VyOS

VyOSとは、オープンソースで提供されるソフトウェアルータです。
Debianをベースとして開発されており、ルーティングなどのネットワークの基本的な機能から、各種VPNプロトコルやトンネリングプロトコルなどを扱うことが出来ます。
vyos.io

EdgeRouter

EdgeRouterは、Ubiquiti Networks社が発売しているネットワーク機器のブランドです。
低価格でありながら高機能であり、またライセンス料などが発生しないという特徴を持つ製品です。
中身はVyOSベースとなっているようなので、基本的にVyOSのドキュメントを参考にすることが出来ます。

本記事では、EdgeOS v2.0.9-hotfix.1 を例に取り上げていきます。

BGP設定周りのコマンド体系

VyOSでは1.2系列からBGP設定周りのコマンド体系が一部変更となっています。
例えば、広報するネットワークを明記する場合、VyOS 1.2系以降では次のように記述します。

1
set protocols bgp address-family ipv4-unicast network 192.168.1.0/24

しかし、VyOS 1.1.8以前、またはEdgeRouterにおいては、address-family の下に ipv4-unicast という設定項目は存在しません。
したがって、VyOS 1.1.8以前、またはEdgeRouterにおいては次のように記述する必要があります。

1
set protocols bgp 65001 network 192.168.1.0/24

network項目で設定したネットワークの広報動作の違い

上記で例を示した network で指定した広報したいネットワークの広報動作についても、VyOSとEdgeRouterで挙動の違いがみられます。
VyOSの場合、こちらのページに次のような記述があります。

1
By default, the BGP prefix is advertised even if it’s not present in the routing table. This behaviour differs from the implementation of some vendors.

これは、この network で設定したネットワークについては、そのネットワークがルーティングテーブル上に存在しない場合でも広報を行うことを示していると解釈できます。
しかしながら、EdgeRouter環境においてはこの挙動に違いがみられます。
例として、先ほどのネットワークの設定を、先に述べたコマンド体系の違いを考慮した上で次のような設定をEdgeRouterへ流し込んだとします。

1
2
3
4
5
6
7
8
9
protocols {
bgp 65001 {
neighbor 10.0.0.2 {
remote-as 65002
}
network 192.168.1.0/24 {
}
}
}

上記設定の場合、VyOSのドキュメントを信用する限り、192.168.1.0/24というネットワークがルーティングテーブル上に存在しなくてもremote-asであるAS65002に対してこのネットワークが広報されることになります。
ここで、上記設定を流し込んだEdgeRouter上でルーティングテーブルを確認してみると以下のようになっていたとします。

1
2
3
4
5
6
7
8
9
$ show ip route
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
> - selected route, * - FIB route, p - stale info

IP Route Table for VRF "default"
K *> 0.0.0.0/0 [20/0] via XXX.XXX.XXX.XXX, eth0, 07:09:35

すなわち、192.168.1.0/24というネットワークはルーティングテーブル上に存在しないという事です。
この状態で、自ASが広報しているネットワークを確認してみると、次のようになります。

1
$ show ip bgp neighbors 10.0.0.2 advertised-routes

結果を書き忘れたわけではありません。広報しているネットワークが存在しない場合、説明書きすら表示されません。
ということで、ルーティングテーブル上に存在しなくても広報されるはずの192.168.1.0/24というネットワークは、EdgeRouter環境においては広報されない、という事になります。
この点、VyOSと挙動が異なるようですので注意が必要です。

実際には、ルーティングテーブル上に無いネットワークを広報することは危険であると考えられます。したがって、VyOSのドキュメントに記載があるように、他ベンダーやEdgeRouterにおいてこのような実装がなされていること自体は不思議ではありません。
(多くの場合、redistributeなどの指定を行うと思います。)
また、VyOSのドキュメントには、次の設定を行うことで、ルーティングテーブル上に存在しないネットワークを広報しなくなるという旨の記載があります。

1
set protocols bgp parameters network-import-check

もう少し調査してみると、EdgeRouterには上記の設定項目は存在しないことが分かります。これは、デフォルトでこのチェックが行われていることを暗示していると言えます。
また、次のような設定項目が存在することを確認できます。

1
set protocols bgp 4220101001 parameters disable-network-import-check

コマンド名から推察するに、デフォルトで有効になっている「ルーティングテーブル上に存在するかどうかのチェック」を無効化するコマンドであると考えられます。
しかし、EdgeRouterを展開するUbiquiti Networksのコミュニティサイトのこのページには、次のような記述があります。

1
2
3
The list below shows other config settings that are no longer supported.
~~中略~~
protocols bgp <> parameters disable-network-import-check

つまり、EdgeOS v1.8.0以降では上記設定はサポートされなくなっています。
実際、上記設定を EdgeOS v2.0.9-hotfix.1 に流し込んでみても、挙動は変化しませんでした。

では、対象のネットワークがルーティングテーブル上に存在する場合は正しく広報が行われるのか。
試しに、次のような設定をしてみます。

1
set protocols static route 192.168.1.0/24 blackhole

上記は、192.168.1.0/24を宛先無しで静的ルート登録を行うものです。
先ほどと同様にルーティングテーブルを確認してみます。

1
2
3
4
5
6
7
8
9
10
$ show ip route
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
> - selected route, * - FIB route, p - stale info

IP Route Table for VRF "default"
K *> 0.0.0.0/0 [20/0] via XXX.XXX.XXX.XXX, eth0, 07:09:35
S *> 192.168.1.0/24 [1/0] is a summary, Null

これで、ルーティングテーブルに192.168.1.0/24というネットワークが登録されました。(多少無理矢理ですが…)
少し待ってから、先ほどと同様に自ASが広報しているネットワークについて確認してみます。

1
2
3
4
5
6
7
8
9
$ show ip bgp neighbors 10.0.0.2 advertised-routes
BGP table version is 45, local router ID is XXX.XXX.XXX.XXX
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
*> 192.168.1.0/24 10.0.0.1 100 32768 i

Total number of prefixes 1

ルーティングテーブルに登録された192.168.1.0/24というネットワークが広報されていることが確認できます。

ということで、EdgeRouterではルーティングテーブル上に存在しないネットワークは、たとえ指定したとしても広報されず、この動作はVyOSとは異なる というお話でした。

まとめ

EdgeRouterでBGPを扱うサンプルは割と散見されるのですが、「とりあえずBGPを動かしてみた」といった感じで実際の挙動に触れていないものが多かったので書いてみました。
VyOS 1.2系以降と、VyOS 1.1.8系以前やEdgeRouterでは、BGP周りのコマンド体系に違いがあります。
VyOSの情報を参考とする場合、注意が必要です。
また、BGP設定内の network で設定した挙動について、VyOSとEdgeRouterで違いがあることも確認できました。
実際、設定中にこの問題に直面したので、実験等でこの設定をされる際には注意が必要です。(ハマります)