個人的備忘録：Windows Server における LDAP 名解決エラーのトラブルシューティングについてまとめてみた

## はじめに

Windows Server 環境で **LDAP 認証を利用** する際、適切に **DNS 名解決** が行われないと通信が失敗することがあります。  

:::note warn
**特に、`Test-NetConnection` コマンドを実行した際に **名前解決エラー** が発生すると、LDAP サーバーへの接続ができなくなります。**
:::

本記事では、**LDAP 名解決エラーの原因を特定** し、**DNS 設定の修正やポートの確認方法** を含む **トラブルシューティング手順** を解説します。  

これにより、**LDAP 認証が正常に機能する環境を構築** するためのポイントを理解できます。  

## **エラーの概要**
Windows Server において `Test-NetConnection -ComputerName ad.honda.com -Port 389` を実行した際に、以下の警告が表示されることがあります。

```
WARNING: Name resolution of ad.honda.com failed

ComputerName   : ad.honda.com
RemoteAddress  :
InterfaceAlias :
SourceAddress  :
PingSucceeded  : False
```

このエラーは、**DNS による名前解決が失敗** していることを意味します。LDAP 認証を行う前に、以下のトラブルシューティング手順を試してください。

---

## **Step 1: DNS 名解決を確認**
### **1.1 `nslookup` コマンドを実行**
PowerShell またはコマンドプロンプトで次のコマンドを実行します。

```powershell
nslookup ad.honda.com
```

#### **成功例**
```
Server:  dns.honda.com
Address:  192.168.1.1

Name:    ad.honda.com
Address: 192.168.1.10
```
→ **IPアドレスが正しく表示されていれば OK** なので、Step 2 に進みます。

#### **失敗例**
```
Server:  UnKnown
Address: 192.168.1.1

*** ad.honda.com を見つけられません: Non-existent domain
```
→ **DNS の設定が間違っている可能性があるため、次の手順で修正。**

---

## **Step 2: DNS 設定の確認 & 修正**
### **2.1 Windows サーバーの DNS 設定を確認**
以下のコマンドを実行して、現在の DNS 設定を確認します。

```powershell
Get-DnsClientServerAddress
```

#### **出力例**
```
InterfaceAlias              : Ethernet
InterfaceIndex              : 4
AddressFamily               : IPv4
ServerAddresses             : {192.168.1.1}
```
→ `ServerAddresses` に **ADサーバーの IP アドレスが含まれているか** を確認してください。

#### **AD サーバーの IP が設定されていない場合**
次のコマンドを実行し、ADサーバーの IP アドレスを設定します。

```powershell
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses ("192.168.1.10")
```
→ `192.168.1.10` は **AD サーバーの IP アドレス** に置き換えてください。

---

### **2.2 hosts ファイルで一時的に解決**
もし `ad.honda.com` の名前解決ができない場合、一時的に `hosts` ファイルを編集します。

#### **手順**
1. PowerShell を管理者権限で開く。
2. 次のコマンドを実行して `hosts` ファイルを開く。

   ```powershell
   notepad C:\Windows\System32\drivers\etc\hosts
   ```

3. `hosts` ファイルの末尾に以下を追加。
   ```
   192.168.1.10  ad.honda.com
   ```
4. ファイルを保存し、再試行。

---

## **Step 3: ポートの確認**
### **3.1 `Test-NetConnection` でポート確認**
DNS 設定を修正したら、LDAP ポート `389` (または LDAPS `636`) が開いているかを確認します。

```powershell
Test-NetConnection -ComputerName ad.honda.com -Port 389
```

#### **成功例**
```
TCP Test Succeeded
```
→ **ポートが開いているので、次のステップへ。**

#### **失敗例**
```
TCP Test Failed
```
→ **ファイアウォール設定を確認。**

---

### **3.2 ファイアウォールで LDAP ポートを開く**
AD サーバー (`ad.honda.com`) 側で、LDAP の `389` (または `636`) ポートが開いているかを確認し、閉じている場合は許可します。

#### **Windows Server の場合 (PowerShell)**
```powershell
New-NetFirewallRule -DisplayName "Allow LDAP" -Direction Inbound -Protocol TCP -LocalPort 389 -Action Allow
```

**LDAPS (SSL) を使う場合**
```powershell
New-NetFirewallRule -DisplayName "Allow LDAPS" -Direction Inbound -Protocol TCP -LocalPort 636 -Action Allow
```

---

## **Step 4: 再試行**
1. `nslookup ad.honda.com` で **名前解決が成功するか** 確認
2. `Test-NetConnection -ComputerName ad.honda.com -Port 389` で **ポートが開いているか** 確認
3. `ldapsearch` や PowerShell で LDAP 認証を試す

---

## **まとめ**
| ステップ | 確認事項 | コマンド |
|----------|----------|----------|
| **1. DNS解決を確認** | `ad.honda.com` がIPアドレスに解決できるか | `nslookup ad.honda.com` |
| **2. DNS設定の修正** | DNSが正しく設定されているか | `Get-DnsClientServerAddress` / `Set-DnsClientServerAddress` |
| **3. hosts ファイル修正** | 手動で名前解決を試す | `notepad C:\Windows\System32\drivers\etc\hosts` |
| **4. ポート確認** | `389` 番ポートが開いているか | `Test-NetConnection -ComputerName ad.honda.com -Port 389` |
| **5. ファイアウォール確認** | AD サーバーでポート許可 | `New-NetFirewallRule` |

これらの手順を実施し、LDAP 名解決の問題を解決してみてください。