Skip to content

Cisco

GoBGP の基本的な使い方

GoBGP は Go 言語で実装された BGP デーモンです。VIRL 上でネットワーク機器と組み合わせて使うと BGP の検証をする際に便利です。今回は簡単な使い方をメモしておきます。

Routing Context を指定し、都度の VRF 指定を省略する

ネットワーク機器では一台で複数のルーティングテーブルを保有出来る機器があります。こういった機能のことは各社毎に呼び名が異なります。一例を挙げると以下の通りです。

メーカー 呼び名
Cisco VRF (Virtual Routing Forwarding)
Juniper Routing Instance
F5 Networks Route Domain

Cisco 製品を例にとると、通常は実行するコマンド毎に参照するルーティングテーブルが所属する VRF 名を指定します。IOSv で「VRF-1 のルーティングテーブルを参照して Ping を実行する」場合は以下のようになります。

1
2
3
4
IOSv# ping vrf VRF-1 10.0.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.1.1, timeout is 2 seconds:
!!!!!

これを連続して実行すると以下のようになります。数が多くなってくると都度、VRF 名を指定するのが面倒になってきます (操作ミスも増えます)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
IOSv# ping vrf VRF-1 10.0.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/3 ms

IOSv# ping vrf VRF-1 10.0.1.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.1.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/3/7 ms

IOSv# ping vrf VRF-1 10.0.1.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.1.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/5 ms

このような場合、以下のコマンドで「VRF 名の指定を省略した場合に参照されるデフォルト VRF」を指定することが出来ます。

IOSv / IOS-XE / NX-OSv IOS-XRv
RoutingContext を指定 VRF に変更する routing-context vrf VRF-NAME set default-vrf VRF-NAME
RoutingContext を default/global に戻す routing-context vrf default set default-vrf none

尚、このコマンドは 1 セッションの間のみ、有効です。例えば、Routing Context を変更後にログアウトし、再ログインすると default/global VRF に戻ります。以下の環境で試してみます。

VIRL 上で Ubuntu を使う

VIRL にはデフォルトで Ubuntu のイメージが登録されています。VIRL 1.0.26 だと Ubuntu 14.04.2 LTS が登録されていました。

1
2
3
4
5
6
cisco@server-1:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.2 LTS
Release:    14.04
Codename:   trusty

今回は VIRL 上で Ubuntu を使ってみます。

Cisco VIRL でよく使う「検証用コンフィグ・テンプレート」

Cisco VIRL で IOS 等を検証する際に「よく使うコンフィグのテンプレート」をメモしておきます。機種によって異なりますが、概ね以下のような方針にしています。(仮想環境では無く) 実機で検証する際はこれらに加え、コンソールポートのスピードを速くする等、微修正しています。

  1. 検証用のコンフィグテンプレートなので、セキュリティ設定は度外視
  2. 時刻は日本 (JST +9) に設定
  3. 名前解決はさせない
  4. バナー設定は削除
  5. コンソール / TELNET / SSH のタイムアウト時間は長めに設定
  6. pager は設定しない

あくまで検証環境用のコンフィグ・テンプレートな点はご注意を!

IOS で MED は除去出来ない?

Cisco IOS で「BGP の MED 属性を(ゼロでは無く)除去し、missing な状態に戻して広告出来るか?」試してみました。結論から述べると上手くいきませんでした。機会があれば「何か方法が無いか?」を深掘りしてみようと思います。また、IOS-XR や NX-OS、JUNOS での振る舞いも、改めて確認してみようと思います。

Administrative Distance / Route Preference 値は各社実装ごとで異なる可能性がある

「複数のプロトコルで同じ経路を学習している場合、どのプロトコルを優先するか?」という指標を、各社で以下のように呼んでいます。一般的には「値が小さい程、優先される」という振る舞いをします。

メーカー 呼び方
Cisco 「Distance」または「Administrative Distance」
Juniper 「Route Preference」
MikroTik 「Distance」または「Route Distance」

稀に「〜 プロトコルの AD 値は xx だよね」と回答される方がいますが、この「優先指標」は各社の実装によって差があります。ですので、「Cisco の値しか知らない」「各社製品が全て同じ値だ、と思い込んでいる」と、意図しないトラフィックフローを設計してしまう可能性があります。例えば、以下のような注意点があります。

  1. eBGP と iBGP だと、Cisco では「eBGP = 20 / iBGP = 200」だが、Juiper だと「いずれも 170」
  2. OSPF と eBGP だと、Cisco では「eBGP 優先」だが、Juniper だと「OSPF 優先」

代表的なプロトコルを一覧にすると、以下の通りです。MikroTik RouterOS の Distance は全て Cisco ISO と同じです(ちなみに「MME」とは RouterOS 独自のルーティングプロトコルです)。