0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL2 + Ubuntu 22.04 で Samba AD DC を BIND9 と共存させる

0
Posted at

本記事はClaudeと共に作業をした際に結構引っかかったので、設定完了後にClaudeにBlogとしてまとめてもらったものです。

本手順は開発・学習目的を想定しています。WSL2 固有の回避策を含むため、本番環境には Hyper-V や VMware 上の専用 VM での構築を推奨します。

概要

Windows 11 の WSL2 上で動作する Ubuntu 22.04 に、オープンソースの Active Directory 実装である Samba 4 を構築した手順の記録です。

既存の BIND9 DNS サーバが稼働中であったため、Samba の内蔵 DNS(SAMBA_INTERNAL)は使用せず、BIND9 DLZ バックエンドで共存させる構成を採用しました。

環境

項目
OS Ubuntu 22.04 LTS on WSL2
カーネル 6.6.87.2-microsoft-standard-WSL2
Samba 4.15.13-Ubuntu
BIND 9.18.39-Ubuntu
ドメイン TEST.LOCAL
DC ホスト名 dc1.test.local
DNS バックエンド BIND9_DLZ

構成のポイント

既存構成:  BIND9(port 53)が稼働中
採用構成:  Samba → BIND9 DLZ バックエンドを使用
           (Samba 内蔵 DNS を使わないため port 53 の競合なし)

手順

1. systemd の有効化

WSL2 はデフォルトで systemd が無効なため、/etc/wsl.conf に以下を記述します。

[boot]
systemd=true

[network]
generateResolvConf=false

PowerShell で WSL を再起動します。

wsl --shutdown
wsl

2. ホスト名と /etc/hosts の設定

sudo hostnamectl set-hostname dc1.test.local

/etc/hosts に追記します。

127.0.0.1   localhost
172.27.29.241   dc1.test.local   dc1

3. 必要パッケージのインストール

sudo apt install -y samba krb5-config krb5-user winbind smbclient bind9 bind9utils dnsutils

Kerberos の設定プロンプトでは以下を入力します。

項目
Default realm TEST.LOCAL(大文字)
Kerberos servers dc1.test.local
Administrative server dc1.test.local

4. 既存設定のクリア

sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
sudo mv /etc/krb5.conf /etc/krb5.conf.bak

5. BIND9_DLZ バックエンドでプロビジョニング

--dns-backend=BIND9_DLZ を指定することが最重要ポイントです。これにより Samba 内蔵 DNS の代わりに BIND9 が DNS を管理します。

sudo samba-tool domain provision \
  --use-rfc2307 \
  --realm=TEST.LOCAL \
  --domain=TEST \
  --server-role=dc \
  --dns-backend=BIND9_DLZ \
  --adminpass='YourStrongPassword123!'

6. Kerberos 設定をコピー

sudo cp /var/lib/samba/private/krb5.conf /etc/krb5.conf

7. 競合サービスを無効化

samba-ad-dcsmbd / nmbd / winbind を内部で管理するため、systemd からの独立起動を無効にします。

sudo systemctl disable smbd nmbd winbind
sudo systemctl stop smbd nmbd winbind

8. BIND9 DLZ 統合設定

named.conf.local

独自の DLZ ブロックを書かず、Samba が自動生成したファイルを include するだけにします。
これにより BIND バージョンに合った .so ファイルが自動的に使われます。

sudo tee /etc/bind/named.conf.local << 'EOF'
//
// Do any local configuration here
//

include "/var/lib/samba/bind-dns/named.conf";
EOF

Samba プロビジョニング時に /var/lib/samba/bind-dns/named.conf が自動生成されます。BIND 9.18.x 向けに dlz_bind9_18.so が指定されているため、手動で .so パスを書く必要はありません。

named.conf.options

options {
    directory "/var/cache/bind";

    tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab";
    minimal-responses yes;

    forwarders {
        xxx.xxx.xxx.xxx;  # 社内ネットワークから出れるように社内DNSをフォワーダーとして指定
        xxx.xxx.xxx.xxx; # 社内ネットワークから出れるように社内DNSをフォワーダーとして指定
    };
    forward only;

    dnssec-validation no;
    auth-nxdomain no;
    listen-on { any; };
    listen-on-v6 { any; };
    interface-interval 0;
};

tkey-gssapi-keytab のパスは /var/lib/samba/private/dns.keytab ではなく /var/lib/samba/bind-dns/dns.keytab です。混同しやすいので注意してください。

BIND を root で実行する設定(WSL2 固有)

WSL2 環境固有の問題として、bind ユーザーでは TDB ファイルのセキュリティ記述子を通過できないため、root 実行とします。

/etc/default/named を編集します。

RESOLVCONF=no
OPTIONS=""   # -u bind を削除

bind-dns ディレクトリの権限設定

sudo chgrp -R bind /var/lib/samba/bind-dns/
sudo chmod -R 750 /var/lib/samba/bind-dns/

9. サービス起動順序の設定と起動

sudo mkdir -p /etc/systemd/system/samba-ad-dc.service.d

sudo tee /etc/systemd/system/samba-ad-dc.service.d/override.conf << 'EOF'
[Unit]
After=named.service
Wants=named.service
EOF

sudo systemctl daemon-reload

# BIND9 を先に起動
sudo systemctl start named

# Samba を起動
sudo systemctl start samba-ad-dc

10. resolv.conf の設定

sudo tee /etc/resolv.conf << 'EOF'
nameserver 127.0.0.1
search test.local
EOF

動作確認

# DNS(SOA レコード)
dig @127.0.0.1 test.local SOA

# DNS(SRV レコード)
dig @127.0.0.1 _ldap._tcp.test.local SRV
dig @127.0.0.1 _kerberos._tcp.test.local SRV

# ドメイン情報
sudo samba-tool domain info 172.27.29.241

# Kerberos 認証
kinit administrator@TEST.LOCAL
klist

# ユーザー一覧
sudo samba-tool user list

正常に動作している場合の出力例:

Forest           : test.local
Domain           : test.local
Netbios domain   : TEST
DC name          : dc1.test.local
DC netbios name  : DC1
Server site      : Default-First-Site-Name
Client site      : Default-First-Site-Name
Using default cache: /tmp/krb5cc_1000
Using principal: administrator@TEST.LOCAL
Authenticated to Kerberos v5

トラブルシューティング

構築中に発生した問題と解決策を記録します。

問題1: ポート 389(LDAP)競合

エラー

ldapsrv failed to bind to :::389 - NT_STATUS_ADDRESS_ALREADY_ASSOCIATED

原因
WSL2 上の別プロセスがポート 389 を先に確保していた。

解決
--dns-backend=BIND9_DLZ で再プロビジョニング。Samba 内蔵 DNS を使わない構成にすることで競合を根本から回避。


問題2: ポート 53(DNS)競合

エラー

Failed to bind to :::53 TCP - NT_STATUS_ADDRESS_ALREADY_ASSOCIATED

原因
systemd-resolved がポート 53 を使用していた。

解決

sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
sudo unlink /etc/resolv.conf

問題3: 各種ディレクトリ・ファイルのパーミッション不正

エラー

invalid permissions on directory '/var/lib/samba/private/msg.sock': has 0755 should be 0700
invalid permissions on file '/var/lib/samba/private/tls/key.pem': has 0755 should be 0600
invalid permissions on directory '/var/lib/samba/ntp_signd': has 0755 should be 0750
invalid permissions on directory '/var/lib/samba/winbindd_privileged': has 0755 should be 0750

原因
chmod -R 755 を実行したことで本来より広い権限が付与されてしまった。

解決
エラーメッセージの should be XXXX に従い個別修正します。

sudo chmod 700 /var/lib/samba/private/msg.sock
sudo chmod 600 /var/lib/samba/private/tls/key.pem
sudo chmod 644 /var/lib/samba/private/tls/cert.pem
sudo chmod 750 /var/lib/samba/ntp_signd
sudo chmod 750 /var/lib/samba/winbindd_privileged

問題4: smbd と samba-ad-dc の競合

エラー

server role = 'active directory domain controller' not compatible with running smbd standalone.
You should start 'samba' instead

原因
Ubuntu のパッケージ構成では smbd が systemd サービスとして独立起動しており、AD DC モードの samba プロセスと競合していた。

解決

sudo systemctl disable smbd nmbd winbind
sudo systemctl stop smbd nmbd winbind

問題5: DLZ ゾーン設定失敗(.so バージョン不一致)

エラー

samba_dlz: Failed to configure zone 'test.local'

原因
手動で dlz_bind9_12.so を指定していたが、インストールされた BIND は 9.18.x のため不一致。また test.local の静的ゾーン定義も残っており DLZ と競合していた。

解決
named.conf.local を Samba 生成ファイルの include 1行に置き換え。

include "/var/lib/samba/bind-dns/named.conf";

問題6: bind ユーザーでの TDB アクセス Permission denied(WSL2 固有)

エラー

Unable to open tdb '/var/lib/samba/bind-dns/dns/sam.ldb': Permission denied: Operations error

原因
ファイルシステム上のパーミッションは正しいにも関わらず、WSL2 環境では TDB ファイル内部のセキュリティ記述子が bind ユーザーのアクセスをブロックしていた。

解決
/etc/default/named から -u bind を削除し、root で実行する。

OPTIONS=""

BIND を root で動かすことはセキュリティ上非推奨です。WSL2 開発環境に限定した回避策として使用し、本番環境では使用しないでください。


まとめ

WSL2 + Ubuntu 22.04 で Samba AD DC と BIND9 を共存させるための重要ポイントです。

ポイント 対応
DNS バックエンド BIND9_DLZ を使用(内蔵 DNS は使わない)
named.conf の DLZ 設定 Samba 生成の named.confinclude するだけ
tkey-keytab のパス /var/lib/samba/bind-dns/dns.keytabprivate ではない)
BIND の実行ユーザー WSL2 では -u bind を外して root 実行
smbd/nmbd/winbind systemd から無効化(samba が管理)
ファイル権限 Samba のエラーメッセージ should be XXXX に従い設定

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?