X

Raspberry PiでActive Directoryのセカンダリードメインコントローラー構築を考える

Windows Server Essentialsでは、Active Directoryが必須となっています。これは、Windows Server Essentials エクスペリエンスがなくなったWindow Server 2019 Essentialsでも変わりません。

Active Directoryのドメインコントローラーを構築すると、SSOなどのメリットが大きい一方で、万が一ドメインコントローラーに障害が発生した場合にコンピューターへのログインができなくなるなど、サーバー障害時の影響も大きくなります。

そのため、ドメインコントローラーのバックアップは不可欠となってきますし、ドメインコントローラーを複数立てて複製を取っておくことがベストプラクティスとして推奨されています。

Windows Server Essentialsではセカンダリーのドメインコントローラーをどうするか??

Windows Server Essentialsで初めてのドメインコントローラーを構築したSmall Business 環境において、セカンダリーのドメインコントローラーは悩ましい問題が生じてきます。それは、

  • Windows Server Essentialsは、FSMOの役割を持つ唯一のドメインコントローラーである必要がある

ことから、同じWindows Server Essentialsを2台目のドメインコントローラーとして追加することができないためです。

つまり、Windows Server Essentialsがドメインコントローラーとなっている場合、セカンダリーのドメインコントローラーはStandardなど通常のWindows Serverを利用する必要がある(バックアップ用にEssentialsよりも高価なOSを購入する必要がある)という矛盾ともいえる状態となります。このような場合、どうするのがよいか考えてみます。

方法1. Azure上にもドメインコントローラーを建てる

いまならAzureを使って、Azure上の仮想マシンでドメインコントローラーを追加で建てる、あるいはAzure Backupを使って仮想マシンとしてバックアップを取っておくのが一番手っ取り早く、安価にすむ方法だと思います。

将来クラウドとの連携や災害対策(DR)やBCPを考えていくなら、なおさらクラウドを活用するのが得策でしょう。

Azure VPNやAzure Backupについては過去にも紹介をしましたが、Essentials エクスペリエンスでも利用しやすくなっていますが、一方で、AzureとVPN接続してオフィスとAzureの間で通信を可能にするなど、少し技術的なハードルを覚える方がいらっしゃるのもまた事実かと思います。

方法2. Sambaで代替する

Windows Server 2008 R2相当のドメインという制約はつきますが、今ではSambaでもActive Directoryを立てられるようになっています。セカンダリーのドメインコントローラとして建てた場合に、DFS-RでのSysvol複製はできないなど、完全に互換があるわけではありませんが、(手間暇は要するものの)安価を優先するならば選択してとして有効ではないかと思います。

Windows Serverのドメインコントローラーの機能レベルを下げるには、以下のコマンドレットを使用します。

フォレストの機能レベルを2008R2まで下げるコマンドレット:
Set-ADForestMode –Identity [ドメイン名] –ForestMode windows2008r2

ドメインの機能レベルを2008R2まで下げるコマンドレット:
Set-ADDomainMode –Identity [ドメイン名] –DomainMode windows2008r2domain

Raspberry PiをWindowsドメインにドメインコントローラーとして追加する

今回は、手元のRaspberry Piを既存のWindowsドメインに対してドメインコントローラーとして追加することにしました。Raspberry Piであれば省電力・安価ですので、コスト的な負担も小さく実現できます。

