トラブルシューティング

routerd の調査では、まず routerd の意図 と ホストの実状態 を分けます。 routerd が何を意図しているかを確認してから、OS の状態と突き合わせてください。
基本順序
routerctl status— 全体を見るrouterctl describe <kind>/<name>— 対象リソースを掘り下げるrouterctl apply --dry-run— 次の適用で何が変わるか- OS コマンド (
ip、nft、ss、journalctl) — 実状態 - 該当デーモンの
/v1/statusとイベントログ
DHCPv6-PD
curl --unix-socket /run/routerd/dhcpv6-client/wan-pd.sock http://unix/v1/status
tail -n 20 /var/lib/routerd/dhcpv6-client/wan-pd/events.jsonl
確認点は次の通りです。
phaseがBoundになっているcurrentPrefixが入っているrenewAtが未来の時刻になっている- イベントログに
ReplyやRenewが記録されている
Bound でない場合、LAN 側の IPv6 RA、AAAA、DHCPv6 は止まるべきです。
古いプレフィックスを配り続けないことが、routerd の安全上の約束です。
DHCPv4
curl --unix-socket /run/routerd/dhcpv4-client/wan.sock http://unix/v1/status
DHCPv4Client が Bound かどうかを確認します。
即時の更新が必要なら、POST /v1/commands/renew で要求します。
dnsmasq
現在の routerd では、dnsmasq は DHCPv4、DHCPv6、DHCP 中継、Router Advertisement に専念しています。
DNS の応答と転送は、routerd-dns-resolver が担当します。
生成された dnsmasq の設定が、以下を満たしているか確認します。
- 期待する
dhcp-rangeが含まれている port=0になっている (DNS 機能が止まっている。DNS はrouterd-dns-resolverの責務です)dhcp-script=/usr/local/libexec/routerd/dhcp-event-relayがある (リースの変化を routerd へ通知する経路)- 必要な構成で
enable-raが入っている
DNS リゾルバ
sudo curl --unix-socket /run/routerd/dns-resolver/<resource>.sock http://unix/v1/healthz
dig @<lan-ip> router.lan.example.org A
dig @<lan-ip> example.com A
順に確認します。
- 待ち受けが、想定したアドレスとポートで開いているか (
ss -lnup) - ローカルの権威ゾーンが応答するか (
DNSZoneの手動レコードと DHCP 由来のレコード) - 条件付き転送が、指定した上流へ届いているか (
dig @<lan-ip> <forwarded-domain>) - 既定の上流が、DoH / DoT / TCP / 平文 UDP のいずれで応答しているか (リゾルバの status と上流の health を見る)
DS-Lite
ip -6 tunnel show
ip route show default
nft list table ip routerd_nat
AFTR の FQDN が解決できない場合は、DNSResolver の forward source を確認します。
公衆 DNS では、特定のアクセス網向けの AFTR レコードを解けないことが多いです。
conntrack
環境によっては、/proc/net/nf_conntrack がありません。
この場合、routerd は sysctl 由来の集計へ縮退します。
詳細なフロー一覧が空でも、必ずしも NAT が壊れているとは限りません。routerctl connections のサマリを見てください。
調査時に避けること
- 本番 WAN で、古い DHCP クライアントや手動の試験用デーモンを、routerd と並行して動かさないでください。同じインターフェースから複数の DHCPv6-PD クライアントを出すと、上流のリース状態を壊すことがあります。
- 経路変更時に
nf_conntrackを flush しないでください。routerd は意図的に flush しません。flush すると、確立済みのセッションが切れます。 - 1 ホスト上で
/usr/local/etc/routerd/router.yamlを編集しつつ、別の場所にその場しのぎの YAML オーバーレイを置かないでください。1 ホストにつき設定ファイルを 1 つに保つと、調整(リコンサイル)の予測性が保たれます。