メインコンテンツへスキップ
見出し画像

Windows 11のサイレントな変更と戦う――IPv4優先化とmDNS無効化の備忘録

    最近のWindows 11アップデートを適用してから、社内ネットワークの挙動に違和感を覚えるようになりました。
    一番分かりやすい変化は、コマンドプロンプトで `ping` を打った時の反応です。

    IPv6がデフォルトに? 名前解決の「お節介」

    いつの間にか、`ping` の結果が IPv6 アドレス(::1 や fe80::...)で返ってくるようになっていました。
    「最新のOSなんだから IPv6 を使うのが正しい」という理屈は分かります。しかし、実務の現場ではそうも言っていられない事情があります。

    私の職場では、一部のシステムで `hosts` ファイルを使った IP アドレス指定の名前解決を行っています。ここに IPv6 が割り込んでくると、期待した挙動にならず、管理上の都合が非常に悪くなるのです。

    そこで、レジストリを操作して「IPv6 自体は生かしつつ、IPv4 を優先する」というバッチファイル(`IPv4_Priority.bat`)を作成して対応することにしました。

    @echo off
    rem IPv4 を IPv6 より優先する設定 (最新 Windows 11 推奨版)
    rem このバッチファイルは管理者権限で実行する必要があります。
    
    setlocal
    
    echo ======================================================
    echo  Windows IPv4 優先設定 (レジストリ手法)
    echo ======================================================
    echo.
    
    rem レジストリキーのパス
    set "REG_PATH=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters"
    set "VAL_NAME=DisabledComponents"
    
    echo [1/2] 現在の設定を確認中...
    reg query "%REG_PATH%" /v "%VAL_NAME%" 2>nul
    if %errorlevel% neq 0 (
        echo 設定は見つかりませんでした(デフォルト動作:IPv6優先)。
    ) else (
        echo 現在の設定値が上記のように表示されました。
    )
    echo.
    
    echo [2/2] IPv4 優先設定を書き込んでいます (DisabledComponents = 0x20)...
    rem 0x20 (32) は「IPv6 を無効にせず、IPv4 を優先する」フラグです。
    reg add "%REG_PATH%" /v "%VAL_NAME%" /t REG_DWORD /d 32 /f
    
    if %errorlevel% equ 0 (
        echo.
        echo ------------------------------------------------------
        echo 設定が正常に反映されました。
        echo ※設定を完全に有効にするには、システムを再起動してください。
        echo ------------------------------------------------------
    ) else (
        echo.
        echo [エラー] レジストリの書き込みに失敗しました。
        echo 管理者権限で実行しているか確認してください。
    )
    
    echo.
    echo 設定を元に戻す(IPv6優先に戻す)場合は、以下のコマンドを実行してください:
    echo reg delete "%REG_PATH%" /v "%VAL_NAME%" /f
    echo.
    
    pause
    endlocal

    「.local」が勝手に付く問題(mDNS)


    もう一つの違和感は、ホスト名だけで `ping` をした際に、勝手に `.local` というドメインが付加されて解決されるようになったことです。

    これは mDNS (Multicast DNS) という仕組みによるものですが、今まで NetBIOS 等でシンプルに運用していた環境からすると、意図しない変換はトラブルの火種になりかねません。何かあった時に「何が原因で名前が引けないのか」を切り分ける手間が増えるのは避けたいところです。

    そのため、一旦 mDNS と LLMNR を無効化するバッチ(`mDNS_Disable.bat`)も用意し、従来の NetBIOS による名前解決を優先させるようにしました。

    @echo off
    rem mDNS (.local) および LLMNR を無効化する設定
    rem このバッチファイルは管理者権限で実行する必要があります。
    
    setlocal
    
    echo ======================================================
    echo  mDNS (.local) / LLMNR 無効化設定
    echo ======================================================
    echo.
    
    rem mDNS 無効化
    echo [1/2] mDNS を無効化しています (EnableMDNS = 0)...
    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters" /v "EnableMDNS" /t REG_DWORD /d 0 /f
    
    rem LLMNR 無効化
    echo [2/2] LLMNR を無効化しています (EnableMulticast = 0)...
    reg add "HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\DNSClient" /v "EnableMulticast" /t REG_DWORD /d 0 /f
    
    if %errorlevel% equ 0 (
        echo.
        echo ------------------------------------------------------
        echo 設定が正常に反映されました。
        echo ※設定を完全に有効にするには、システムを再起動してください。
        echo ------------------------------------------------------
    ) else (
        echo.
        echo [エラー] レジストリの書き込みに失敗しました。
        echo 管理者権限で実行しているか確認してください。
    )
    
    echo.
    pause
    endlocal

    IPv6 への移行、理想と現実


    もちろん、世界的に IPv4 アドレスが枯渇しているのは事実です。
    社員が持ち込むスマホを仕事で使うようなシチュエーションが増えれば、IPv4 のプライベートアドレス空間ですらやりくりが大変になるのは目に見えています。

    将来的には IPv6 への完全移行を拒否し続けることは難しいでしょう。
    しかし、「ある日突然、OSの判断で勝手に切り替わる」というのは、管理側からすれば「ちょっと待ってくれ」と言いたくなるのが本音です。

    現場には現場の、今日動かさなければならないシステムがあります。
    今回のバッチファイルは、そんな「理想と現実の狭間」で管理の手間を最小限に抑えるための、ささやかな抵抗の結果です。

    同じような悩みを持つ管理者の方々の、何かの参考になれば幸いです。

     
     
    社内システムエンジニアをしています。業務効率化のために AI 活用を学びながら、実際に日常業務で試せる小さなツールを少しずつ作っています。開発の過程で得られた学びを発信していきます。「小さな工夫で大きな省力化を」をテーマに役立つ情報を届けていきます。

    あなたへのおすすめ