手順

  1. hostsファイルを編集して、ドメインコントローラのIPアドレスとFQDN、raspberry Piのループバックアドレスに対してlocalhost.(ドメイン名)を登録しておきます
    sudo nano /etc/hosts
    
    127.0.0.1       localhost localhost.(ドメイン名)
    ::1             localhost ip6-localhost ip6-loopback localhost.(ドメイン名)
    
    IPアドレス    [RaspberryPiのNetBIOS名] [RaspberryPiのFQDN名]
    
    ドメインコントローラーのIPv4アドレス   ドメインコントローラーのFQDN
    ドメインコントローラーのIPv6アドレス   ドメインコントローラーのFQDN
  2. Raspberry PiにSamba等必要パッケージをインストール
    sudo apt-get install samba bind9 winbind smbclient -y
    
  3. IPアドレスの構成
    IPアドレス、DNSサーバーのアドレス、デフォルトゲートウェイを設定します。
    sudo nano /etc/dhcpcd.conf
    interface eth0
    static ip_address=xxx.xxx.xxx.xxx
    static routers=xxx.xxx.xxx.yyy
    static domain_name_servers=xxx.xxx.xxx.zzz
  4. DNSサーバーの参照設定
    Raspberry Piが参照するDNSサーバーとして、1台目のドメインコントローラーを指定します。
    sudo nano /etc/resolv.conf
    
    # Generated by resolvconf
    nameserver ドメインコントローラーのIPv4アドレス
    nameserver ドメインコントローラーのIPv6アドレス
    nameserver 127.0.0.1
    nameserver ::1
  5. kerberosの設定
    Kerberosクライアントをインストールし、設定します。
    sudo apt-get install krb5-user -y
    sudo nano /etc/krb5.conf

    krb5.confには以下の設定を記載します。

    [libdefaults]
        dns_lookup_realm = false
        dns_lookup_kdc = true
        default_realm = SAMDOM.EXAMPLE.COM[大文字でドメイン名をFQDNで記載]
  6. smb.confを削除し、空のsmb.confファイルを作成します
    sudo rm /etc/samba/smb.conf
    sudo touch /etc/samba/smb.conf
    sudo systemctl restart smbd nmbd winbind
  7. BIND9の構成
    sudo nano /etc/bind/named.conf.options

    で、named.conf.optionsファイルに追記を加えます。

    acl localnet {
            192.168.11.0/24; 'ローカルのネットワークのサブネット
            127.0.0.1;    'ループバックアドレス
    };
    
    options {
            forwarders {   'フォワーダーは適切なDNSサーバーに
             8.8.8.8;
             8.8.4.4;
             };
    
            auth-nxdomain yes;    # conform to RFC1035
             allow-query {localnet;};
    
     tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab"; '追加
    };
  8. named.confファイルにも1行追加します。
    sudo nano /etc/bind/named.conf
    
    include "/var/lib/samba/private/named.conf"; 'この1行を追加
  9. BINDの再起動
    sudo service bind9 restart
  10. BINDの設定が終了したら、いよいよドメインコントローラーとして追加します
    samba-tool domain join [ドメイン名のFQDN] DC -U"[ドメイン名]\[管理者権限を持つユーザー]" --dns-backend=BIND9_DLZ
  11. サービスを停止、開始します
    sudo systemctl stop smbd nmbd winbind
    sudo systemctl disable smbd nmbd winbind
    sudo systemctl unmask samba-ad-dc
    sudo systemctl start samba-ad-dc
    sudo systemctl enable samba-ad-dc
    
  12. 念のためDNSの情報を再構築します
    sudo samba_upgradedns --dns-backend=BIND9_DLZ
  13. 複製状況を表示します。
    sudo samba-tool drs showrepl

    Windows Server DCとSamba DCの間で同期が始まります。
    “OUTBOUND NEIGHBORS”の情報が表示されるようになるまで、しばらく時間がかかります。
    繰り返しこのコマンドを実行して、”OUTBOUND NEIGHBORS”の情報も正しく表示されるようになると、Windows ServerのActive Dierectory サイトとサービスでも、レプリケートの組み合わせが正しく表示されるようになります。

  14. ドメインに追加出来たら、ドメインコントローラーのセカンダリーDNSにRaspberryPiのアドレスを設定します。

現状のSambaでは、rendomを利用してドメイン名を変更したドメインには、ドメインコントローラーとして追加しようと失敗します。

その場合、属性エディターでms-DS-replicationepochの値を未設定に変更すると追加できるようです。

参考:Bug 9500 – Samba4 not checking ms-DS-replicationepoch before attempting replication

参考:Setting up Samba as an Active Directory Domain Controller

ドメイン参加をやり直す場合は…

  1. ドメインコントローラーから降格します
    sudo samba-tool domain demote -U[ユーザー名]@[ドメイン名のFQDN]
  2. 以下のファイルを削除します
    sudo rm /var/lib/samba/private/secrets.ldb
    sudo rm /var/lib/samba/private/secrets.tdb
    sudo rm /etc/samba/smb.conf
    sudo touch /etc/samba/smb.conf
  3. サービスを停止、再開します
    sudo systemctl stop samba-ad-dc
    sudo systemctl start smbd nmbd winbind
ださっち: