DUICUO

BGPルーターを試してみませんか? お金を払って購入する必要はありません。この記事では、CentOSを使ってBGPルーターを作成する方法を説明します。

詳細に入る前に、BGPの背景情報を少し説明する必要があります。ボーダーゲートウェイプロトコル(BGP)は、インターネットにおけるドメイン間ルーティングプロトコルの事実上の標準です。BGPの用語では、グローバルインターネットは相互接続された数千の自律システム(AS)で構成されており、各ASは特定のオペレータが提供するネットワーク管理ドメインを表しています(元米国大統領ジョージ・W・ブッシュ氏でさえ、独自のAS番号を持っていたと言われています)。

[[125904]]

グローバルネットワークの到達可能性を確保するには、各ASがインターネット上の他のASに到達する方法を把握している必要があります。ここでBGPが役立ちます。BGPは、ASが近隣のASとルーティング情報を交換するために使用する言語です。このルーティング情報は、BGPラインまたはBGPプレフィックスと呼ばれることが多く、AS番号(ASN:グローバルに一意の番号)と関連するIPアドレスブロックで構成されます。すべてのBGPラインが学習され、ローカルBGPルーティングテーブルに記録されると、各ASはインターネット上の任意のパブリックIPアドレスに到達する方法を把握できるようになります。

異なるアプリケーションサーバー(AS)間のルーティングが可能であることが、BGPが外部ゲートウェイプロトコル(EGP)またはドメイン間プロトコルと呼ばれる主な理由です。OSPF、IS-IS、RIP、EIGRPなどのルーティングプロトコルは内部ゲートウェイプロトコル(IGP)またはドメイン内ルーティングプロトコルですが、BGPは単一ドメイン内のルーティングを処理するために使用されます。

テスト計画

このチュートリアルでは、次のトポロジを使用します。

オペレータ A がオペレータ B とルートを交換するために BGP ピアを確立したいとします。それぞれの AS 番号と IP アドレス空間の詳細を以下に示します。

  • キャリアA : ASN(100)、IPアドレス空間(100.100.0.0/22)、BGPルータのeth1ネットワークインターフェースカードに割り当てられたIPアドレス(100.100.1.1)

  • キャリアB : ASN(200)、IPアドレス空間(200.200.0.0/22)、BGPルータのeth1ネットワークインターフェースカードに割り当てられたIPアドレス(200.200.1.1)

ルーターAとルーターBは、100.100.0.0/30サブネットを使用して相互に接続します。理論上は、ISPから任意のサブネットにアクセスし、相互接続できます。実際のシナリオでは、ISP AとISP B間の接続を実現するには、30ビットのパブリックIPアドレス空間を使用することをお勧めします。

CentOSにQuaggaをインストールする

Quagga がまだインストールされていない場合は、yum を使用してインストールできます。

  1. # yum でクアッガをインストール

CentOS 7をご利用の場合は、SELinuxを設定するために以下のポリシーを適用する必要があります。適用しない場合、SELinuxはZebraデーモンによる設定ディレクトリへの書き込みをブロックします。CentOS 6をご利用の場合は、この手順をスキップできます。

  1. # setsebool -P zebra_write_config 1

Quagga ソフトウェアスイートには、連携して動作する複数のデーモンが含まれています。BGP ルーティングに関しては、以下の 2 つのデーモンの構築に焦点を当てます。

  • Zebra : カーネル インターフェイスと静的ルーティングに使用されるコア デーモン。
  • BGPd : BGP デーモン。

ログ記録を構成する

Quagga をインストールしたら、次のステップは Zebra を設定して BGP ルーターのネットワークインターフェースを管理することです。まずは Zebra の設定ファイルを作成し、ログ記録を有効にします。

  1. # cp /usr/share/doc/quagga-XXXXX/zebra.conf.sample /etc/quagga/zebra.conf

CentOS 6 システムの場合:

  1. # サービスゼブラ開始
  2. # chkconfig ゼブラオン

CentOS 7の場合:

  1. # systemctl ゼブラを起動
  2. # systemctl ゼブラを有効にする

Quaggaはvtyshと呼ばれる独自のコマンドラインツールを提供しており、CiscoやJuniperなどのルーターベンダーと互換性がありサポートされているコマンドを入力できます。このチュートリアルの残りの部分では、vtyshシェルを使用してBGPルーティングを設定します。

vtysh シェル コマンドを起動するには、次のように入力します。

  1. # vtysh

プロンプトはこのホスト名に変更され、vtysh シェル内にいることが示されます。

  1. ルーター- A #

ここで、次のコマンドを使用して、Zebra のログ ファイルを構成します。

  1. ルータ- A # configure terminal
  2. ルータ-A ( config ) #ログファイル/var/log/quagga/quagga.log
  3. ルータ- A ( config )# 出口

