概要
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 showproto ospf や proto bgp の経路が再度表示されていれば復旧完了です。
再発時の暫定対応方針
/var/log/frr/frr.logを確認。- FRR の再起動でプロセス再初期化が行われ、正常に戻る。この状態が発生すると、ルーターとしての役割をなさなくなるため、再起動以外の選択肢はない。
- FRR 8.1 系(おそらく)ではこの問題が稀に発生するため、後続バージョンでの解消が期待される。
- 再起動で即時復旧するため、恒久対策として自動監視+再起動スクリプトの導入を検討。
所感
FRR はルーター機能であり、経路情報の消失は致命的。FRR は自身のプロセスで管理しているルーティングテーブルを kernel のルーティングテーブルにインストールするため、システムのアップデートなどによる kernel 側のリセットなどのタイミングによってはこのような状態になるのではないかと想像している。
VyOS などはこの辺りを適切に処理するように設計されていると思われるため、それを参考にすると良い結果を得られるかもしれません。
Ubuntu 22.04 FRR FIB 不整合の発生と復旧方法


