彷徨うITエンジニアの雑記

ITインフラ関連の雑記とか

CNAMEでSMB共有にアクセスしたい (2/2)

前回の続きです。
wanderingengineer.hatenablog.com

本投稿ではファイルサーバをCNAMEでアクセスさせる際の、具体的な設定手順を解説していきます。

作業環境

ドメイン名 = domain1.local
DNSエイリアス = nas-alias.domain1.local

ホスト名 OS 役割
ad1 Windows Server 2019 ADサーバ、DNSサーバ
nas-real Windows Server 2019 ファイルサーバ
client1 Windows Server 2019 SMBクライアント

DNSサーバにCNAMEレコードを作成する

WindowsDNSマネージャから、ファイルサーバ "nas-real.domain1.local" を参照するCNAMEレコードを作成します。

ファイルサーバのコンピュータアカウントに、DNSエイリアスに対応するSPNを追加する

適当なドメインコンピュータから、Domain Admins権限で setspn コマンドを実行します。
サービスクラスは"HOST"を指定します。
setspn -A HOST/< DNSエイリアス > < ファイルサーバのコンピュータアカウント名 >


* "HOST" は "cifs" を含む複数のクラスのマッピングのようです。*1 動作確認時に問題が発生した場合は "cifs/" のSPNを追加してみてください。


FQDNとホスト名の2個分を登録します。

PS > setspn -A HOST/nas-alias.domain1.local nas-real
ドメイン DC=domain1,DC=local を確認しています

CN=NAS-REAL,CN=Computers,DC=domain1,DC=local の ServicePrincipalNames を登録しています
        HOST/nas-alias.domain1.local
更新されたオブジェクト

PS > setspn -A HOST/NAS-ALIAS nas-real
ドメイン DC=domain1,DC=local を確認しています

CN=NAS-REAL,CN=Computers,DC=domain1,DC=local の ServicePrincipalNames を登録しています
        HOST/NAS-ALIAS
更新されたオブジェクト

SPN追加後のファイルサーバのSPNを確認します。
setspn -L < ファイルサーバのコンピュータアカウント名 >

PS > setspn -L nas-real
次の項目に登録されている CN=NAS-REAL,CN=Computers,DC=domain1,DC=local:
        HOST/NAS-ALIAS
        HOST/nas-alias.domain1.local
        WSMAN/NAS-ALIAS
        TERMSRV/NAS-ALIAS
        RestrictedKrbHost/NAS-ALIAS
        WSMAN/nas-real
        WSMAN/nas-real.domain1.local
        TERMSRV/nas-real
        TERMSRV/nas-real.domain1.local
        RestrictedKrbHost/nas-real
        HOST/nas-real
        RestrictedKrbHost/nas-real.domain1.local
        HOST/nas-real.domain1.local

"SPNターゲット名検証レベル"をオフに設定する

ADサーバでポリシーの結果セットを出力して、該当ポリシーが"未実装"または"オフ"になっていることを確認します。

f:id:wandering_engineer:20200223000358p:plain


またはファイルサーバと適当なクライアント上で、レジストリの SmbServerNameHardeningLevel の値が"0"になっていることを確認します。

PS > Get-ItemProperty -PATH "Registry::HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" -Name SmbServerNameHardeningLevel


SmbServerNameHardeningLevel : 0
PSPath                      : Microsoft.PowerShell.Core\Registry::HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\P
                              arameters
PSParentPath                : Microsoft.PowerShell.Core\Registry::HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer
PSChildName                 : Parameters
PSProvider                  : Microsoft.PowerShell.Core\Registry

DNSエイリアスをファイルサーバの代替名として登録する(Windowsのみ)


*この手順はWindowsベースのファイルサーバのみ実施します。アプライアンスNASについては、類似の対応が必要か個別に確認してください。


ファイルサーバにログインし、Domain Admin権限で netdom コマンドを実行します。
netdom computername $(hostname) /add:< DNSエイリアス >

PS > netdom computername $(hostname) /add:nas-alias.domain1.local
nas-alias.domain1.local をコンピューターの代替名として
正常に追加しました。

コマンドは正しく完了しました。

登録されている全てのホスト名を表示し、DNSエイリアスが追加されていることを確認します。
netdom computername $(hostname) /Enumerate

PS > netdom computername $(hostname) /Enumerate
コンピューターのすべての名前:

nas-real.domain1.local
nas-alias.domain1.local
コマンドは正しく完了しました。

念のためWindowsを再起動しておきます。

接続確認(Kerberos認証)

ドメインユーザでSMBクライアントにログインし、キャッシュされているサービスチケットを削除します。

PS > klist purge

現在のログオン ID: 0:0x77438
        すべてのチケットを削除しています:
        チケットが削除されました。

DNSエイリアスでUNCパスを指定し、共有を参照できること、サービスチケットをキャッシュ出来ていることを確認します。
"net use"コマンドの場合はNTLM認証が使用されたので、エクスプローラか、"Get-ChildItem"コマンドを使用してください。
キャッシュされたチケットは"klist tickets"で確認できます。

PS > Get-ChildItem -Directory -Path \\nas-alias.domain1.local\project


    ディレクトリ: \\nas-alias.domain1.local\project


 Mode                LastWriteTime         Length Name
 ----                -------------         ------ ----
 d-----        2/21/2020   5:04 PM                プロジェクトフォルダ1

PS > klist tickets
...
#1>     クライアント: administrator @ DOMAIN1.LOCAL
        サーバー: cifs/nas-alias.domain1.local @ DOMAIN1.LOCAL
        Kerberos チケットの暗号化の種類: AES-256-CTS-HMAC-SHA1-96
        チケットのフラグ 0x40a10000 -> forwardable renewable pre_authent name_canonicalize
        開始時刻: 2/23/2020 0:40:48 (ローカル)
        終了時刻: 2/23/2020 10:40:48 (ローカル)
        更新期限: 3/1/2020 0:40:48 (ローカル)
        セッション キーの種類: AES-256-CTS-HMAC-SHA1-96
        キャッシュ フラグ: 0
        呼び出された Kdc: ad1.domain1.local

接続確認(NTLM認証)

ローカルユーザでSMBクライアントにログインします。
エクスプローラか"net use"コマンドを使用し、アクセス権を有するドメインユーザで共有を参照します。
DNSエイリアスでUNCパスを指定し、共有を参照できること、サービスチケットをキャッシュしていないことを確認します。

PS > net use z: \\nas-alias.domain1.local\project /user:domain1\administrator
コマンドは正常に終了しました。

PS > Get-ChildItem -Directory -Path Z:


    ディレクトリ: Z:\


 Mode                LastWriteTime         Length Name
 ----                -------------         ------ ----
 d-----        2/21/2020   5:04 PM                プロジェクトフォルダ1


PS > klist tickets

現在のログオン ID: 0:0x965de5

キャッシュされたチケット: (0)


以上です。




参考にした情報:
Using Computer Name Aliases in place of DNS CNAME Records - Microsoft Tech Community - 259064
The service principal name (SPN) target name validation level will be turned off.