WSL2でmDNS(マルチキャストDNS)を有効にする方法
はじめに
Raspberry PiへPowerShellからSSH接続するときはssh tansan@raspberrypi.local
のようにドメイン名で接続することが出来ますが、wslからはドメイン名で接続することはできません。
WSL2上のUbuntu 24.04で.local
ドメインの名前解決をmDNS(マルチキャストDNS)を使用して行うには、以下の手順を実施してください。
-
.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が適切に機能するようになります。
-
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を通じて行われるようになります。
-
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のクエリや応答が適切に処理されているかを確認できます。
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