SMB ファイル サーバー共有アクセスが DNS CNAME エイリアスを介して失敗する

この記事では、DNS CNAME エイリアスが SMB ファイル サーバーにアクセスできない問題の解決策について説明します。

適用対象: Windows 10 - すべてのエディション、Windows Server 2019、Windows Server 2016、Windows Server 2012 R2、Windows 7 Service Pack 1
元の KB 番号: 3181029

現象

構成

  • Windows Server などの SMB ファイル サーバーを実行しています。 サーバーには、NetBIOS 名、DNS 完全修飾ドメイン名 (FQDN)、およびそのエイリアス (CNAME) を使用して構成されたファイルとリソースがあります。
  • Windows 7、Windows Server 2008 R2、またはそれ以降のバージョンの Windows を実行しているクライアントがあります。

シナリオ

  • アプリケーションまたはユーザーが、SMB を使用しているサーバー上のファイルまたはその他のリソースに対して実際のストレージ名 (NetBIOS 名または FQDN) を使用すると、アクセスは成功します。

  • アプリケーションまたはユーザーが、SMB を使用しているサーバー上のファイルまたはその他のリソースに対して CNAME エイリアスを使用し、DNS CNAME エイリアスを使用してファイル サーバー上の共有に接続しようとするとき。 たとえば、DNS CNAME エイリアスを使用してファイル サーバー上の共有に接続しようとするとします。

    NET USE * \\CNAME\share_name
    

    この場合、次の動作が発生します。

    • Windows Server 2008 R2 または Windows 7 クライアントからのアクセスが成功しました。

    • Windows Server 2012 R2、Windows 8.1、またはそれ以降のバージョンの Windows クライアントからのアクセスは失敗します。 この場合、次のようなエラー メッセージが表示されます。

      フォルダーを開く

      \\uncpath にアクセスできません。 このネットワーク リソースを使用するアクセス許可がない可能性があります。 アクセス許可があるかどうかをこのサーバーの管理者に問い合わせてください。

      ログオンエラー: ターゲット アカウント名が正しくありません。

