😺

WSL2でmDNS(マルチキャストDNS)を有効にする方法

2025/03/01に公開

はじめに

Raspberry PiへPowerShellからSSH接続するときはssh tansan@raspberrypi.localのようにドメイン名で接続することが出来ますが、wslからはドメイン名で接続することはできません。
WSL2上のUbuntu 24.04で.localドメインの名前解決をmDNS(マルチキャストDNS)を使用して行うには、以下の手順を実施してください。

  1. .wslconfigファイルの編集

Windows側でmDNSが正しく動作するように、WSL2のネットワーク設定を変更します。

設定手順

(1) Windowsのユーザーディレクトリ(C:\Users\<ユーザー名>\)に.wslconfigファイルを作成または編集します。
(2) 以下の内容を追加または編集してください。

[wsl2]
dnsTunneling=false
networkingMode=mirrored

設定の意味

  • dnsTunneling=false → DNSトンネリングを無効化し、WSL2内部のDNS設定が適用されるようにします。
  • networkingMode=mirrored → WSL2のネットワークを「ミラーリングモード」に設定し、Windowsと同じネットワークを使用できるようにします。

この設定を適用することで、WSL2のUbuntuがmDNSのクエリを正しく送受信できるようになります。

WSL2の再起動

設定を反映させるために、WSL2を再起動します。PowerShellまたはコマンドプロンプトで以下のコマンドを実行してください。

wsl --shutdown
wsl

WSL2が完全に再起動され、新しいネットワーク設定が適用されます。これにより、Windows側とWSL2が同じネットワーク環境を共有し、mDNSが適切に機能するようになります。

  1. libnss-mdnsパッケージのインストール

Ubuntu上でmDNSを利用するために、libnss-mdnsパッケージをインストールします。

sudo apt update
sudo apt install libnss-mdns

このパッケージは、GNU Cライブラリ(glibc)のネームサービススイッチ(NSS)にmDNSの名前解決機能を追加します。

/etc/nsswitch.confの設定

mDNSによる名前解決を有効にするために、/etc/nsswitch.confファイルを編集します。

手順

(1) エディタで設定ファイルを開く。

sudo nano /etc/nsswitch.conf

(2) hosts行を以下のように編集。

hosts:          files mdns_minimal [NOTFOUND=return] dns

(3) 変更を保存し、エディタを閉じる。

この設定により、.localドメインの名前解決がmDNSを通じて行われるようになります。

  1. avahi-daemon のインストールと起動

mDNSを利用するために、avahi-daemon をインストールして起動します。

sudo apt install avahi-daemon
sudo systemctl enable avahi-daemon
sudo systemctl start avahi-daemon

また、Avahiのログを確認することで、mDNSの動作をより詳細に把握できます。

journalctl -u avahi-daemon --no-pager

このコマンドを実行することで、mDNSのクエリや応答が適切に処理されているかを確認できます。

  1. mDNSの動作確認

avahi-browseのインストール

Ubuntuに avahi-browse をインストールすることで、mDNS対応デバイスを一覧表示できます。

sudo apt install avahi-utils

ネットワーク内のmDNS対応デバイスを一覧表示

avahi-browse -a

出力例:

+   eth1 IPv4 af10b6c0-64d2-4f5b-b490-55e44401382a          _occam._udp          local
+   eth1 IPv6 af10b6c0-64d2-4f5b-b490-55e44401382a          _occam._udp          local

特定のホスト名の名前解決

avahi-resolve -n raspberrypi.local

成功時の出力例:

raspberrypi.local       192.168.0.10

Discussion