手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 FRR FIB 不整合の発生と復旧方法

概要

FRR でまれに発生する、FIB(カーネルルーティングテーブル)と Zebra 間の不整合について、手動で復旧するまでの手順を記録します。

本事象では、OSPF や BGP の経路自体は FRR 上で正しく見えているにもかかわらず、ip route show で確認できるカーネル経路から動的経路が消失します。


現象

FRR では正常に経路が存在

Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       B - BGP, ...
O>* 10.129.192.1/32 [110/20] via 10.129.1.1, enp1s0, weight 1, 00:12:14
O>* 10.201.0.0/21 [110/20] via 10.129.1.2, enp1s0, weight 1, 00:12:14
B>* 10.193.8.0/24 [20/0] via 172.17.33.187, enp4s0, weight 1, 00:12:14
B>* 10.193.10.0/24 [20/0] via 172.17.33.180, enp4s0, weight 1, 00:12:14
...

OSPF や BGP の経路が正しく学習・保持されており、FRR 内部的には正常に見えます。


異常時の ip route show

default via 10.129.1.1 dev enp1s0 proto static 
10.1.0.0/24 via 10.129.1.1 dev enp1s0 
10.129.1.0/24 dev enp1s0 proto kernel scope link src 10.129.1.3 
10.145.0.0/24 dev enp2s0 proto kernel scope link src 10.145.0.3 
172.17.17.0/24 dev enp3s0 proto kernel scope link src 172.17.17.1 
172.17.18.0/24 dev enp5s0 proto kernel scope link src 172.17.18.1 
172.17.33.0/24 dev enp4s0 proto kernel scope link src 172.17.33.1 
172.17.34.0/24 dev enp6s0 proto kernel scope link src 172.17.34.1 

FRR では正常にルーティングテーブルが存在していますが、異常時は Linux の静的経路と kernel 直結経路のみが残り、OSPF/BGP 経由の経路が消失しています。


正常時の ip route show

10.193.8.0/24 nhid 75 via 172.17.33.187 dev enp4s0 proto bgp metric 20 
10.193.10.0/24 nhid 71 via 172.17.33.180 dev enp4s0 proto bgp metric 20 
10.201.8.0/21 nhid 73 proto bgp metric 20 
    nexthop via 172.17.33.185 dev enp4s0 weight 1 
    nexthop via 172.17.33.186 dev enp4s0 weight 1 
    nexthop via 172.17.33.187 dev enp4s0 weight 1 
10.129.192.1 nhid 109 via 10.129.1.1 dev enp1s0 proto ospf metric 20 
...

本来は、FRR で保持しているルーティングテーブルが、動的に反映されます。


ログ

この問題が発生した場合、/var/log/frr/frr.log に以下のようなログが出力されます。

zebra[971]: [TX7F6-F3TSG] default(0:254):172.24.34.0/24: Route install failed

想定原因

  • Zebra(FRR のデータプレーン制御プロセス)がカーネルとの通信(Netlink)で不整合を起こし、経路更新を停止。
  • この状態では、show ip route では正しく経路が見えても、kernel にインストールされない。

手動復旧手順

1. FRR 再起動

sudo systemctl restart frr.service

数秒待ってから再確認します。


2. 正常化の確認

sudo vtysh -c 'show ip route'
ip route show

proto ospfproto bgp の経路が再度表示されていれば復旧完了です。


再発時の暫定対応方針

  • /var/log/frr/frr.log を確認。
  • FRR の再起動でプロセス再初期化が行われ、正常に戻る。この状態が発生すると、ルーターとしての役割をなさなくなるため、再起動以外の選択肢はない。
  • FRR 8.1 系(おそらく)ではこの問題が稀に発生するため、後続バージョンでの解消が期待される。
  • 再起動で即時復旧するため、恒久対策として自動監視+再起動スクリプトの導入を検討。

所感

FRR はルーター機能であり、経路情報の消失は致命的。FRR は自身のプロセスで管理しているルーティングテーブルを kernel のルーティングテーブルにインストールするため、システムのアップデートなどによる kernel 側のリセットなどのタイミングによってはこのような状態になるのではないかと想像している。

VyOS などはこの辺りを適切に処理するように設計されていると思われるため、それを参考にすると良い結果を得られるかもしれません。

Ubuntu 22.04 FRR FIB 不整合の発生と復旧方法

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る