dullwhaleのメモ帳

何度も同じことを調べなくてよいように...

mDNSを殺す

マルチキャスト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を更新するとはできない。 これを一時的に無効化する。

これはリカバリモードで無効化できる。

  1. マシンを再起動し、command + Rをリンゴマークが出るまで押し続ける。
  2. リンゴマークが出たら離す。
  3. リカバリモードで起動したら、画面中央のダイアログを無視して画面上のメニューから「ユーティリティ」-> 「ターミナル」を起動する。
  4. ターミナルでcsrutil disableを実行する。コマンドの出力にあるとおり、再起動しないと反映されない。
  5. 画面上のメニューから再起動する。

    mDNSResponderを起動しないようにする

    次のコマンドで停止と無効化を行う。

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

もし必要になったら次のコマンドで戻せる。

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist