
ネットワーク上に存在する複数の OpenWRT ベースの DHCP サーバの優先順位を確実に適用させる方法として、 dnsmasq のdhcp-reply-delayオプションで、 OFFER メッセージ応答を 遅らせる アプローチを試してみました。
冗長化しているDHCPサービスが偏りがち
以前より自宅において、ISP支給のONUに正副2台のOpenWRTルータを繋ぎ、同じLANでネットワークサービスの冗長化を実現、運用してきました(関連記事はこちら)。
各ルータのDHCPサーバも配布範囲を分けた上でどちらも稼働させて、簡易的なロードバランスを構成しているのですが、実際はどうもサブルータ(上図のRouter 2)に配布が偏りがち。
ネットワーク上に複数のDHCPサーバが存在する場合、どちらかをプライマリとするよう重み付ける方法に、 Force DHCP オプションがあるのは知られていますが、経験上、思ったように機能してくれないことばかりで、あまり当てにしていません。
dnsmasqの応答遅延オプション
OpenWRTのDHCPサーバ(IPv4)を担当するdnsmasqには、OFFER応答を遅らせるオプション dhcp-reply-delay が用意されているので、これを使えばサブルータのDHCPサーバの応答を遅らせることで、メインルータによるIPアドレス配布が優先されるようになるはずです。
但し、OpenWRTには相当するオプションが見当たらないことから、
OpenWRTルータの /etc/dnsmasq.conf へ直接記述することにします。
1 2 |
## DHCP DELAY OFFER dhcp-reply-delay=10 |
サービスの再起動後、遅らせたいサブルータ側のシステムログを開くと、設定通りに応答遅延が機能していました。
その隙にメインルータが遅延なくDHCP OFFERメッセージを送出、クライアントがこれを採用する様子が、メインルータのログから確認できました。
この状態で数時間後には完全にDHCPサーバのIP配布がメインルータへ偏るようになりました。
今回は10秒遅延で試してみましたが、もちろんこれではあまり実用的ではないので、もう少し小さくチューニングしてみるつもりです。