※記事内に商品プロモーションを含む場合があります
自宅サーバーはラズベリーパイ4にubuntuを入れて使用しています。
普通に使うと有線LANとWiFi、2つのIPアドレスになります。
自宅サーバーの場合、有線は、RE450というWifi中継機を使用していて
本体は、いつも温かいので、故障が心配です。
【関連】自宅ファイルサーバーをトイレに移設した
TP-Link WiFi 無線LAN 中継器 RE450/A 11ac 1300+450Mbps ハイパワー コンセント直挿し ブリッジ APモード…
今回はbondingでIPアドレスを1に束ね、
通常は有線LANを使用し、有線LANが不通の時には
無線LANに切り替わる仕組みをbondingで作りました。
bondingモジュールをインストール
標準では、bondingモジュールが入っていません。
入っているか、いないかは以下のコマンドで確認できます。
lsmod | grep bonding
何も表示されていない場合、bondingモジュールが
インストールされていないので、bondingが使えません。
モジュールのインストール方法は、多くのサイトなどでは
以下のコマンドが使われています。
sudo apt install ifenslave
通常であれば、モジュールをインストールして再起動をすれば
カーネルモジュールが読み込まれます。
ラズパイ4では使えませんでした。
私のラズパイ4で動いているubuntu 22のカーネルは
5.15.0-1014-raspi
となっているので、ラズパイ用のカーネルとなっています。
ラズパイ用カーネルモジュールのインストール
カーネルモジュールのインストールは以下のコマンドで行います。
sudo apt install linux-modules-extra-raspi
インストール完了後、再起動すればbondingモジュールが読み込まれます。
netplanでの設定
ubuntuではnetplanでネットワーク設定を行います。
今回は、/etc/netplan/70-net.yamlを新たに作り設定を行います。
元からある、50-cloud-init.yamlは編集してはダメと言われています。
設定
network: version: 2 renderer: networkd wifis: wlan0: dhcp4: no dhcp6: no access-points: "【SSID】": password: "【パスワード】" ethernets: eth0: dhcp4: no dhcp6: no bonds: bond0: interfaces: - eth0 - wlan0 addresses: - 192.168.1.2/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 192.168.1.2 parameters: mode: active-backup primary: eth0 arp-ip-targets: [192.168.1.1] arp-interval: 1000
自宅サーバではrootから引くDNSキャッシュサーバが稼働しているので
自IPアドレス(192.168.1.2)を指定しています。
通常はルーターなどの192.168.1.1で良いと思います。
bondingには負荷分散のモードなど、さまざまなモードがありますが
今回はネットワークに冗長性を持たせるため、active-backupを使います。
arpでの監視
最初はMII監視を使用していましたが、動作確認をすると
ネットワークが落ちたままになります。
モニタに接続し、状態を確認しながらLANケーブルを抜くと
MII Statusがupのままで、ダウン検知されていませんでした。
bondingにはMII監視とARP監視がありますが、MIIがダウン検知しないので
ARP監視を使う事にしました。
ちなみに、MII監視からARP監視に変更は再起動が必要です。
ARPはIPアドレスからMACアドレスを取得するプロトコルで
実際にパケットを流して、疎通の確認を行います。
デメリットとしては、無駄な通信が増える事ですが
一般家庭なら問題無いと思います。
実際のARP関連の設定
arp-ip-targets: [192.168.1.1]
arp-interval: 1000
arp-ip-targetsはネットワーク疎通の確認に使うIPアドレスを指定します。
私はルーターのIPアドレスを設定しています。
コンマで区切ることで、複数のIPアドレスを指定出来ます。
arp-intervalはARPポーリングの間隔を指定します。
上の設定では1000msで、1秒に1回ポーリングを行います。
ポーリング間隔を短くしても、無駄な通信が発生しますし
広げても復帰に時間が掛かるので、1秒ぐらいがちょうどよいと思います。
あとがき
これで、Wifi中継機が故障してもWifiがバックアップとして稼働する様になりました。
実際にWifi中継機のLANケーブルを抜いてbondingの
動作を確認してみました。
pingで疎通を確認しながら、LANケーブルを抜くと
抜いた直後は、タイムアウトが発生しました。
3~5秒後には、疎通が再開しました。
LANケーブルを元に戻した時は、通信断はありませんでした。
何回か試しましたが、SSH接続が落ちることがありました。
ただし、謎なのが
cat /proc/net/bonding/bond0
でbondingの状態を確認すると、wlan0のMII Statusが
downになったりupになったりします。
でも、eth0がdownになると、upになりbondingが動作します。