systemd-resolved 環境下での incus コンテナ名前解決

に公開

systemd-resolved 環境下において、ホストから incus コンテナに対しコンテナ名(+.incus)でアクセスできるように名前解決をセットアップする。

Incus 公式ドキュメントのユニットファイルのサンプルを参考に、テンプレートユニットを利用する。

https://linuxcontainers.org/incus/docs/main/howto/network_bridge_resolved/

次のユニットファイルを/etc/systemd/system/incus-dns@.serviceに作成する。

/etc/systemd/system/incus-dns@.service
[Unit]
Description=Incus per-link DNS configuration for %i
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
Type=oneshot
ExecStart=/bin/bash -c "resolvectl dns %i $(incus network get %i ipv4.address | sed 's/\/.*$//')"
ExecStart=/bin/bash -c "resolvectl domain %i ~$(x=$(incus network get %i dns.domain); echo ${x:-incus})"
ExecStart=/usr/bin/resolvectl dnssec %i off
ExecStart=/usr/bin/resolvectl dnsovertls %i off
ExecStopPost=/usr/bin/resolvectl revert %i
RemainAfterExit=yes

[Install]
WantedBy=sys-subsystem-net-devices-%i.device

daemon-reload を実行し、ユニットをブリッジのインタフェース名に合わせて有効化する。
次の例ではデフォルトのincusbr0を使用している。

$ sudo systemctl deamon-reload
$ sudo systemctl enable --now incus-dns@incusbr0.service

これにより、[コンテナ名].incusのような形でコンテナにアクセスできようになる(incusのドメイン名がincusに設定されている場合(デフォルト))。

Discussion