適用と生成

routerd には、設定を書く段階で使う routerd と、動いている daemon
(起動し続けるプログラム)に話しかける
routerctl があります。最初は、この順番を守ると安全です。
YAML を書く
↓
routerd validate
↓
routerd apply --once --dry-run
↓
安全を確認して routerd.service を起動
↓
routerctl get status
1. 検証する
routerd validate は YAML の書き方を確認します。Kind 名、必須の項目、値の範囲、
分かりやすい参照ミスを見つけます。daemon はまだ必要なく、ホストのネットワークも
変更しません。
sudo routerd validate --config ./router.yaml
初回に routerctl validate を使わない理由は、routerctl が動いている
routerd.service のローカルソケットに接続するからです。
2. dry-run する
dry-run は、読み込んだリソースの順番と生成する内容を確認する予行演習です。 初回は常設の状態ファイルを使わず、使い捨ての場所を明示します。
LAB_DIR="$(mktemp -d)"
sudo routerd apply --config ./router.yaml --once --dry-run --skip-service-manager \
--state-file "$LAB_DIR/state.db" \
--ledger-file "$LAB_DIR/ledger.db" \
--status-file "$LAB_DIR/status.json"
sed -n "1,120p" "$LAB_DIR/status.json"
- state は、routerd が見た状態を保存するデータベースです。
- ledger は、routerd が所有する成果物の記録です。
- status は、今回の結果を書いた JSON ファイルです。
--dry-run がある間はネットワークを本当に変更しません。それでも、設定の内容は
正しく読む必要があります。最初は隔離した Ubuntu Server VM とコンソールで行います。
3. 適用する
routerd apply --once から --dry-run を外すと、本当にホストを変更できます。
これは WAN、LAN、経路、NAT、サービスを変える可能性がある操作です。
最初の VM では、いきなり一回だけの live apply を勧めません。
代わりに、dry-run が安全だと確認してから設定を
/usr/local/etc/routerd/router.yaml に置き、routerd.service を起動します。
常駐するサービスは、設定と実際の状態の差を見つけて必要な処理を続けます。
sudo systemctl enable --now routerd.service
sudo systemctl is-active routerd.service
4. サービス起動後に routerctl を使う
サービスが作るローカルソケットに接続できるようになったら、routerctl を使います。
状態を読む例は次のとおりです。
sudo routerctl get status
sudo routerctl get events --limit 20
動いている routerd に候補 YAML を渡して検証や計画を見る場合も、この後です。
sudo routerctl validate -f candidate.yaml --replace
sudo routerctl plan -f candidate.yaml --replace
この 2 つは host の状態を変えませんが、稼働中の daemon が必要です。
生成とは
「生成」は、routerd が dnsmasq の設定、nftables の設定、systemd の unit など、 ホスト向けのファイルを組み立てることです。生成しただけで、必ずホストが変わる わけではありません。dry-run では生成内容を確認し、live の適用やサービス起動で 必要な変更を反映します。
現在の routerd では、dnsmasq 向けには DHCPv4、DHCPv6、中継、RA の設定を
生成します。DNS の待ち受け、ローカルゾーン、条件付き転送、暗号化 DNS は
DNSResolver が扱います。
プラットフォームの範囲
このページの初回手順は Ubuntu Server を対象にしています。netplan、systemd、 nftables のような Linux 固有の生成は、対応する機能がある環境だけで使います。 FreeBSD と NixOS の導入・サービス連携は土台がありますが、Ubuntu と同じ レンダラーの対応を意味しません。