マルチキャストDNS(mDNS: multicast domain name system)という無駄な仕組みがある。 mDNSはDNSサーバが存在しない特殊なLAN内において、ホスト名の名前解決するための仕様であり、RFC 6762で定義されている。
DNSサーバが利用できない異常な環境は普通ない。 mDNSが稼働していると以下のような問題を引き起こす。
- 計算機資源の浪費
- ネットワークの帯域の浪費
- マルチキャストでホスト解決のクエリがLAN内各ホストに漏れる
これはNetBIOSなどと同様の悪しきプロトコルである。 mDNSではUDP 5353ポートを利用する。 ネットワーク上で宛先のポートがUDP 5353のデータグラムを検出したら、どこかにmDNSを喋る悪のホストがいると考えた方が良い。
各OSでのmDNSの殺し方
Windows
ここに手順を書いた。 サービスを停止するより、機能自体をグループポリシーで無効化すると良い。
Windows10の簡素なチューニング - dullwhaleのメモ帳
Linux
ここに手順を書いた。
Raspberry Pi 3 Model Bでarm64のdocker-composeを起動するまでの作業ログ - dullwhaleのメモ帳
Linuxでは「Avahi」というデーモンが動いている可能性がある。
大抵はディストロごとのパッケージマネージャでアンインストールすれば良い。
apt系ではavahi-daemon
だった。
macOS
mDNSResponderは名前に反して通常の名前解決も担うDNSクライアントである。 ほとんどの場合、停止してはならない。 大半の名前解決ができなくなる。
以下は過去のログ
mDNSResponder
というものが動いている。
SIPを一時的に無効化
macOSのセキュリティ機能であるSIP(system integrity protection)により、sudoしてrootユーザになっても/System
を更新するとはできない。
これを一時的に無効化する。
これはリカバリモードで無効化できる。
- マシンを再起動し、command + Rをリンゴマークが出るまで押し続ける。
- リンゴマークが出たら離す。
- リカバリモードで起動したら、画面中央のダイアログを無視して画面上のメニューから「ユーティリティ」-> 「ターミナル」を起動する。
- ターミナルで
csrutil disable
を実行する。コマンドの出力にあるとおり、再起動しないと反映されない。 - 画面上のメニューから再起動する。
mDNSResponderを起動しないようにする
次のコマンドで停止と無効化を行う。
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
もし必要になったら次のコマンドで戻せる。
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist