LinuxでFRRouting (FRR) を使用したダイナミックルーティングの構築:OSPFからBGPまで

Network tutorial - IT technology blog
Network tutorial - IT technology blog

なぜスタティックルートを捨ててダイナミックルーティングに移行すべきなのか?

システム規模が拡大するにつれ、手動でのネットワーク管理は「悪夢」となります。50〜100台の仮想マシン(VM)を管理している場合、各ノードに対して ip route add を手動で入力するのはミスが発生しやすくなります。中間スイッチに障害が発生した際、手動でルートを更新しなければ、トラフィックは即座に遮断されてしまいます。

ダイナミックルーティングは、デバイス間で情報を自動的に交換することでこの問題を解決します。固定の経路を指定する代わりに、OSPFやBGPなどのプロトコルを使用して、障害発生時にサーバーが自ら新しい経路を見つけ出します。Linuxにおいて、FRRouting (FRR) は現在、黄金律(スタンダード)となっています。Quaggaを継承しつつ、より高速で安定しており、Cisco IOSに酷似したコマンド体系を持っています。

モダンな環境におけるFRRoutingの強力な機能

FRRは単なるルーティングソフトウェアではありません。クラウドやコンテナ向けに最適化されたQuaggaのフォークであり、BGP、OSPF、IS-IS、さらにはMPLSまでフルサポートしています。

マルチデーモン(multi-daemon)アーキテクチャは、FRRの最大の利点です。各プロトコルは独立したプロセスとして動作します。例えば、OSPFでエラーが発生しても、BGPセッションは正常に動作し続け、システム全体の停止を防ぎます。付属の vtysh ツールは一元管理シェルを提供し、すべてのプロトコルを1か所で設定できます。

Ubuntu/DebianへのFRRoutingのインストール

安定性を確保し、最新のセキュリティパッチを適用するために、Ubuntuの標準レポジトリではなく、FRRの公式レポジトリを使用することをお勧めします。

# 依存パッケージとFRRのインストール
sudo apt update
sudo apt install -y frr frr-pythontools

インストール直後、各ルーティングプロトコルはデフォルトで無効になっています。/etc/frr/daemons ファイルを編集して、必要なプロトコルを有効にする必要があります。

sudo nano /etc/frr/daemons

以下の行の値を no から yes に変更します:

ospfd=yes
bgpd=yes

最後に、設定を適用するためにサービスを再起動します:

sudo systemctl restart frr

OSPF(Interior Gateway Protocol)の実践的な設定

OSPFは、収束(コンバージェンス)が非常に速い(通常1秒未満)ため、データセンター内部や企業ネットワークでの第一選択肢となります。ここでは、2つのLinuxノードが 10.0.0.0/30 のIP帯域で直接接続されていると仮定します。

まず、管理シェルにアクセスします:

sudo vtysh

Ciscoデバイスと同様に設定を進めます:

conf t
router ospf
  ospf router-id 1.1.1.1
  network 10.0.0.0/30 area 0
  network 192.168.1.0/24 area 0
exit
write memory

ヒント: 数十のVLANにサブネットを分割する場合、IPの重複や間違いを防ぐために IP Subnet Calculator をよく使用します。このツールは、/30や/31といった帯域のネットワーク範囲やブロードキャストアドレスを非常に正確かつ迅速に計算するのに役立ちます。

Leaf-SpineアーキテクチャへのBGPの導入

BGPはもはやインターネットサービスプロバイダー(ISP)だけのものではありません。大規模なシステムでは、異なるネットワーク領域(自律システム:AS)を接続するためにBGPが使用されます。以下は、AS 65001とAS 65002の間で基本的なeBGPセッションを確立する方法です。

conf t
router bgp 65001
  bgp router-id 1.1.1.1
  neighbor 10.0.0.2 remote-as 65002
  !
  address-family ipv4 unicast
    network 192.168.10.0/24
  exit-address-family
exit
write memory

確認とトラブルシューティング

コマンドを入力しただけで満足してはいけません。以下の確認コマンドを使用して、ノード同士が実際に「認識」し合っているかを確認する必要があります:

  • show ip route: ルーティングテーブルを確認します。O と表示されているルートはOSPFから、B はBGPから学習したものです。
  • show ip ospf neighbor: ステータスが Full であることを確認します。もし InitExStart で止まっている場合は、MTU設定やファイアウォールを確認してください。
  • show ip bgp summary: 受信したプレフィックス数を確認します。

BGPのステータスが Active または Idle と表示されている場合、接続が遮断されているか、AS番号などのパラメータが間違っています。具体的な数字が表示されて初めて、システムが正常に疎通していると言えます。

FRRを運用する上での3つの重要な教訓

1. IPフォワーディングの有効化忘れ: これはトラフィックがサーバーを通過できない最も一般的な原因です。以下のコマンドでLinuxのパケット転送を許可する必要があります:

# IPフォワーディングを永続的に有効化
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

2. Dummyインターフェースの活用: Router-IDは常にループバック(Dummy)インターフェースに基づいて設定してください。物理インターフェースはケーブルが抜ける可能性がありますが、仮想インターフェースは常に存在するため、ルーティングセッションが不必要にリセットされるのを防げます。

3. Prefix Listによる制御: 隣接ノードを完全に信用してはいけません。prefix-list を使用して予期しないIP帯域をフィルタリングし、ルーティングテーブルが不要なルートで汚染されるのを防ぎましょう。

最後に

FRRoutingは、安価なLinuxサーバーを、数百万のルートを処理可能なプロフェッショナルなルーターへと変貌させます。FRRでOSPFやBGPをマスターすることで、高価なハードウェアに依存することなくネットワークインフラを制御できるようになります。まずは3台の仮想マシンで小さなラボ環境を構築し、ダイナミックルーティングの真の力を体感してみてください。

Share: