mdnsとは、マルチキャストDNSのことです。Apple社が作成した名前解決のためのプロトコルです。Bonjourという名前のほうが有名かな?
これが入っているとLAN内にDNSサーバがなくても、名前解決が出来るようになります。
AppleのMacOS、iPhoneは標準で組み込まれています。WindoesXP~7はAppleのiTuneと一緒にBonjourがインストールされて使えるようになります。Windows10は最近のアップデートで組み込まれたので、何もしなくても使えるようになりました!
Apple系のプロトコルはあまり使いたくはありませんが、
ために、仕方なく入れることにします。
UNIX系OSでは、mdnsの実装として、avahiとmDNSResponderの2種類があります。
avahiは依存する不要なパッケージが多いことと、RHELなどではavahiの方を入れることが多いので、mDNSResponderを入れてみることにします。
マルチキャストDNSプロトコルの詳細は省きますが、ブロードキャストされた問い合わせに対して個々のノードが自分の名前を
応答する必要があります。
まずはそれに対応したmDNSResponderをインストールします。
root@cafe:~ # cd /usr/ports/
root@cafe:/usr/ports # echo */mDNS*
dns/mDNSResponder_nss net/mDNSResponder
root@cafe:/usr/ports # cd net/mDNSResponder/
root@cafe:/usr/ports/net/mDNSResponder #
mDNSResponderに2種類ありますが、「mDNSResponder」が応答側、「mDNSResponder_nss」が問い合わせ側になります。
root@cafe:/usr/ports/net/mDNSResponder # make
まずは、応答側の「mDNSResponder」を、いつものようにportsからコンパイルを行います。
configはデフォルトのままにしておきます。
===> License APACHE20 BSD3CLAUSE accepted by the user
===> mDNSResponder-1096.40.7 depends on file: /usr/local/sbin/pkg - found
=> mDNSResponder-1096.40.7.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch https://opensource.apple.com/tarballs/mDNSResponder/mDNSResponder-1096.40.7.tar.gz
mDNSResponder-1096.40.7.tar.gz 2120 kB 2039 kBps 01s
===> Fetching all distfiles required by mDNSResponder-1096.40.7 for building
===> Extracting for mDNSResponder-1096.40.7
=> SHA256 Checksum OK for mDNSResponder-1096.40.7.tar.gz.
===> Patching for mDNSResponder-1096.40.7
===> Applying FreeBSD patches for mDNSResponder-1096.40.7 from /usr/ports/net/mDNSResponder/files
===> mDNSResponder-1096.40.7 depends on package: gmake>=4.3 - found
===> Configuring for mDNSResponder-1096.40.7
===> Building for mDNSResponder-1096.40.7
gmake[2]: Entering directory '/usr/ports/net/mDNSResponder/work/mDNSResponder-1096.40.7/mDNSPosix'
cc -O2 -pipe -fstack-protector-strong -fno-strict-aliasing -I../mDNSCore -I../mDNSShared -I../DSO -I -Iobjects/prod -fwrapv -W -Wall -DPID_FILE=\"/var/run/mdnd/ && install -s -m 555 dnsextd /usr/ports/net/mDNSResponder/work/stage/usr/local/sbin/
/usr/bin/strip /usr/ports/net/mDNSResponder/work/stage/usr/local/bin/dns-sd
====> Compressing man pages (compress-man)
===> Staging rc.d startup script(s)
root@cafe:/usr/ports/net/mDNSResponder #
コンパイルが完了しました。
root@cafe:/usr/ports/net/mDNSResponder # make install
===> Installing for mDNSResponder-1096.40.7
===> Checking if mDNSResponder is already installed
===> Registering installation for mDNSResponder-1096.40.7
Installing mDNSResponder-1096.40.7...
===> SECURITY REPORT:
This port has installed the following files which may act as network
servers and may therefore pose a remote security risk to the system.
/usr/local/bin/mDNSNetMonitor
/usr/local/sbin/mdnsd
/usr/local/bin/mDNSClientPosix
/usr/local/sbin/dnsextd
/usr/local/bin/mDNSResponderPosix
/usr/local/bin/mDNSProxyResponderPosix
If there are vulnerabilities in these programs there may be a security
risk to the system. FreeBSD makes no guarantee about the security of
ports included in the Ports Collection. Please type 'make deinstall'
to deinstall the port if this is a concern.
For more information, and contact details about the security
status of this software, see the following webpage:
https://developer.apple.com/bonjour/
root@cafe:/usr/ports/net/mDNSResponder #
make install
コマンドでインストールが完了しました。
まずは、自動起動の設定です。
root@cafe:/usr/ports/net/mDNSResponder # bsdconfig
/etc/rc.confを直接編集しても良いのですが、bsdconfig
コマンドを使ってみましょう。
「C Startup」を選択します。
「1 Toggle Startup Service」を選択します。
「mdnsd_enable」と「mdnsresponderposix_enable」にチェックを入れて、「Exit」を選択します。
これで自動起動の設定は完了です。
root@cafe:/usr/ports/net/mDNSResponder # cat /etc/rc.conf
hostname="cafe.lo.zeke.ne.jp"
keymap="jp.106"
ifconfig_vtnet0="inet 192.168.1.7 netmask 255.255.255.0"
defaultrouter="192.168.1.254"
ifconfig_vtnet0_ipv6="inet6 2001:2c0:cd03:ca00::cafe/64"
ipv6_defaultrouter="2001:2c0:cd03:ca00::254"
local_unbound_enable="YES"
sshd_enable="YES"
ntpdate_enable="YES"
ntpd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"
php_fpm_enable="YES"
nginx_enable="YES"
mdnsd_enable="YES"
mdnsresponderposix_enable="YES"
root@cafe:/usr/ports/net/mDNSResponder #
/etc/rc.confに「mdnsd_enable」と「mdnsresponderposix_enable」の設定が増えていることを確認します。
root@cafe:/usr/ports/net/mDNSResponder # vi /usr/local/etc/mDNSResponder.conf
root@cafe:/usr/ports/net/mDNSResponder # cat /usr/local/etc/mDNSResponder.conf
cafe
_ssh._tcp. local
22
cafe ssh server
root@cafe:/usr/ports/net/mDNSResponder #
次に、設定ファイル /usr/local/etc/mDNSResponder.conf を作成します。これは、このサーバでどんなサービスが動いているか応答するための情報を書いておきます。ここではとりあえずsshだけ書いておきました。
サービスが増えたら、後から追加しようと思います。
root@cafe:/usr/ports/net/mDNSResponder # vi /etc/rc.conf
root@cafe:/usr/ports/net/mDNSResponder # cat /etc/rc.conf
hostname="cafe.lo.zeke.ne.jp"
keymap="jp.106"
ifconfig_vtnet0="inet 192.168.1.7 netmask 255.255.255.0"
defaultrouter="192.168.1.254"
ifconfig_vtnet0_ipv6="inet6 2001:2c0:cd03:ca00::cafe/64"
ipv6_defaultrouter="2001:2c0:cd03:ca00::254"
local_unbound_enable="YES"
sshd_enable="YES"
ntpdate_enable="YES"
ntpd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"
php_fpm_enable="YES"
nginx_enable="YES"
mdnsd_enable="YES"
mdnsresponderposix_enable="YES"
mdnsresponderposix_flags="-f /usr/local/etc/mDNSResponder.conf"
root@cafe:/usr/ports/net/mDNSResponder #
「mdnsresponderposix_flags="-f /usr/local/etc/mDNSResponder.conf"」この行を追加して、設定ファイルをmdnsresponderposixに読み込ませるように、起動オプションを変更しました。
root@cafe:/usr/ports/net/mDNSResponder # reboot
再起動して、mdnsを有効にします。
MacOSやITuneをインストールしたWindowsから、pingを打って名前解決の動作確認を行います。
iTuneをインストールしたWindowsからping cafe.local
コマンドを実行します。「.local」はmdns用のドメインです。
ちゃんと名前解決ができて、pingの応答が返ってくることが確認できました。
root@cafe:~ # mDNSNetMonitor
0:03:05.262090 Interface 1/vtnet0
192.168.1.70 -Q- Q: 1 Ans: 0 Auth: 0 Add: 0 Size: 28 bytes
192.168.1.70 (QM) Addr cafe.local.
0:03:05.262546 Interface 1/vtnet0
192.168.1.7 -R- Q: 0 Ans: 1 Auth: 0 Add: 3 Size: 114 bytes
192.168.1.7 (AN) Addr 120 cafe.local. -> 192.168.1.7
192.168.1.7 (AD) AAAA 120 cafe.local. -> fe80::a00:27ff:fea8:e8f
192.168.1.7 (AD) AAAA 120 cafe.local. -> 2001:2c0:cd03:ca00::cafe
192.168.1.7 (AD) NSEC 120 cafe.local. -> Addr AAAA
0:03:05.355778 Interface 1/vtnet0
192.168.1.70 -R- Q: 0 Ans: 1 Auth: 0 Add: 1 Size: 85 bytes
192.168.1.70 (AN) PTR 120 70.1.168.192.in-addr.arpa. -> virtual-xp.local.
192.168.1.70 (AD) NSEC 120 70.1.168.192.in-addr.arpa. -> PTR
0:03:05.455005 Interface 1/vtnet0
192.168.1.70 -R- Q: 0 Ans: 0 Auth: 0 Add: 1 Size: 45 bytes
192.168.1.70 (AD) NSEC 120 virtual-xp.local. -> Addr
mDNSNetMonitor
コマンドはネットワーク上のmdnsプロトコルをキャプチャするコマンドです。
192.168.1.70(Windows)からcafe.localのIPアドレスをたずねるブロードキャストが飛び、192.168.1.7(FreeBSD)がそれに応答して自分のIPアドレスを答えていることが確認できます。
mdnsの応答に対応できるようになったら、FreeBSDからも問い合わせができるようにしたいですよね。
root@cafe:~ # cd /usr/ports/dns/mDNSResponder_nss
PortsのmDNSResponder_nssをインストールします。
root@cafe:/usr/ports/dns/mDNSResponder_nss # make
===> License APACHE20 BSD3CLAUSE accepted by the user
===> mDNSResponder_nss-1096.0.2 depends on file: /usr/local/sbin/pkg - found
=> mDNSResponder-1096.0.2.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch http://opensource.apple.com/tarballs/mDNSResponder/mDNSResponder-1096.0.2.tar.gz
:
省略
:
install -m 0644 /usr/ports/dns/mDNSResponder_nss/work/mDNSResponder-1096.0.2/mDNSPosix/nss_mdns.conf /usr/ports/dns/mDNSResponder_nss/work/stage/usr/local/share/examples/mDNSResponder
install -m 444 /usr/ports/dns/mDNSResponder_nss/work/mDNSResponder-1096.0.2/mDNSPosix/nss_mdns.conf.5 /usr/ports/dns/mDNSResponder_nss/work/stage/usr/local/man/man5
install -m 0644 /usr/ports/dns/mDNSResponder_nss/work/mDNSResponder-1096.0.2/mDNSPosix/nss_mdns.conf /usr/ports/dns/mDNSResponder_nss/work/stage/usr/local/etc/nss_mdns.conf.sample
====> Compressing man pages (compress-man)
root@cafe:/usr/ports/dns/mDNSResponder_nss #
makeしてみました。特に依存関係はないみたいです。
root@cafe:/usr/ports/dns/mDNSResponder_nss # make install
===> Installing for mDNSResponder_nss-1096.0.2
===> Checking if mDNSResponder_nss is already installed
===> Registering installation for mDNSResponder_nss-1096.0.2
Installing mDNSResponder_nss-1096.0.2...
To enable the mDNSResponder NSS module, update the hosts entry in
/etc/nsswitch.conf by adding mdns, preferably between files and dns:
hosts: files mdns dns
root@cafe:/usr/ports/dns/mDNSResponder_nss #
インストール完了です。設定ファイルは/etc/nsswitch.confみたいですね。
root@cafe:/usr/ports/dns/mDNSResponder_nss # cp -p /etc/nsswitch.conf /etc/nsswitch.conf.orig
root@cafe:/usr/ports/dns/mDNSResponder_nss # vi /etc/nsswitch.conf
root@cafe:/usr/ports/dns/mDNSResponder_nss # diff /etc/nsswitch.conf /etc/nsswitch.conf.orig
7c7
< hosts: files dns
---
> hosts: files mdns dns
root@cafe:/usr/ports/dns/mDNSResponder_nss #
インストールしたときに出てきたメッセージのとおりに、hosts:セクションのfilesとdnsの間に、mdnsを追加します。
root@cafe:/usr/ports/dns/mDNSResponder_nss # ping virtual-xp.local
PING virtual-xp.local. (192.168.1.70): 56 data bytes
64 bytes from 192.168.1.70: icmp_seq=0 ttl=128 time=0.482 ms
64 bytes from 192.168.1.70: icmp_seq=1 ttl=128 time=0.498 ms
64 bytes from 192.168.1.70: icmp_seq=2 ttl=128 time=0.396 ms
64 bytes from 192.168.1.70: icmp_seq=3 ttl=128 time=0.455 ms
^C
--- virtual-xp.local. ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.396/0.458/0.498/0.039 ms
root@cafe:/usr/ports/dns/mDNSResponder_nss #
iTuneをインストールしたWindowsにpingを打ってみました。ホスト名.localで正常に名前解決ができることを確認しました。
mdnsのインストールと設定は以上です。