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

この記事では、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 にアクセスできません。 このネットワーク リソースを使用するアクセス許可がない可能性があります。 アクセス許可があるかどうかをこのサーバーの管理者に問い合わせてください。

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

原因

  • ネットワーク モニター、ワイヤ シャーク、または Microsoft メッセージ アナライザーを使用して、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
    • リンク ローカル マルチキャスト名解決 (LLMNR)
    • ピア名解決プロトコル (PNRP) プロセス

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

    CNAME\share_name
    

解決方法

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

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

重要

ファイル サーバーには、今後 DNS CNAM を使用しないでください。 サーバーに代替名を付ける場合は、次のコマンドを使用します。
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 では、エンタープライズ修正プログラムロールアップを使用できます

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

関連情報

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

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