LAN内にあるデバイスの名前解決をmDNSに統一する
普段はいつもNASを使ってテスト用のWebサイト(WordPressで作ったものやその他)を作って確認作業などをしています。複数のプラットフォームから正しく表示できるかどうか確認することもあるのですが、MacとWindowsはLAN内のコンピューター名(ホスト名)の名前解決方法が異なるので、同じ名前でテスト用サイトにアクセス出来ない場合があります。
Macは名前解決にmDNS(multicast DNS)を使っています。これはZeroconfといってサーバーを使わずにコンピューターやプリンターのデバイスを自動的に接続することを可能にした技術なので名前解決もサーバーなしで接続可能です。
接続するときは「ホスト名.local」という名称でアクセスできます。Macのシステム標準機能としてBonjourがサポートされていますが、これがmDNSを使ってデバイス間を接続しています。Bonjourに対応しているデバイスは「ホスト名.local」でアクセス可能です。例えばブラウザのアドレス入力に「http://host-1.local」でアクセスも出来ます。
そしてWindowsは名前解決にLLMNR(Link-Local Multicalst Name Resolution)を使っています。これもサーバーなしで名前解決できる技術です。WindowsはNetBIOSで名前解決を行っていたのですが、IPv6環境ではサポートされておらずこのLLMNRを開発したようです。サーバーなしで名前解決できるのですが、ホスト名末尾に「.local」が付いている場合は最初のホスト名部分のみを取り出して名前解決の検索対象としているようです。
つまり標準ではMacが「ホスト名.local」で接続し、Windowsが「ホスト名」で接続しようとします。
この状況でWordPressで作成したテスト用Webサイトにアクセスするには、ホスト名はどちらかに統一してDBに情報が格納されていなければなりません。そうすると、MacかWindowsのどちらかだけが接続できるようになります。
そこでmDNSに統一できればNASのWeb環境へアクセスするのに「ホスト名.local」の共通したホスト名が使えるので、WordPressのURL設定は「ホスト名.local」でMacからもWindowsからも接続できるようになります。
ということで、WindowsでmDNSを使えるようにしましょう。実は、現在(2018/12時点)の最新のWindows10はすでに標準でmDNSに対応しています。なので、何もしなくとも「ホスト名.local」でアクセス可能です。名前解決できるかどうかは「ping」コマンドで確認できます。コマンドコンソールで「ping ホスト名.local」を入力すれば、名前解決できればレスポンスが返ってきて、だめな場合はエラーになります。
もし名前解決できない場合は、Windowsファイアーウォールに以下の設定を追加すると動作するかもしれません。
・コントロールパネルからWindowsファイアーウォールを開きます。
・画面左にある詳細設定をクリックします。
・次に開いた画面左の「受信の規則」をクリックして、画面右にある「新しい規則…」をクリックします。すると新規の受信規則ウィザードが始まります。
・規則の種類はポートを選択して「次へ」を押します。
・プロトコルおよびポートは「UDP」と「特定のローカルポート」は5353を入力して「次へ」を押します。
・操作は「接続を許可する」を選択して「次へ」を押します。
・プロファイルはドメイン・プライベート・パブリック全てにチェックをいれます。
・名前は何でもいいのですが、ここではBonjourとしています。
そして「完了」を押すと設定終了です。
これでmDNSで名前解決できるかコマンドラインで「ping ホスト名.local」を入力して確認してみましょう。Windows10でファイアーウォールを設定しても名前解決しない場合や、Windows7などの以前のバージョンの場合は以下の方法があります。
確実簡単にWindowsでmDNSを使えるようにする方法
Windowsファイアーウォールの設定だけでは動作しなかった場合は、Apple製品のアプリケーションをインストールすることでmDNSが利用できるようになります。
「Bonjour Print Service for Windows」か「iTunes」をインストールすれば使えるようになるのです。このうち軽いアプリはBonjour Print Service for Windowsでしょうか。
ただ、どちらのアプリもWindowsでは使わないしな・・・mDNSのためだけにインストールするのもな・・と思う方はBonjourだけをインストールする方法があります。
Bonjourだけをインストール
まずはiTunesのインストールパッケージをAppleからダウンロードします。
ダウンロードした「ITunes64Setup.exe」を7zipなど解凍ツールを使ってファイルを解凍します。すると、中には複数のインストールパッケージが展開されます。
その中にある「Bonjour64」をインストールすればBonjourだけがインストールできます。
インストールが完了すればすぐにmDNSが有効になっているので、「ping ホスト名.local」で動作確認してみてください。
Linuxでも使えるようにする
LAN内でWebアプリなどの動作確認するのにNASではなく、LinuxにLAMP環境などを作って他のデバイスから動作確認をするときにも「ホスト名.local」でアクセスできるように、LinuxでもmDNSを使えるようにしましょう。
Avahiをインストール
UbuntuだとデフォルトでAvahiがインストールされています。端末で「avahi-daemon –v」や「avahi-browse -all」などを試してエラーになるなど、もしAvahiが無くてUbuntuやDebian系LinuxからLAN内の「ホスト名.local」が名前解決出来なかったり、Linuxのホスト名が「ホスト名.local」で名前解決できない場合は、Avahiをインストールしちゃいます。
user@ubuntu:~$ sudo apt install avahi-daemon
avahi-browseなどのツールを使いたい場合はツール類もインストールしちゃいましょう。
user@ubuntu:~$ sudo apt install avahi-utils
これでどのプラットフォームを使ってもmDNSによる名前解決ができるようになりました。