メインコンテンツまでスキップ

FreeBSD から始める

FreeBSD は Ubuntu や NixOS と同じ routerd リソースモデルを使います。 ただし、生成されるホスト成果物は FreeBSD の機構に合わせます。 routerd は rc.conf.drc.d スクリプト、pf.confdhclient.conf、 dnsmasq 設定、mpd5.conf、DS-Lite 用の動的な ifconfig gif 操作を扱います。

このチュートリアルは FreeBSD 14 系を前提にします。 インストール先は /usr/local 配下です。 参照設定として examples/freebsd-edge.yaml を使います。

1. 開発ホストでビルドする

通常は開発用ホストで routerd をビルドし、FreeBSD ルーターへ転送します。 これにより、エッジ側のホストへ Go のビルド環境一式を入れずに済みます。

make build

バイナリを転送します。

scp bin/routerd bin/routerctl bin/routerd-* admin@freebsd-router:/tmp/

ルーター側へ配置します。

sudo install -d -m 0755 /usr/local/sbin
sudo install -m 0755 /tmp/routerd /usr/local/sbin/routerd
sudo install -m 0755 /tmp/routerctl /usr/local/sbin/routerctl
sudo install -m 0755 /tmp/routerd-* /usr/local/sbin/

2. FreeBSD パッケージを導入する

YAML では Package リソースとして宣言します。 初回準備では同じ内容を手で導入するか、生成された install-packages.sh を確認します。

sudo pkg install -y dnsmasq bind-tools wireguard-tools tailscale strongswan mpd5

FreeBSD の base system には ifconfigsysctlservicesysrcpfctlpflog0netstatsockstatpingtraceroute があります。

3. ルーター設定を配置する

sudo install -d -m 0755 /usr/local/etc/routerd
sudo install -m 0600 examples/freebsd-edge.yaml /usr/local/etc/routerd/router.yaml

適用前に、インターフェース名、アドレス、秘密値を編集してください。 初回は管理 SSH を別インターフェースに置くか、ハイパーバイザーのコンソールを用意してください。

4. 検証し、生成ファイルを確認する

設定を検証します。

routerd validate --config /usr/local/etc/routerd/router.yaml

FreeBSD 用の成果物を一時ディレクトリへ生成します。

rm -rf /tmp/routerd-freebsd-render
routerd render freebsd \
--config /usr/local/etc/routerd/router.yaml \
--out-dir /tmp/routerd-freebsd-render

主な出力は次の通りです。

  • rc.conf.d-routerd
  • dhclient.conf
  • mpd5.conf
  • pf.conf
  • dnsmasq.conf
  • install-packages.sh
  • rc.d-*

実ホストへ反映する前に内容を確認します。

less /tmp/routerd-freebsd-render/rc.conf.d-routerd
less /tmp/routerd-freebsd-render/pf.conf
less /tmp/routerd-freebsd-render/dnsmasq.conf

5. FreeBSD 側の役割を理解する

routerd はリソースを次の FreeBSD 機構へ対応付けます。

機構役割
rc.conf.d-routerdインターフェース別名、転送、複製インターフェース、静的経路、pfpflogmpd5 の有効化
rc.d-* スクリプトdnsmasq、firewall logger、healthcheck、Tailscale、DHCP クライアントなどの管理対象デーモン
pf.confゾーンフィルター、管理対象サービス用の許可、NAT、ファイアウォールログ
pflog0routerd-firewall-logger が読むファイアウォールログ
dnsmasq.confDHCPv4、DHCPv6、DHCP 中継、RA
dhclient.conf引き継いだ上流インターフェースの DHCPv4 クライアント動作
mpd5.confPPPoE の bundle、link、認証、MTU/MRU、既定経路
ifconfig gif静的な rc.conf だけで足りない DS-Lite tunnel の動的適用

6. 適用する

先に計画を確認します。

routerd plan --config /usr/local/etc/routerd/router.yaml

生成ファイルと計画が想定通りなら適用します。

sudo routerd apply --config /usr/local/etc/routerd/router.yaml

routerd は pf.conf を読み込む前に pfctl -nf で検証します。 dnsmasq も再起動前に dnsmasq --test で検証します。

7. 状態とログを確認する

routerd の状態を確認します。

routerctl status
routerctl events --limit 20

システムログを追います。

tail -f /var/log/routerd.log

pf の状態を確認します。

sudo pfctl -ss -v

pflog0 でファイアウォールログを確認します。

sudo tcpdump -n -e -ttt -i pflog0

FirewallLog を有効にすると、routerd は pflog0 の内容を取り込みます。 取り込んだログは routerctl と Web Console から確認できます。

関連項目