Zebra 構成を永続的に保存します。

  1. ルータ- A # 書き込み

ルータ B でも同じ手順を実行します。

ピアIPアドレスを構成する

次に、利用可能なインターフェースにピア IP アドレスを設定します。

  1. ルータ- A # show interface #インターフェース情報を表示

  1. インターフェースeth0起動しており回線プロトコル検出は無効になっています
  2. インターフェースeth1起動しており回線プロトコル検出は無効になっています

eth0 インターフェイスのパラメータを設定します。

  1. サイト- A - RTR # ターミナルの設定
  2. サイト- A - RTR ( config )# インターフェースeth0
  3. サイト-A - RTR config - if # IPアドレス100.100.0.1/30
  4. サイト- A - RTR ( config - if )#説明"ルータBへ"
  5. サイト- A - RTR ( config - if )# シャットダウンなし
  6. サイト- A - RTR ( config - if )# 出口

eth1 インターフェイスのパラメータの設定を続けます。

  1. サイト- A - RTR ( config )# インターフェースeth1
  2. サイト-A - RTR config - if # IPアドレス100.100.1.1/24
  3. サイト- A - RTR ( config - if )#説明"プロバイダー A ネットワークからのテスト IP"
  4. サイト- A - RTR ( config - if )# シャットダウンなし
  5. サイト- A - RTR ( config - if )# 出口

次に設定を確認します。

  1. ルータ- A # show interface

  1. インターフェースeth0起動しており回線プロトコル検出は無効になっています
  2. 説明 「ルータBへ」
  3. inet 100.100 . 0.1 / 30ブロードキャスト100.100 . 0.3
  4. インターフェースeth1起動しており回線プロトコル検出は無効になっています
  5. 説明 「プロバイダーAネットワークからのIPテスト」
  6. inet 100.100 . 1.1 / 24ブロードキャスト100.100 . 1.255

  1. ルータ- A # show interface description # インターフェースの説明を表示

  1. インタフェース 状態 プロトコル 説明
  2. eth0 が不明な「ルータ B へ」アップ
  3. eth1 up 不明「プロバイダーAネットワークからのテストIP」

すべて正常に見える場合は、設定を保存することを忘れないでください。

  1. ルータ- A # 書き込み

同様に、ルータ B でも設定を繰り返します。

次のステップに進む前に、IP が相互に ping できることを確認しましょう。

  1. ルーター- A # ping 100.100.0.2

  1. ピン値100.100 . 0.2 100.100.0.2 56 84 バイトのデータ
  2. 64バイトから 100.100 . 0.2 : icmp_seq = 1 ttl = 64時間= 0.616ミリ秒

次に、BGP ピアリングとプレフィックスの設定を続けます。

#p#

BGPピアリングを構成する

BGPサービスを担当するQuaggaデーモンはbgpdと呼ばれます。まずは、その設定ファイルを準備しましょう。

  1. # cp /usr/share/doc/quagga-XXXXXXX/bgpd.conf.sample /etc/quagga/bgpd.conf

CentOS 6 システムの場合:

  1. # サービス bgpd を開始
  2. # chkconfig bgpd をオンにする

CentOS 7の場合:

  1. # systemctl bgpd を起動します
  2. # systemctl bgpd を有効にする

さあ、クアッガの殻の中に入りましょう。

  1. # vtysh

最初のステップは、現在BGPセッションが設定されていないことを確認することです。バージョンによっては、AS番号7675のBGPセッションが見つかる場合があります。このセッションは不要なので、削除します。

  1. ルータ- A # show running-config

  1. ... ... ...
  2. ルータ BGP 7675
  3. bgp ルーター- ID 200.200 . 1.1
  4. ... ... ...

事前に設定された BGP セッションの一部を削除し、必要なセッションに置き換えます。

  1. ルータ- A # configure terminal
  2. ルータ- A ( config )# ルータなしbgp 7675
  3. ルータ- A ( config )# router bgp 100
  4. ルータ- A ( config )# いいえ 自動-概要
  5. ルータ- A ( config )# 同期なし
  6. ルータ-A ( config - router ) # neighbor 100.100.0.2 remote - as 200
  7. ルータ- A ( config - router ) # neighbor 100.100 . 0.2 description "provider B"
  8. ルータ- A ( config - router )# 出口
  9. ルータ- A ( config )# 出口
  10. ルータ- A # 書き込み

ルータ B も同様に設定されます。次の設定は参考として提供されています。

  1. ルータ- B # ターミナルの設定
  2. ルータ- B ( config )# ルータなしbgp 7675
  3. ルータ- B ( config )# router bgp 200
  4. ルータ- B ( config )# いいえ 自動-概要
  5. ルータ- B ( config )# 同期なし
  6. ルータ- B ( config - router ) # neighbor 100.100 . 0.1 remote - as 100
  7. ルータ- B ( config - router ) # neighbor 100.100 . 0.1 description "provider A"
  8. ルータ- B ( config - router )# 出口
  9. ルータ- B ( config )# 出口
  10. ルータ- B # 書き込み

関連するルーターの設定が完了すると、2つのルーター間のピアリングが確立されます。以下のコマンドを実行して、ピアリングが確立されていることを確認しましょう。

  1. ルータ- A # show ip bgp summary

出力から「State/PfxRcd」セクションを確認できます。ピアリングがオフの場合、出力には「Idle」または「Active」と表示されます。「Active」という言葉は、ルータでは常に否定的な意味合いを持つことを覚えておいてください。これは、ルータがネイバー、プレフィックス、またはルートをアクティブに検索していることを意味します。ピアリングがオンの場合、「State/PfxRcd」の出力状態には、特別なネイバーからプレフィックス番号が送信されます。

この例の出力では、BGPピアリングはAS100とAS200間のみで稼働しています。そのため、プレフィックスは変更されず、右端の列の値は0になります。

構成プレフィックスのアナウンス

冒頭で述べたように、AS 100 は 100.100.0.0/22 を使用してアドバタイズします。また、この例では、AS 200 も同様に 200.200.0.0/22 を使用してアドバタイズします。これらのプレフィックスは、以下のように BGP 設定に追加する必要があります。

ルータAの場合:

  1. ルータ- A # configure terminal
  2. ルータ- A ( config )# router bgp 100
  3. ルータ-A ( config ) #ネットワーク100.100 . 0.0 / 22
  4. ルータ- A ( config )# 出口
  5. ルータ- A # 書き込み

ルータBの場合:

  1. ルータ- B # ターミナルの設定
  2. ルータ- B ( config )# router bgp 200
  3. ルータ- B ( config )#ネットワーク200.200 . 0.0 / 22
  4. ルータ- B ( config )# 出口
  5. ルータ- B # 書き込み

この時点で、両方のルータは必要に応じてプレフィックスのアドバタイズを開始します。

テストプレフィックスアナウンス

まずはプレフィックスの数が変更されたかどうかを確認しましょう。

  1. ルータ- A # show ip bgp summary

受信したプレフィックスの詳細を表示するには、次のコマンドを使用します。このコマンドは、ネイバー 100.100.0.2 によって受信されたプレフィックスの合計数を表示します。

  1. ルータ- A # show ip bgp neighbors 100.100.0.2 advertised-routes

ネイバーから受信したプレフィックスを判別するには:

  1. ルータ- A # show ip bgp neighbors 100.100.0.2 ルート

すべての BGP ルーターを表示することもできます。

  1. ルータ- A # show ip bgp

上記のコマンドはすべて、BGP 経由でルータ テーブルに学習されたルータを確認するために使用できます。

  1. ルータ- A # show ip route

  1. コード: K - カーネルルーティング、 C - リンク S - 静的 R - ルーティング情報プロトコル O - オープン最短経路優先プロトコル
  2.  
  3. - 中間システムルーティングプロトコル、 B- ボーダーゲートウェイプロトコル > - ルートを選択、 * - FIBルーティング
  4.  
  5. C >* 100.100 . 0.0 / 30 直接接続 eth0
  6. C >* 100.100 . 1.0 / 24 直接接続 eth1
  7. B >* 200.200.0.0 / 22 [ 20/0 ] 100.100経由 0.2 eth0 00:06:45

  1. ルータ- A # show ip route bgp

  1. B >* 200.200.0.0 / 22 [ 20/0 ] 100.100経由 0.2 eth0 00:08:13

BGP によって学習されたルートは Linux ルーティング テーブルにも表示されます。

  1. [ root@ルータ- A ~]# ip route

  1. 100.100 . 0.0 / 30 dev eth0 proto カーネルスコープリンク src 100.100 . 0.1
  2. 100.100 . 1.0 / 24 dev eth1 proto カーネルスコープリンク src 100.100 . 1.1
  3. 200.200 100.100経由で0.0 / 22 0.2 dev eth0 プロト ゼブラ

最後に、pingコマンドを使用して接続をテストします。pingは成功します。

  1. [ root@Router - A ~]# ping 200.200 . 1.1 - c 2

要約すると、このチュートリアルはCentOS上で基本的なBGPルーターを実行する方法に焦点を当てています。このチュートリアルではBGPの設定方法を説明します。フィルターの設定、BGPプロパティの調整、ローカル優先度、パスの準備といったより高度な設定については、後続のチュートリアルで説明します。

このチュートリアルが皆様のお役に立てれば幸いです。


出典: http://xmodulo.com/centos-bgp-router-quagga.html

著者:Sarmed Rahman、翻訳者:disylee、校正者:wxy