コネクションプロファイルの作成
dispatcherを実行するためのDHCPサーバ専用のプロファイルを追加します
sudo nmcli con add con-name DHCP_server ifname enp0s3 ipv4.method manual ipv4.addresses 10.32.245.245/16 type ethernet
con-nameとidname、typeは任意です。
ipv4.addressesはdhcpd.confでroutersに指定しているIPアドレスをしていると良いでしょう。
dispatcherのスクリプト
スクリプトを置くディレクトリは/etc/NetworkManager/dispatcher.d/です。
以下に任意のファイルを追加し、スクリプト用意します
#!/bin/bash
ACTION=$2
if [ "$CONNECTION_ID" = "DHCP_server" ] && [ "$2" = "up" ]; then
systemctl restart isc-dhcp-server.service
if [ $? -ne 0 ]; then
nmcli con up 'Wired connection 1'
fi
fi
NetworkManagerではプロファイルの切り替わり時に、第一引数にインターフェイス名、第二引数に実行されたオプションが渡されます。
今回はDHCP_serverがupされたという条件のでdhcpサーバを起動するようにしています。
if [ $? -ne 0 ]; then
nmcli con up 'Wired connection 1'
fi
もし仮にDHCP_serverの切り替えに失敗した場合、特定のプロファイルへ再度切り替えを行う処理も用意しています。
ラズパイはCLIで起動していてモニター類は用意していません。
DHCP_serverへの切り替え後は別のネットワークに切り替わるので、
もし割り当てが行われないとSSH接続ができなくなってモニターを用意するか、クライアント側に固定IPを割り当てるか見たいな感じなって面倒くさいですね。
ですので失敗しちゃったらもともとのネットワークに戻ってくるようにしたいのです。
最後に
切り替え時だけではなく、運用中に何らかの理由でサーバが落ちた場合にプロファイルの切り替えを行うスクリプトも用意すると安心かなと思いました。