Samba ADをDockerで構築!LDAPサーバーをmacvlanで独立運用する方法

はじめに

この記事では、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ではホスト自身からそのコンテナにアクセスできなくなるという制約があるので注意が必要です(必要であればmacvlan+bridge構成で解決可能)
この点については、別途記事にする予定です

macvlanネットワークが作成できたことを確認する

以下のコマンドで、Dockerのネットワークを確認します。NAMEがsamba_netになっているネットワークが存在すればOKです。

docker network ls

Docker bridgeとの違いと、なぜmacvlanが必要なのか

通常、Dockerでネットワークを構築するときは「bridge」モードが使われます。
これは、ホストとコンテナが同じIPを共有し、ポートフォワードでアクセスを中継する構成です。

一方、macvlanネットワークでは、Dockerコンテナに独立したIPアドレスとMACアドレスを与えることができます。
この構成により、LAN上で物理サーバーのように動作させることが可能になります。

特徴bridgemacvlan
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: 自動再起動ポリシー(任意)

networks: ディレクティブに、external: trueがないとコンテナ起動時にエラーにりました
macvlanネットワークに参加させるためには、事前に作成したネットワーク(例:samba_net)を明示的に使うようにexternal: trueを指定する必要があります

Samba ADコンテナの起動と動作確認

作成した、docker-compose.ymlファイルから、コンテナの起動と動作確認をします。

コンテナの起動

まずは、コンテナを起動します。

docker-compose up -d

コンテナの動作確認

起動ログを確認(エラーがないかチェック)

コンテナが正常に起動していることを、ログから確認します。

docker logs -f samba-ad

「Provision OK」や「Server started successfully」などが表示されていれば成功
DNS関連・Kerberos関連のエラーが出ていないかも確認ポイント

smb.confの自動生成確認

設定内容が正しく反映されているか確認(特に workgrouprealm)します。

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はmacvlanネットワーク上に構築しているため、ホスト(このcomposeを動かしているPC)からは直接アクセスできません。そのため、LAN上の他のPCやスマホなどからpingを実行して確認する必要があります

まとめ

この記事では、Samba ADをDocker上に構築し、macvlanで独立したIPを持たせることで、LAN上に実在するLDAPサーバーとして運用する方法を紹介しました。

macvlanネットワークを利用することで、Samba ADをあたかも1台の物理サーバーのように扱うことができ、Windowsのドメイン参加や他サービスとのLDAP連携もスムーズに実現できます。

また、Dockerで構成することで、構築の失敗時にもクリーンな再構築が容易であり、テストやバックアップにも強い柔軟な環境を作ることができます。

  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次