ドメインコントローラを複数建てて、冗長構成を取ってみる
参照 https://wiki.samba.org/index.php/Joining_a_Samba_DC_to_an_Existing_Active_Directory
既存のsybyl.localドメインに2台目のドメインコントローラを設ける。
IPアドレスの設定はDHCP由来ではなく、staticに設定します
役目 | ホスト名 | IPアドレス | OS | 参照DNS(resolv.conf) | DNS backend | 備考 |
1台目 DC | c.sybyl.local | 192.168.0.3 | CentOS7.3 | c.sybyl.local | internal DNS | 既設 |
2台目 DC | 2nd.sybyl.local | 192.168.0.33 | CentOS7.3 | *c.sybyl.local | internal DNS | 新設DC |
*DC作成完了後に変更されます
/etc/hostsファイルは、自身のアドレスのみで可
[root@2nd ~]# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.0.33 2nd.sybyl.local 2nd
[root@2nd ~]#
/etc/resolv.confファイルは、まずは既設DCを参照させる。
変更は nmtui で行って systemctl restart NetworkManager で反映させる。既設DCが検索できるか確かめる
[root@2nd ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search sybyl.local
nameserver 192.168.0.3
[root@2nd ~]# host -t A c.sybyl.local
c.sybyl.local has address 192.168.0.3
[root@2nd ~]#
samba や samba/update を参考に、インストールまで行う。provision は行わない。
まず、既存のyumでインストールされているsmaba関係を削除して、yumに制限を加える
[root@2nd ~]# yum remove samba samba-common samba-client-libs samba-common-libs samba-common-tools samba-libs
[root@2nd ~]# vi /etc/yum.conf
:
exclude=samba samba-common samba-client-libs samba-common-libs samba-common-tools samba-libs
そして、
[root@2nd ~]# mkdir /opt/src && cd /opt/src
[root@2nd src]# curl -O https://download.samba.org/pub/samba/stable/samba-4.5.5.tar.gz
[root@2nd src]# gzip -cd samba-4.5.5.tar.gz | tar xf - && cd samba-4.5.5
[root@2nd samba-4.5.5]# export PATH=/sbin:/bin:/usr/sbin:/usr/bin
[root@2nd samba-4.5.5]# ./configure --prefix=/opt/samba && make && make install
[root@2nd samba-4.5.5]# cp ./packaging/systemd/samba.sysconfig /etc/sysconfig/samba
[root@2nd samba-4.5.5]# cp ./packaging/systemd/samba.service /etc/systemd/system/samba.service
と自動起動ファイルを用意して、インストール場所に合わせてファイルを修正します
|
systemctlに読み込ませて
[root@2nd samba-4.5.5]# systemctl daemon-reload
[root@2nd samba-4.5.5]# systemctl status samba.service
● samba.service - Samba AD Daemon
Loaded: loaded (/etc/systemd/system/samba.service; disabled; vendor preset: disabled)
Active: inactive (dead)
[root@2nd samba-4.5.5]#
自動起動はこの段階では無効にします。あとで有効にする
/etc/krb5.confファイルは、既設DCと同じにする。dnsの動的更新を行うため、事前にKerberos ticketを取得する。
ただ、DNS Backendにinternal DNSを使用しているなら不要かな。ISC BINDを使うならこの作業は必須かと
[root@2nd ~]# cat /etc/krb5.conf
[libdefaults]
default_realm = SYBYL.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = true
[root@2nd ~]# kinit administrator
Password for administrator@SYBYL.LOCAL:
[root@2nd ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@SYBYL.LOCAL
Valid starting Expires Service principal
2017-02-12T00:54:00 2017-02-12T10:54:00 krbtgt/SYBYL.LOCAL@SYBYL.LOCAL
renew until 2017-02-13T00:53:55
[root@2nd ~]#
SYBYL.LOCALドメインに DC として参加。この新設DCで使用するDNSはsamba提供の内部DNSとします。
[root@2nd ~]# /opt/samba/bin/samba-tool domain join SYBYL.LOCAL DC -Uadministrator --dns-backend=SAMBA_INTERNAL
Finding a writeable DC for domain 'SYBYL.LOCAL'
Found DC c.sybyl.local
Password for [WORKGROUP\administrator]: <--- 既設DCのAdministratorパスワードを入力
workgroup is SYBYL
realm is sybyl.local
Adding CN=2ND,OU=Domain Controllers,DC=sybyl,DC=local
Adding CN=2ND,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=sybyl,DC=local
Adding CN=NTDS Settings,CN=2ND,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=sybyl,DC=local
Adding SPNs to CN=2ND,OU=Domain Controllers,DC=sybyl,DC=local
Setting account password for 2ND$
Enabling account
(中略)
Committing SAM database
Sending DsReplicaUpdateRefs for all the replicated partitions
Setting isSynchronized and dsServiceName
Setting up secrets database
Joined domain SYBYL (SID S-1-5-21-2388220492-3765384844-3310792403) as a DC
[root@2nd ~]#
「Password for [WORKGROUP\administrator]:」と問われるが、既設ドメインコントローラのAdministratorのパスワードを入力する。
登録できたかをリモートサーバ管理ツールの「ActiveDirectoryユーザとコンピュータ」にて確認する。
一応ドメインコントローラとして登録されたようだ。
*失敗して、再実行するには
[root@2nd ~]# rm -rf /opt/samba/etc/smb.conf
[root@2nd ~]# rm -rf /opt/samba/private/*
[root@2nd ~]# rm -rf /opt/samba/var/{cache,lib,lock,locks,run}/*
としてから samba-tool domain join を行う
さらに別に視点からドメインコントローラが登録されたかを確認する。
まず、2nd.sybyl.localにてDNSレコードを確認します
*/etc/resolv.confは、c.sybyl.localを参照してます
[root@2nd ~]# host -t A 2nd.sybyl.local
2nd.sybyl.local has address 192.168.0.33
[root@2nd ~]#
とDNSに登録されてます。
*以前はできなかったのだが、改修されたみたい
もし登録されていないなら下記コマンドを実行してAレコードを手動で登録します
[root@2nd ~]# /opt/samba/bin/samba-tool dns add C sybyl.local 2nd A 192.168.0.33 -Uadministrator
次に、2nd.sybyl.localのobjectGUIDのCNAMEを確認します。
[root@2nd ~]# /opt/samba/bin/ldbsearch -H /opt/samba/private/sam.ldb '(invocationId=*)' --cross-ncs objectguid
# record 1
dn: CN=NTDS Settings,CN=2ND,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=sybyl,DC=local
objectGUID: 3b7b40ad-0ff4-45c6-ba25-d7f9df05f89d
# record 2
dn: CN=NTDS Settings,CN=C,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=sybyl,DC=local
objectGUID: 9a0ca03e-d59f-41fe-a627-5c407fb56064
# returned 2 records
# 2 entries
# 0 referrals
[root@2nd ~]#
これから 2nd.sybyl.localのobjectGUIDは3b7b40ad-0ff4-45c6-ba25-d7f9df05f89dであると分かる。
このobjectGUIDのCNAMEがあるかを確認してみる。
[root@2nd ~]# host -t CNAME 3b7b40ad-0ff4-45c6-ba25-d7f9df05f89d._msdcs.sybyl.local.
Host 3b7b40ad-0ff4-45c6-ba25-d7f9df05f89d._msdcs.sybyl.local. not found: 3(NXDOMAIN)
[root@2nd ~]#
こちらは残念ながら存在しない。なので手動でDCに登録して、再度確認を行う。
[root@2nd ~]# /opt/samba/bin/samba-tool dns add C _msdcs.sybyl.local 3b7b40ad-0ff4-45c6-ba25-d7f9df05f89d \
CNAME 2nd.sybyl.local -Uadministrator
Password for [SYBYL\administrator]: <--- 既設DCのAdministratorパスワードを入力
Record added successfully
[root@2nd ~]# host -t CNAME 3b7b40ad-0ff4-45c6-ba25-d7f9df05f89d._msdcs.sybyl.local.
3b7b40ad-0ff4-45c6-ba25-d7f9df05f89d._msdcs.sybyl.local is an alias for 2nd.sybyl.local.
[root@2nd ~]#
ガイドによれば、既設DCにて
[root@c ~]# /opt/samba/bin/tdbbackup -s .bsk /opt/samba/private/idmap.ldb
[root@c ~]# ls -l /opt/samba/private/idmap.ldb*
-rw------- 1 root root 1609728 2月 2 00:10 /opt/samba/private/idmap.ldb
-rw------- 1 root root 114688 2月 12 07:00 /opt/samba/private/idmap.ldb.bsk
[root@c ~]#
と行って、 /opt/samba/private/idmap.ldb.bsk を得る。これを新設DCに送って、idmap.ldbを上書きする。
1 2 |
|
そして、sysvolのaclを調整します。だが、、、エラーが発生する
[root@2nd ~]# /opt/samba/bin/samba-tool ntacl sysvolreset
open: error=2 (No such file or directory)
ERROR(runtime): uncaught exception - (-1073741823, 'Undetermined error')
File "/opt/samba/lib64/python2.7/site-packages/samba/netcmd/__init__.py", line 176, in _run
return self.run(*args, **kwargs)
File "/opt/samba/lib64/python2.7/site-packages/samba/netcmd/ntacl.py", line 239, in run
lp, use_ntvfs=use_ntvfs)
File "/opt/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 1609, in setsysvolacl
set_gpos_acl(sysvol, dnsdomain, domainsid, domaindn, samdb, lp, use_ntvfs, passdb=s4_passdb)
File "/opt/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 1502, in set_gpos_acl
use_ntvfs=use_ntvfs, skip_invalid_chown=True, passdb=passdb, service=SYSVOL_SERVICE)
File "/opt/samba/lib64/python2.7/site-packages/samba/ntacls.py", line 162, in setntacl
smbd.set_nt_acl(file, security.SECINFO_OWNER | security.SECINFO_GROUP | security.SECINFO_DACL 略
[root@2nd ~]#
エラーの最終行からどこかのフォルダのアクセス権なのかと思うのだが、良くわからない。
気になる点は、新設DCに /opt/samba/var/locks/sysvol/sybyl.local/Policies が存在しない点かな。
回避方法は、既設DCのsysvolフォルダ以下を全て新設DCに運び込んだ後で実行するといいみたい。
参照先 https://wiki.samba.org/index.php/Rsync_based_SysVol_replication_workaround
[root@c ~]# rsync -XAavz --delete-after /opt/samba/var/locks/sysvol/ root@2nd:/opt/samba/var/locks/sysvol/
root@ad's password:
building file list ... done
./
sybyl.local/
sybyl.local/Policies/
sybyl.local/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/
sybyl.local/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/GPT.INI
sybyl.local/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/
sybyl.local/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/USER/
sybyl.local/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/
sybyl.local/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/GPT.INI
sybyl.local/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/MACHINE/
sybyl.local/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/USER/
sybyl.local/scripts/
sent 10047 bytes received 122 bytes 4067.60 bytes/sec
total size is 40 speedup is 0.00
[root@c ~]#
コピー後に、新設DCにて
[root@2nd ~]# /opt/samba/bin/samba-tool ntacl sysvolreset
エラーなく完了する
留意rsyncの時に「rsync: rsync_xal_set: lremovexattr ... failed: Permission denied (13)」なエラーが生じたのなら、それはselinuxの故。双方ともselinuxを不能にすればOKみたい。
留意
そして起動。
[root@2nd ~]# systemctl start samba
*journalctl -u sambaでエラーがないか確認
*起動ファイルの設定はsamba参照
新設DCを稼働すると、自動的に他のDCから情報を引っ張ってくるようで、下記コマンドで同期具合が確認できる。
[root@2nd ~]# /opt/samba/bin/samba-tool drs showrepl
Default-First-Site-Name\2ND
DSA Options: 0x00000001
DSA object GUID: 3b7b40ad-0ff4-45c6-ba25-d7f9df05f89d
DSA invocationId: c78e4070-2135-49de-98ee-bc9b7a8bbcc3
==== INBOUND NEIGHBORS ====
CN=Schema,CN=Configuration,DC=sybyl,DC=local
Default-First-Site-Name\C via RPC
DSA object GUID: 9a0ca03e-d59f-41fe-a627-5c407fb56064
Last attempt @ Sun Feb 12 10:07:12 2017 JST was successful
0 consecutive failure(s).
Last success @ Sun Feb 12 10:07:12 2017 JST
(略)
==== OUTBOUND NEIGHBORS ====
CN=Schema,CN=Configuration,DC=sybyl,DC=local
Default-First-Site-Name\C via RPC
DSA object GUID: 9a0ca03e-d59f-41fe-a627-5c407fb56064
Last attempt @ NTTIME(0) was successful
0 consecutive failure(s).
Last success @ NTTIME(0)
(略)
==== KCC CONNECTION OBJECTS ====
Connection --
Connection name: 2c316e21-d6df-4b5e-9cd4-8737b5ad896f
Enabled : TRUE
Server DNS name : c.sybyl.local
Server DN name : CN=NTDS Settings,CN=C,CN=Servers,CN=Default-First-Site-Name,CN=Sites,(略)
TransportType: RPC
options: 0x00000001
Warning: No NC replicated for Connection!
[root@2nd ~]#
と「==== INBOUND NEIGHBORS ====」 と 「==== OUTBOUND NEIGHBORS ====」 にエントリーがあればいいのかな?
*同期に3分くらい掛かりました
*3分以上経っても同期しないのなら、firewalld.serviceとかSELinuxの稼動を疑ってください。動いていたら停止させます
留意
同期されず、「/opt/samba/sbin/samba -i -d3」とかで稼動させ、ログとして
「GSS server Update(krb5)(1) Update failed: Miscellaneous failure (see text): Decrypt integrity check failed for checksum type hmac-sha1-96-aes256, key type aes256-cts-hmac-sha1-96」と表記されるなら既設DC smb.confの「ldap server require strong auth」をYesとかNoに変更して再起動してたら収まった。。。
新設DCの samba internal DNS の動作確認を先ずは行ってみる
[root@2nd ~]# host -t A 2nd.sybyl.local localhost
Using domain server:
Name: localhost
Address: 127.0.0.1#53
Aliases:
2nd.sybyl.local has address 192.168.0.33
[root@2nd ~]#
と引けたので大丈夫だろう。/etc/resolv.confを再設定する。nmtuiコマンドを使い、下記のようにする。
NetworkManagerの再起動で/etc/resolv.confが書き代わる
[root@2nd ~]# systemctl restart NetworkManager
[root@2nd ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search sybyl.local
nameserver 127.0.0.1
nameserver 192.168.0.3
[root@2nd ~]#
既設DCもプライマリDNSは自分自身、セカンドDNSは新設DCを示すようにします。
ここで、再度sambaを再起動する。
[root@2nd ~]# systemctl restart samba
windowsならDC間で自動で複製してくれるのだが、sambaにはまだその機能がない。手動でコピーするかcronで定期実行するしかないみたい。
参照 https://wiki.samba.org/index.php/Rsync_based_SysVol_replication_workaround
注意 こちらの環境でsamba-4.5ではエラーが生じている。未解決
折角複数のDCができたので、fsmoを移動してみる。
現在、fsmoの担当は
[root@2nd ~]# /opt/samba/bin/samba-tool fsmo show
SchemaMasterRole owner: CN=NTDS Settings,CN=C,CN=Servers,(略
InfrastructureMasterRole owner: CN=NTDS Settings,CN=C,CN=Servers,(略
RidAllocationMasterRole owner: CN=NTDS Settings,CN=C,CN=Servers,(略
PdcEmulationMasterRole owner: CN=NTDS Settings,CN=C,CN=Servers,(略
DomainNamingMasterRole owner: CN=NTDS Settings,CN=C,CN=Servers,(略
DomainDnsZonesMasterRole owner: CN=NTDS Settings,CN=C,CN=Servers,(略
ForestDnsZonesMasterRole owner: CN=NTDS Settings,CN=C,CN=Servers,(略
[root@2nd ~]#
と既設DCの c.sybyl.local が担当している。これを全部新設DC(2nd.sybyl.local)に移してみる。
[root@2nd ~]# /opt/samba/bin/samba-tool fsmo transfer --role=all
FSMO transfer of 'rid' role successful
FSMO transfer of 'pdc' role successful
FSMO transfer of 'naming' role successful
FSMO transfer of 'infrastructure' role successful
FSMO transfer of 'schema' role successful
ERROR: Failed to delete role 'domaindns': LDAP error 50 LDAP_INSUFFICIENT_ACCESS_RIGHTS -(略
> <>
[root@2nd ~]#
となり、domaindns(DomainDnsZonesMasterRole)の個所で移動に失敗する。
そうなると、これとforestdns(ForestDnsZonesMasterRole)は既設DCに残ったまま。
[root@2nd ~]# /opt/samba/bin/samba-tool fsmo show
SchemaMasterRole owner: CN=NTDS Settings,CN=2ND,CN=Servers,(略
InfrastructureMasterRole owner: CN=NTDS Settings,CN=2ND,CN=Servers,(略
RidAllocationMasterRole owner: CN=NTDS Settings,CN=2ND,CN=Servers,(略
PdcEmulationMasterRole owner: CN=NTDS Settings,CN=2ND,CN=Servers,(略
DomainNamingMasterRole owner: CN=NTDS Settings,CN=2ND,CN=Servers,(略
DomainDnsZonesMasterRole owner: CN=NTDS Settings,CN=C,CN=Servers,(略 *c.sybyl.localに残留
ForestDnsZonesMasterRole owner: CN=NTDS Settings,CN=C,CN=Servers,(略 *c.sybyl.localに残留
[root@2nd ~]#
これら2つは、ユーザを指定して実行すれば移行できるようだ。
[root@2nd ~]# /opt/samba/bin/samba-tool fsmo transfer --role=domaindns -Uadministrator
Password for [SYBYL\administrator]:
FSMO transfer of 'domaindns' role successful
[root@2nd ~]#
[root@2nd ~]# /opt/samba/bin/samba-tool fsmo transfer --role=forestdns -Uadministrator
Password for [SYBYL\administrator]:
FSMO transfer of 'forestdns' role successful
[root@2nd ~]#
[root@2nd ~]# /opt/samba/bin/samba-tool fsmo show
SchemaMasterRole owner: CN=NTDS Settings,CN=2ND,CN=Servers,(略
InfrastructureMasterRole owner: CN=NTDS Settings,CN=2ND,CN=Servers,(略
RidAllocationMasterRole owner: CN=NTDS Settings,CN=2ND,CN=Servers,(略
PdcEmulationMasterRole owner: CN=NTDS Settings,CN=2ND,CN=Servers,(略
DomainNamingMasterRole owner: CN=NTDS Settings,CN=2ND,CN=Servers,(略
DomainDnsZonesMasterRole owner: CN=NTDS Settings,CN=2ND,CN=Servers,(略
ForestDnsZonesMasterRole owner: CN=NTDS Settings,CN=2ND,CN=Servers,(略
[root@2nd ~]#
これでようやく全てのfsmoが新設DC(2nd.sybyl.local)に移動できた。
元の既設DC(c.sybyl.local)に戻すには、上記を踏まえて
[root@c ~]# /opt/samba/bin/samba-tool fsmo transfer --role=all --username=Administrator --password=xxxxxxxxxxxxxxxx
FSMO transfer of 'rid' role successful
FSMO transfer of 'pdc' role successful
FSMO transfer of 'naming' role successful
FSMO transfer of 'infrastructure' role successful
FSMO transfer of 'schema' role successful
FSMO transfer of 'domaindns' role successful
FSMO transfer of 'forestdns' role successful
[root@c ~]#
として移行を行う。
参照 https://wiki.samba.org/index.php/Demote_a_Samba_AD_DC
ドメインに参加したDCを降格させるには、FSMOの担当でない事が必要で、現在どのDCがFSMOを持っているかを調べる
1 2 3 4 5 6 7 8 9 |
|
と7つともCN=Cが担当している。
なので追加した新規DC(2nd.sybyl.local)は降格可能で、そのマシン上で自らを降格させる。
*GPOの連携でrsyncを行っているのなら事前に停止する
1 2 3 4 5 6 7 8 |
|
として降格される。
でもドメインには参加したままです。
...ただ、このように降格してもDNSやらにはエントリーが残ります。
sybyl.localゾーンの「2nd」エントリー以外の全てのゾーンにおいて、降格DCのエントリーを手動で削除する必要があります。
削除は、エントリーを選択して右クリックから「削除」を選んでいきます。
GUIの操作で消せないエントリー(NSが消せなかった)はコマンドラインから
[root@c ~]# /opt/samba/bin/samba-tool dns delete C sybyl.local sybyl.local NS 2nd.sybyl.local
Record deleted successfully
[root@c ~]# /opt/samba/bin/samba-tool dns delete C _msdcs.sybyl.local _msdcs.sybyl.local NS 2nd.sybyl.local
Record deleted successfully
[root@c ~]#
DCが物理的に使えない状態とかで降格させたい場合、上記のsamba-toolでは使えない。
上記は正しく稼働しているDCを降格させる場合である。
その際は、参照に示されたMicrosoft提供のツールを使う。
場所はここ。Visual Basicと書かれたコードを保存する。ファイル名は何でもいい(dcpromo.vbs)が、拡張子をvbsとVBScriptにする。
このファイルの実行は、ドメインに参加したwindowsマシンで、Domain Admin権限のあるユーザとかドメインのadministratorで実行する。
ファイルをダブルクリックすると、下記の画面が表示される。
現在のDCが列挙され、削除対象を入力欄に入力して、「OK」ボタンをクリックする。
ここではDCとして「C」と「AD」があるが、「AD」を降格対象としている。
すると警告が表示されるが、確認して「はい」ボタンをクリックする
暫くすると、完了の知らせが届く。「OK」ボタンを押して完了します。