はじめに
この記事では、Samba AD(SambaによるActive Directory互換の認証サーバー)をDocker上で構築し、LDAPサーバーとして独立運用できる環境を作る方法を紹介します。特に複数のポートを使用するSamba ADを安定して運用するために、Dockerのmacvlanネットワークと固定IPアドレスの割り当てによる構成を採用します。
この方法により、Samba ADを、あたかも1台の物理サーバーのようにLAN上で扱えるようになり、Windowsのドメイン参加や、Nextcloud、RedmineなどのLDAP連携もスムーズになります。
Samba ADをDockerで構築するメリットとは
Samba ADをDockerで構築することで、環境の分離・再現性・柔軟なテストが可能になります。
特に物理サーバーやホストOSと共存させると、ポート競合や設定の混在が起こりやすくなります。
理由は、Samba ADは以下のように複数のポートを使用しているからです。
- LDAP(389)
- LDAPS(636)
- Kerberos(88)
- DNS(53)
- SMB(445)
これらのポートは他のサービスでも使われがちで、すでにホストでdnsmasqやsmbなどが動作していると、構築時にバッティングして失敗することがあります。
DockerコンテナとしてSamba ADを独立させておけば、これらのリスクを回避でき、他のサービスに影響を与えることなく運用できます。
さらに、構成が安定すれば、バックアップや再構築も簡単になります。仮に失敗してもコンテナを削除するだけで環境をクリーンに戻せるため、検証や移行にも非常に便利です。
このように、Docker化することでSamba ADの運用はより安全・安定・柔軟になります。
Samba AD を採用する一番のメリットはWindowsのドメイン参加が可能なこと
Samba ADを構築することで、Windowsクライアントをドメインに参加させることができるようになります。
これは、OpenLDAPなどでは実現が難しい「Active Directory互換のLDAPサーバー」としての最大の特長です。
認証・ユーザー管理の一元化が可能になり、Windowsだけでなく、NextcloudやRedmineといった他サービスとの連携にも強みを発揮します。
macvlanで固定IPを割り当てる方法
Samba ADを安定運用するためには、Dockerコンテナに固定IPを割り当て、他のサーバーと同じようにLAN上で動作させる構成が理想的です。
そのために活用できるのが、Dockerの「macvlanネットワーク」です。
macvlanを使うと、Dockerコンテナにホストとは異なるMACアドレスとIPアドレスを割り当てることができ、ネットワーク上で完全に独立した機器のように振る舞わせることができます。 これにより、Windowsなどのクライアント機から直接アクセスできるようになり、ドメインコントローラーとして必要なポートも自由に使えるようになります。
Docker macvlanネットワークの作成手順
まずはmacvlanネットワークを作成します。以下は例として、192.168.1.0/24
のLANで、ゲートウェイが192.168.1.1
の構成です。
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 \
samba_net
各項目の説明:
--subnet
: コンテナが使うIPレンジ--gateway
: LANのゲートウェイ(通常はルーター)-o parent=eth0
: ホストの物理NIC名(ip a
などで確認)samba_net
: ネットワーク名(任意)
macvlanネットワークが作成できたことを確認する
以下のコマンドで、Dockerのネットワークを確認します。NAMEがsamba_net
になっているネットワークが存在すればOKです。
docker network ls
Docker bridgeとの違いと、なぜmacvlanが必要なのか
通常、Dockerでネットワークを構築するときは「bridge」モードが使われます。
これは、ホストとコンテナが同じIPを共有し、ポートフォワードでアクセスを中継する構成です。
一方、macvlanネットワークでは、Dockerコンテナに独立したIPアドレスとMACアドレスを与えることができます。
この構成により、LAN上で物理サーバーのように動作させることが可能になります。
特徴 | bridge | macvlan |
---|---|---|
IPアドレス | ホストと共有 | 独立したIP |
MACアドレス | ホストのものを使用 | 独自のMACを割り当て |
LAN内の別機器からのアクセス | ホストIP+ポートでアクセス | コンテナIPに直接アクセス可 |
ポート競合 | ホストと競合する | 競合しない |
LAN上からの認識 | 中継されたプロセスとして見える | 完全な1台の機器として見える |
Samba ADは、LDAP(389)やKerberos(88)、SMB(445)など複数のポートを同時に使うため、bridge構成ではポート競合が発生しやすく、正しく動作しないケースが多発します。
さらに、Windowsのドメイン参加では「LAN上に存在するドメインコントローラー」へ直接アクセスする必要があるため、bridgeモードでは参加自体が失敗します。
このような理由から、Samba ADをDockerで構築する場合はmacvlan構成が必須となります。
Samba ADをDockerで構築する
以下は、servercontainers/samba
イメージを使って、Samba ADをDockerで構築するための docker-compose.yml
のサンプルです。
macvlanネットワークで独立IPを持たせ、Active Directoryドメインとして機能するように設定しています。
version: '3.8'
services:
samba-ad:
container_name: samba-ad
image: servercontainers/samba
networks:
samba_net:
ipv4_address: 192.168.100.20
environment:
- SAMBA_DOMAIN=EXAMPLE
- SAMBA_REALM=AD.EXAMPLE.LOCAL
- SAMBA_ADMIN_PASSWORD=YourSecurePass123
- SAMBA_PROVISION=domain
- SAMBA_DNS_BACKEND=SAMBA_INTERNAL
volumes:
- ./samba/config:/etc/samba
- ./samba/db:/var/lib/samba
- ./samba/cache:/var/cache/samba
- ./samba/log:/var/log/samba
restart: unless-stopped
networks:
samba_net:
driver: macvlan
external: true
driver_opts:
parent: eth0
ipam:
config:
- subnet: 192.168.100.0/24
gateway: 192.168.100.1
各項目の説明:
container_name
: コンテナ名を固定(ログなどで管理しやすくなる)image
: 使用するイメージ(今回はservercontainers/samba
)networks
: macvlanネットワークで、ホストと分離したIP(192.168.1.20)を付与environment
: AD構築に必要なドメイン名やパスワードなどを設定volumes
: 設定ファイルやデータベース、ログの永続化先を明示的に分けるrestart
: 自動再起動ポリシー(任意)
Samba ADコンテナの起動と動作確認
作成した、docker-compose.ymlファイルから、コンテナの起動と動作確認をします。
コンテナの起動
まずは、コンテナを起動します。
docker-compose up -d
コンテナの動作確認
起動ログを確認(エラーがないかチェック)
コンテナが正常に起動していることを、ログから確認します。
docker logs -f samba-ad
smb.confの自動生成確認
設定内容が正しく反映されているか確認(特に workgroup
や realm
)します。
docker exec -it samba-ad cat /etc/samba/smb.conf
ドメイン情報の確認コマンド
ドメイン名・サイト名・FSMOロールの情報などが設定どおりかを確認します。
docker exec -it samba-ad samba-tool domain info 127.0.0.1
LAN内の別機器からPingで、Samba ADが見えているか確認する
Windowsなどの別機器から、Samba ADのコンテナにアクセスできることを確認します。
ping 192.168.100.20
Samba ADはmacvlanネットワーク上に構築しているため、ホスト(このcomposeを動かしているPC)からは直接アクセスできません。
そのため、LAN上の他のPCやスマホなどからpingを実行して確認する必要があります。
まとめ
この記事では、Samba ADをDocker上に構築し、macvlanで独立したIPを持たせることで、LAN上に実在するLDAPサーバーとして運用する方法を紹介しました。
macvlanネットワークを利用することで、Samba ADをあたかも1台の物理サーバーのように扱うことができ、Windowsのドメイン参加や他サービスとのLDAP連携もスムーズに実現できます。
また、Dockerで構成することで、構築の失敗時にもクリーンな再構築が容易であり、テストやバックアップにも強い柔軟な環境を作ることができます。
コメント