原因

  • ネットワーク モニター、Wire Shark、または Microsoft Message Analyzer を使用して、SMB セッションのセットアップが成功したときにネットワーク トレースを調べる場合、セッションは TREE Connect に移動します。

    ただし、SMB セッションのセットアップが失敗したときにネットワーク トレースを調べると、Kerberos KRB_AP_ERR_MODIFIED エラーでセッションが失敗します。 ネットワーク トレースで SMB セッションセットアップ要求が失敗した例を次に示します。

    MessageNumber DiagnosisTypes Timestamp Source Destination Module Summary  
    112 None DateTime Client Server SMB2 Negotiate, Status: Success, 2780879Guid: {12f74af4-be82-11e5-b5c2-005056890096}, DialectRevision: SMB 2.  
    112 None DateTime Client Server SMB2 NegotiateRequest, Dialects: [SMB 2.0.2, SMB 2.1], Capabilities: , 2780879Guid: {12f74af4-be82-11e5-b5c2-  
    115 None DateTime Server Client SMB2 NegotiateResponse, Status: Success, DialectRevision: SMB 2.1, Capabilities: SMB2GlobalCapDfs|SMB2GlobalC  
    116 None DateTime Client Server SMB2 SessionSetup, Status: STATUS_MORE_PROCESSING_REQUIRED, Kerberos, Flags: 0  
    116 None DateTime Client Server SMB2 SessionSetupRequest, Kerberos, Flags: Unknown(0), PreviousSessionId: 0x0000000000000000  
    122 None DateTime Server Client SMB2 SessionSetupResponse, Status: STATUS_MORE_PROCESSING_REQUIRED, Kerberos, SessionId: 0x000004030800006D  
    135 None DateTime Client Server SMB2 SessionSetup, Status: STATUS_MORE_PROCESSING_REQUIRED, Kerberos, Flags: 0  
    135 None DateTime Client Server SMB2 SessionSetupRequest, Kerberos, Flags: Unknown(0), PreviousSessionId: 0x0000000000000000  
    143 None DateTime Server Client SMB2 SessionSetupResponse, Status: STATUS_MORE_PROCESSING_REQUIRED, Kerberos, SessionId: 0x000004030800006D
    

    SMB セッションセットアップ要求が失敗した場合、クライアントは正しくない CNAME SPN を転送します。 SPN は古いサーバーに登録されているため、正しくない可能性があります。 ただし、Windows Server 2008 R2 クライアントの場合など、SMB セッションセットアップ要求が成功すると、クライアントは実際のサーバー名の SPN を転送します。

  • ファイル サーバー名が DNS によって解決された場合、SMB クライアントは DNS サフィックスをユーザー指定の名前に追加します。 つまり、SPN の最初のコンポーネントは常に、次の例のようにユーザーが指定した名前になります。

    CNAME.contoso.com\share_name
    

    注:

    この試行は、Kerberos 認証用に構成できず、SMB ダイレクト ホスト ポート 445 をリッスンせず、NetBIOS ポート 139 でのみ行われる古い SMB 実装 (AIX Samba 3.5.8 など) では失敗します。

  • ファイル サーバー名が、次のような他のメカニズムによって解決された場合

    • Netbios
    • Link-Local マルチキャスト名解決 (LLMNR)
    • ピア名解決プロトコル (PNRP) プロセス

    SMB クライアントでは、次のようなユーザー指定の名前が使用されます。

    CNAME\share_name
    

解決方法

SMB バージョン 1 プロトコルを実行しているファイル サーバーでこの問題を解決するには、レジストリに DisableStrictNameChecking 値を追加します。

レジストリの場所: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
DWORD 名: DisableStrictNameChecking
DWORD 値: 1

重要

今後、ファイル サーバーに DNS CNAME を使用しないでください。 サーバーに代替名を付ける場合は、次のコマンドを使用します。
NETDOM COMPUTERNAME/ADD

このコマンドは、代替名の SPN を自動的に登録します。

Windows ベースではないファイル サーバーでは、Windows ベースのコンピューターの管理者特権のコマンド プロンプト ウィンドウで次のコマンドを入力して、この問題を解決することはお勧めしません。 ドメイン管理者の資格情報を使用してログオンする必要があります。 次に、コマンド プロンプトで Enter キーを押して、Windows ベース以外のファイル サーバー ストレージ デバイスの CNAME の SPN を登録します。

SETSPN -a host/alias_name targetserver
SETSPN -a host/alias_name.contoso.com targetserver

注:

ネットワーク トレース

ネットワーク トレースを収集するには、次の手順に従います。

  1. 管理者特権のコマンド プロンプト ウィンドウを開き、次のコマンドを入力して Enter キーを押します。

    netsh trace start NetConnection capture=yes maxsize=100 filemode=circular overwrite=yes traceFile=c:\%COMPUTERNAME%_Repro_trace.etl
    
  2. 次のコマンドを実行して、既存の File Server ネットワーク接続を削除します。

    NET USE * /DELETE
    
  3. 既存のキャッシュを削除して、すべての名前キャッシュを初期化します。

    1. DNS キャッシュを削除するには、次のコマンドを入力し、Enter キーを押します。

      IPCONFIG /FLUSHDNS
      
    2. NetBIOS キャッシュを削除するには、次のコマンドを入力し、Enter キーを押します。

      NBTSTAT /RR
      
    3. Kerberos キャッシュを削除するには、次のコマンドを入力し、Enter キーを押します。

      KLIST /PURGE
      
    4. ARP キャッシュを削除するには、次のコマンドを入力し、Enter キーを押します。

      ARP -d
      
  4. 次のコマンドを入力し、Enter キーを押して、ネットワーク共有に接続してみてください。

    NET USE * \\server_name\share_name
    
  5. 失敗したシナリオでネットワーク トレースを停止するには、次のコマンドを入力し、Enter キーを押します。

    netsh trace stop
    

レジストリ設定を収集する

ファイル サーバーのレジストリ設定を収集するには、[ スタート] を選択し、[ 実行] を選択し、[開く] ボックスにコマンドを入力して、[OK] を選択 します。 次のコマンドに対して、この手順を繰り返します。

REG.EXE SAVE HKLM\SYSTEM C:\TEMP\%COMPUTERNAME%_SYSTEM.HIV
REG.EXE SAVE HKLM\SOFTWARE C:\TEMP\%COMPUTERNAME%_SOFTWARE.HIV
REG.EXE SAVE HKCU\Software C:\TEMP\%COMPUTERNAME%_HKCU.HIV

注:

レジストリ設定ファイル (.HIV) は、ファイル サーバー上の TEMP フォルダーに保存されます。

レジストリ設定を確認する

ファイル サーバーで次のレジストリ値の設定を確認します。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SmbServerNameHardeningLevel
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters\DisableStrictNameChecking

修正プログラムを適用する (サーバーとクライアント)

Windows 7 および Windows Server 2008 R2 の場合は、次の Windows 7 Enterprise 修正プログラム ロールアップを適用します。

Windows 7 SP1 および Windows Server 2008 R2 SP1 では、エンタープライズ修正プログラムロールアップを使用できます

さらに、次の修正プログラムを適用します。

関連情報

サードパーティの情報に関する免責事項

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。