BackupExec / NetBackupでWinPEを使った起動ディスクで仮想マシンをリカバリするとNIC設定が消える場合がある

BackupExec 20.1を使ってHyper-V上のWindows Serverのバックアップを行った。
最初、Hyper-V経由で仮想マシンとしてのバックアップにしようと考えていたのだが、BackupExecでは特定のドライブのバックアップを取らないという設定が出来ず、必ず全ドライブをバックアップする必要があることが分かった。
このため、対象サーバにBackupExec Agentをインストールして、エージェント経由でのバックアップを取ることにした。

で、Windows ADKを使用したSDR起動ディスクを作って、フルリストアのテストを行ったところ問題発生。
NICが2つついている場合、片側につけたIPアドレス設定がリカバリされない。

いろいろ条件をかえて試してみたけど、必ず発生している。

どうやら仕様らしい。

Veritasのサイト上だとNetBackup / vSphere環境での話として、「After restore a Windows Virtual Machine to original or alternate location, Virtual NIC settings may be changed or lost.」というのが掲載されている。

回避方法はなく、手動で再設定しろ、だそうな

Samba 4.7.xでActive Directoryを1から立てる

2019/06/14追記

Samba 4.10.xでActive Directoryを1から立てる」という記事を更新版の記事を作成しています。違いは必要となるパッケージが増えたことについてです。


CentOS7とSamba 4.7.5で環境を作成しなおしたので、記事更新

過去の記事はこちら
2014年2月版「Samba 4.xでActive Directoryを1から立てる
2016年7月版「Samba 4.4.xでActive Directoryを1から立てる


Linux上でSambaを使ってActive Directoryサーバを立てるメリット
Windows Serverを買わなくてもActive Directoryを作れる
 ライセンス費用の低減
Active Directoryユーザの作成などのユーザ管理をWindowsマシンからWindows標準ツールで行える
 ユーザ作成/変更、コンピュータアカウントの作成、DNS管理など、Active Directoryの管理を行う際に
 良く使う動作については、Linuxのコマンドではなく、WindowsのActive Directory管理ツールで行える
 具体的にはADに参加しているWindowsマシンにWindows機能のActive Directory管理ツールを追加インストールしたあと、
 ADの管理者ユーザでログオンすることでAD管理を行うことができる
設定が難しくない
 いまのsambaは、DNSサーバとLDAPサーバ機能が統合されており、AD名とAD上の役割と
 管理者パスワードを決めてしまえば、あとは良きに計らってくれるので
 設定の難易度が非常に低い

もちろん、デメリット、もあります
ActiveDirectoryの全機能が搭載されていない
 ドメイン/フォレストの機能レベルが「Windows Server 2008 R2」までとなっている。
 なお、フェールオーバクラスタについては作成できるようになっていました。
 →「samba 4.7.4で作ったActive Directory環境でWindowsServer2016フェールオーバークラスターを動作させた」というわけで動作することを確認しました

それでは、実際の手順について・・・
元ネタは公式ページの「Setting up Samba as an Active Directory Domain Controller」となります。

0. CentOS7の最小インストールを実施

1. /etc/hostsの修正
自ホスト名を/etc/hostsに追加
追加の際は、ショートのホスト名と、ドメイン付きのFQDNの両方を列挙すること。

[root@adserver ~]# cat /etc/hosts<br><br>
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4<br><br>
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6<br><br>
172.17.44.40    adserver adserver.adosakana.local<br><br>
[root@adserver ~]#

2. 好みに応じて使うツールをインストール
セッションが途中で切れても良い様に「screen」と、ファイルダウンロードするためにwget(curlでもいいのですが)をインストールします。

[root@adserver ~]# yum install wget screen<br><br>
<略><br><br>
[root@adserver ~]#

3. 必要なパッケージをインストール
Samba公式の「Operating system requirements/Dependencies – Libraries and programs」に記載されているパッケージをインストール

[root@adserver ~]# yum install attr bind-utils docbook-style-xsl gcc gdb krb5-workstation \<br><br>
       libsemanage-python libxslt perl perl-ExtUtils-MakeMaker \<br><br>
       perl-Parse-Yapp perl-Test-Base pkgconfig policycoreutils-python \<br><br>
       python-crypto gnutls-devel libattr-devel keyutils-libs-devel \<br><br>
       libacl-devel libaio-devel libblkid-devel libxml2-devel openldap-devel \<br><br>
       pam-devel popt-devel python-devel readline-devel zlib-devel systemd-devel<br><br>
<略><br><br>
[root@adserver ~]#

4. sambaのtar.gzをダウンロード

[root@adserver ~]# wget https://download.samba.org/pub/samba/stable/samba-4.7.5.tar.gz<br><br>
--2016-xx-xx xx:xx:xx--  https://download.samba.org/pub/samba/stable/samba-4.7.5.tar.gz<br><br>
download.samba.org をDNSに問いあわせています... 144.76.82.156<br><br>
download.samba.org|144.76.82.156|:443 に接続しています... 接続しました。<br><br>
HTTP による接続要求を送信しました、応答を待っています... 200 OK<br><br>
長さ: 20715838 (20M) [application/gzip]<br><br>
`samba-4.7.5.tar.gz' に保存中</p><br>
<p>100%[======================================>] 16,862,398  3.71MB/s 時間 5.5s</p><br>
<p>2018-03-xx xx:xx:xx (2.93 MB/s) - `samba-4.7.5.tar.gz' へ保存完了 [16862398/16862398]</p><br>
<p>[root@adserver ~]#

5. configure実施

[root@adserver ~]# tar xfz samba-4.7.5.tar.gz<br><br>
[root@adserver ~]# cd samba-4.7.5<br><br>
[root@adserver samba-4.7.5]# ./configure<br><br>
Checking for program gcc or cc           : /usr/bin/gcc<br><br>
Checking for program cpp                 : /usr/bin/cpp<br><br>
<略><br><br>
Checking if toolchain accepts -fstack-protector                                                 : yes<br><br>
'configure' finished successfully (2m43.587s)<br><br>
[root@adserver samba-4.7.5]#

6. make & make install

[root@adserver samba-4.7.5]# make<br><br>
WAF_MAKE=1 python ./buildtools/bin/waf build<br><br>
Waf: Entering directory `/root/samba-4.7.5/bin'<br><br>
<略><br><br>
Note: Writing nmblookup4.1<br><br>
Waf: Leaving directory `/root/samba-4.7.5/bin'<br><br>
'build' finished successfully (22m56.876s)<br><br>
[root@adserver samba-4.7.5]# make install<br><br>
WAF_MAKE=1 python ./buildtools/bin/waf install<br><br>
Waf: Entering directory `/root/samba-4.7.5/bin'<br><br>
<略><br><br>
* installing bin/default/pidl/Parse::Pidl::Wireshark::NDR.3pm as /usr/local/samba/share/man/man3/Parse::Pidl::Wireshark::NDR.3pm<br><br>
Waf: Leaving directory `/root/samba-4.7.5/bin'<br><br>
'install' finished successfully (6m48.094s)<br><br>
[root@adserver samba-4.7.5]#

7. インストール完了確認

sambaのバージョン確認

[root@adserver ~]# /usr/local/samba/sbin/samba -V<br><br>
Version 4.7.5<br><br>
[root@adserver ~]#

8. Active Directoryのセットアップ
ドメイン「adosakana.local」を作成します。
また、sambaの機能を使ってAD DNSを構築するので「SAMBA_INTERNAL」を選択します。

なお、「–use-rfc2307」はADにNIS連携機能を追加するオプションです。AD上にUnix用のUID/GID/shell情報なども格納できるようにします。Samba環境では有効にしておくべきものです。

[root@adserver ~]# /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive<br><br>
Realm [ADOSAKANA.LOCAL]:<br><br>
 Domain [ADOSAKANA]:<br><br>
 Server Role (dc, member, standalone) [dc]:<br><br>
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:<br><br>
 DNS forwarder IP address (write 'none' to disable forwarding) [172.30.50.100]:<br><br>
Administrator password:<br><br>
Retype password:<br><br>
Looking up IPv4 addresses<br><br>
Looking up IPv6 addresses<br><br>
No IPv6 address will be assigned<br><br>
Setting up secrets.ldb<br><br>
Setting up the registry<br><br>
Setting up the privileges database<br><br>
Setting up idmap db<br><br>
Setting up SAM db<br><br>
Setting up sam.ldb partitions and settings<br><br>
Setting up sam.ldb rootDSE<br><br>
Pre-loading the Samba 4 and AD schema<br><br>
Adding DomainDN: DC=adosakana,DC=local<br><br>
Adding configuration container<br><br>
Setting up sam.ldb schema<br><br>
Setting up sam.ldb configuration data<br><br>
Setting up display specifiers<br><br>
Modifying display specifiers<br><br>
Adding users container<br><br>
Modifying users container<br><br>
Adding computers container<br><br>
Modifying computers container<br><br>
Setting up sam.ldb data<br><br>
Setting up well known security principals<br><br>
Setting up sam.ldb users and groups<br><br>
Setting up self join<br><br>
Adding DNS accounts<br><br>
Creating CN=MicrosoftDNS,CN=System,DC=adosakana,DC=local<br><br>
Creating DomainDnsZones and ForestDnsZones partitions<br><br>
Populating DomainDnsZones and ForestDnsZones partitions<br><br>
Setting up sam.ldb rootDSE marking as synchronized<br><br>
Fixing provision GUIDs<br><br>
A Kerberos configuration suitable for Samba AD has been generated at /usr/local/samba/private/krb5.conf<br><br>
Setting up fake yp server settings<br><br>
Once the above files are installed, your Samba AD server will be ready to use<br><br>
Server Role:           active directory domain controller<br><br>
Hostname:              adserver<br><br>
NetBIOS Domain:        ADOSAKANA<br><br>
DNS Domain:            adosakana.local<br><br>
DOMAIN SID:            S-1-5-21-98280047-2622333268-1688910966</p><br>
<p>[root@adserver ~]#

なお、password_hashでエラーとなるとおもいます。
現状の /etc/krb5.conf の内容が問題で発生しています。
この後の手順で正しいものに置き換えるので、この段階では単純に「mv /etc/krb5.conf /etc/krb5.conf.org」などの手段で別の名前として使わなくすれば大丈夫です。

Setting up sam.ldb users and groups<br><br>
ERROR(ldb): uncaught exception - operations error at ../source4/dsdb/samdb/ldb_modules/password_hash.c:3132<br><br>
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/netcmd/__init__.py", line 176, in _run<br><br>
    return self.run(*args, **kwargs)<br><br>
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/netcmd/domain.py", line 474, in run<br><br>
    nosync=ldap_backend_nosync, ldap_dryrun_mode=ldap_dryrun_mode)<br><br>
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 2175, in provision<br><br>
    skip_sysvolacl=skip_sysvolacl)<br><br>
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 1787, in provision_fill<br><br>
    next_rid=next_rid, dc_rid=dc_rid)<br><br>
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 1447, in fill_samdb<br><br>
    "KRBTGTPASS_B64": b64encode(krbtgtpass.encode('utf-16-le'))<br><br>
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/common.py", line 55, in setup_add_ldif<br><br>
    ldb.add_ldif(data, controls)<br><br>
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/__init__.py", line 229, in add_ldif<br><br>
    self.add(msg, controls)

9. sambaを起動

[root@adserver ~]# ps -ef|grep samba<br><br>
root     11129 23028  0 16:01 pts/0    00:00:00 grep --color=auto samba<br><br>
[root@adserver ~]# /usr/local/samba/sbin/samba<br><br>
[root@adserver ~]# ps -ef|grep samba<br><br>
root     11131     1 14 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11132 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11133 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11134 11132  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11135 11134 19 16:01 ?        00:00:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground<br><br>
root     11136 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11137 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11138 11131 21 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11139 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11140 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11141 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11142 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11143 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11144 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11145 11142  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11146 11131  2 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11147 11145 18 16:01 ?        00:00:00 /usr/local/samba/sbin/winbindd -D --option=server role check:inhibit=yes --foreground<br><br>
root     11148 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11151 11146  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11152 11151 17 16:01 ?        00:00:00 python /usr/local/samba/sbin/samba_dnsupdate<br><br>
root     11153 11146  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba<br><br>
root     11154 11153 17 16:01 ?        00:00:00 python /usr/local/samba/sbin/samba_spnupdate<br><br>
root     11157 11135  0 16:01 ?        00:00:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground<br><br>
root     11158 11135  0 16:01 ?        00:00:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground<br><br>
root     11160 23028  0 16:01 pts/0    00:00:00 grep --color=auto samba<br><br>
root     11161 11147  0 16:01 ?        00:00:00 /usr/local/samba/sbin/winbindd -D --option=server role check:inhibit=yes --foreground<br><br>
[root@adserver ~]#

10.動作確認
CentOS内部からSMB接続を行うテストを実施。

[root@adserver ~]# /usr/local/samba/bin/smbclient --version<br><br>
Version 4.7.5<br><br>
[root@adserver ~]# /usr/local/samba/bin/smbclient -L localhost -U%</p><br>
<p>        Sharename       Type      Comment<br><br>
        ---------       ----      -------<br><br>
        netlogon        Disk<br><br>
        sysvol          Disk<br><br>
        IPC$            IPC       IPC Service (Samba 4.7.5)<br><br>
Reconnecting with SMB1 for workgroup listing.</p><br>
<p>        Server               Comment<br><br>
        ---------            -------</p><br>
<p>        Workgroup            Master<br><br>
        ---------            -------<br><br>
[root@adserver ~]#

以前は「Domain=[ADOSAKANA.LOCAL] OS=[Unix] Server=[Samba x.y.z]」という出力もあったのですが、Samba 4.7.5では無くなったようです。

netlogon共有にAdministrator権限でアクセスできるか確認。

[root@adserver ~]# /usr/local/samba/bin/smbclient //localhost/netlogon -UAdministrator -c 'ls'<br><br>
Enter Administrator's password:<br><br>
  .                                   D        0  Fri Mar  2 15:53:48 2018<br><br>
  ..                                  D        0  Fri Mar  2 15:58:16 2018</p><br>
<p>                14034944 blocks of size 1024. 11789628 blocks available<br><br>
[root@adserver ~]#

11.AD DNSの動作テスト
AD DNSが想定通りに動作しているかテストします。

まず、どんなzoneが登録されているのか確認

[root@adserver ~]# /usr/local/samba/bin/samba-tool dns zonelist 127.0.0.1 -U Administrator<br><br>
Password for [ADOSAKANA\Administrator]:<br><br>
  2 zone(s) found</p><br>
<p>  pszZoneName                 : adosakana.local<br><br>
  Flags                       : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE<br><br>
  ZoneType                    : DNS_ZONE_TYPE_PRIMARY<br><br>
  Version                     : 50<br><br>
  dwDpFlags                   : DNS_DP_AUTOCREATED DNS_DP_DOMAIN_DEFAULT DNS_DP_ENLISTED<br><br>
  pszDpFqdn                   : DomainDnsZones.adosakana.local</p><br>
<p>  pszZoneName                 : _msdcs.adosakana.local<br><br>
  Flags                       : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE<br><br>
  ZoneType                    : DNS_ZONE_TYPE_PRIMARY<br><br>
  Version                     : 50<br><br>
  dwDpFlags                   : DNS_DP_AUTOCREATED DNS_DP_FOREST_DEFAULT DNS_DP_ENLISTED<br><br>
  pszDpFqdn                   : ForestDnsZones.adosakana.local<br><br>
[root@adserver ~]#

Active Directoryで使用するDNSのSRVレコードが登録されているかをhostコマンドを使って確認。

[root@adserver ~]# host -t SRV _ldap._tcp.adosakana.local 127.0.0.1<br><br>
Using domain server:<br><br>
Name: 127.0.0.1<br><br>
Address: 127.0.0.1#53<br><br>
Aliases:</p><br>
<p>_ldap._tcp.adosakana.local has SRV record 0 100 389 adserver.adosakana.local.<br><br>
[root@adserver ~]# host -t SRV _kerberos._udp.adosakana.local 127.0.0.1<br><br>
Using domain server:<br><br>
Name: 127.0.0.1<br><br>
Address: 127.0.0.1#53<br><br>
Aliases:</p><br>
<p>_kerberos._udp.adosakana.local has SRV record 0 100 88 adserver.adosakana.local.<br><br>
[root@adserver ~]#

ADサーバのホスト名が登録されているか確認

[root@adserver ~]# host -t A adserver.adosakana.local 127.0.0.1<br><br>
Using domain server:<br><br>
Name: 127.0.0.1<br><br>
Address: 127.0.0.1#53<br><br>
Aliases:</p><br>
<p>adserver.adosakana.local has address 172.17.44.40<br><br>
[root@adserver ~]#

12. DNSサーバの変更
ADサーバの/etc/resolv.confを、ADサーバ自身を使う様に書き換え

13. /etc/krb5.conf の変更
/usr/local/samba/private/krb5.conf に元となるものがあるので、それを使用する。

[root@adserver ~]# cat /etc/krb5.conf<br><br>
[logging]<br><br>
 default = FILE:/var/log/krb5libs.log<br><br>
 kdc = FILE:/var/log/krb5kdc.log<br><br>
 admin_server = FILE:/var/log/kadmind.log</p><br>
<p>[libdefaults]<br><br>
 default_realm = EXAMPLE.COM<br><br>
 dns_lookup_realm = false<br><br>
 dns_lookup_kdc = false<br><br>
 ticket_lifetime = 24h<br><br>
 renew_lifetime = 7d<br><br>
 forwardable = true</p><br>
<p>[realms]<br><br>
 EXAMPLE.COM = {<br><br>
  kdc = kerberos.example.com<br><br>
  admin_server = kerberos.example.com<br><br>
 }</p><br>
<p>[domain_realm]<br><br>
 .example.com = EXAMPLE.COM<br><br>
 example.com = EXAMPLE.COM<br><br>
[root@adserver ~]# cat /usr/local/samba/private/krb5.conf<br><br>
[libdefaults]<br><br>
        default_realm = ADOSAKANA.LOCAL<br><br>
        dns_lookup_realm = false<br><br>
        dns_lookup_kdc = true<br><br>
[root@adserver ~]# cp /usr/local/samba/private/krb5.conf /etc/krb5.conf<br><br>
cp: `/etc/krb5.conf' を上書きしてもよろしいですか(yes/no)? y<br><br>
[root@adserver ~]# cat /etc/krb5.conf<br><br>
[libdefaults]<br><br>
        default_realm = ADOSAKANA.LOCAL<br><br>
        dns_lookup_realm = false<br><br>
        dns_lookup_kdc = true<br><br>
[root@adserver ~]#

14. Kerberosの動作確認

kinitコマンドを実行して確認します。

[root@adserver ~]# kinit administrator@ADOSAKANA.LOCAL<br><br>
Password for administrator@ADOSAKANA.LOCAL:<br><br>
Warning: Your password will expire in 41 days on 2018年04月13日 15時58分15秒<br><br>
[root@adserver ~]#

正常に設定されていれば、上記の様にAdministratorユーザのパスワード有効期限が表示されます。

ドメイン名指定の大文字/小文字を間違えると下記の様なエラーとなります。

[root@adserver ~]# kinit administrator@adosakana.local<br><br>
Password for administrator@adosakana.local:<br><br>
kinit: KDC reply did not match expectations while getting initial credentials<br><br>
[root@adserver ~]#

また、DNSサーバ指定が誤っている場合は下記の様なエラーです。

[root@adserver ~]# kinit administrator@ADOSAKANA.LOCAL<br><br>
kinit: Cannot resolve servers for KDC in realm "ADOSAKANA.LOCAL" while getting initial credentials<br><br>
[root@adserver ~]#

「klist」コマンドを実行することでも確認出来ます。

[root@adserver ~]# klist<br><br>
Ticket cache: FILE:/tmp/krb5cc_0<br><br>
Default principal: administrator@ADOSAKANA.LOCAL</p><br>
<p>Valid starting       Expires              Service principal<br><br>
2018-03-02T16:06:21  2018-03-03T02:06:21  krbtgt/ADOSAKANA.LOCAL@ADOSAKANA.LOCAL<br><br>
        renew until 2018-03-03T16:06:18<br><br>
[root@adserver ~]#

15. フォレストとドメインの機能レベル確認
作成したActive Directoryのドメインの機能レベルとフォレストの機能レベルを確認します。

[root@adserver ~]# /usr/local/samba/bin/samba-tool domain level show<br><br>
Domain and forest function level for domain 'DC=adosakana,DC=local'</p><br>
<p>Forest function level: (Windows) 2008 R2<br><br>
Domain function level: (Windows) 2008 R2<br><br>
Lowest function level of a DC: (Windows) 2008 R2<br><br>
[root@adserver ~]#

Samba 4.7.5では、Windows Sevrer 2008R2と設定されているようです。

16. firewalldの設定

CentOS7ではfirewalldによりポートが制限されています。
現状を「firewall-cmd –list-all」で確認。

# firewall-cmd --list-all<br><br>
public (active)<br><br>
  target: default<br><br>
  icmp-block-inversion: no<br><br>
  interfaces: ens160<br><br>
  sources:<br><br>
  services: ssh dhcpv6-client<br><br>
  ports:<br><br>
  protocols:<br><br>
  masquerade: no<br><br>
  forward-ports:<br><br>
  source-ports:<br><br>
  icmp-blocks:<br><br>
  rich rules:<br><br>
# 

開けるべきポートのテンプレートがあらかじめ用意されているので「firewall-cmd –get-services」を実行して確認します。

# firewall-cmd --get-services<br><br>
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server<br><br>
#

SambaをADとして使う場合のポートを「Samba AD DC Port Usage」で確認します。

CentOS7のfirewalldで定義されているものと待避させてみると・・・

サービス ポート プロトコル firewalld定義
DNS 53 tcp/udp dns
Kerberos 88 tcp/udp kerberos,freeipa-ldap,freeipa-ldaps
End Point Mapper (DCE/RPC Locator Service) 135 tcp freeipa-trust
NetBIOS Name Service 137 udp samba,samba-client
NetBIOS Datagram 138 udp samba,samba-client,freeipa-trust
NetBIOS Session 139 tcp samba,freeipa-trust
LDAP 389 tcp/udp freeipa-trust(ldap,freeipa-ldapはtcpのみ)
SMB over TCP 445 tcp samba,freeipa-trust(freeipa-trustはudpも含む)
Kerberos kpasswd 464 tcp/udp kpasswd,freeipa-ldap,freeipa-ldaps
LDAPS 636 tcp ldaps,freeipa-ldaps
Dynamic RPC Ports(4.7以前) 1024-1300 tcp freeipa-trust
Dynamic RPC Ports(samba 4.7以降) 49152-65535 tcp ?
Global Catalog 3268 tcp freeipa-trust
Global Catalog SSL 3269 tcp なし

・firewalldの定義「samba」「dns」「freeipa-ldaps」「freeipa-trust」を使用
・「Dynamic RPC Ports(samba 4.7以降):49152-65535」を追加するか、smb.confで「rpc server port」を定義するか。
・「Global Catalog SSL:3269」を追加

# firewall-cmd --permanent --zone=public --add-service=samba<br><br>
success<br><br>
# firewall-cmd --permanent --zone=public --add-service=dns<br><br>
success<br><br>
# firewall-cmd --permanent --zone=public --add-service=freeipa-ldaps<br><br>
success<br><br>
# firewall-cmd --permanent --zone=public --add-service=freeipa-trust<br><br>
success<br><br>
# firewall-cmd --reload<br><br>
success<br><br>
# firewall-cmd --list-all<br><br>
public (active)<br><br>
  target: default<br><br>
  icmp-block-inversion: no<br><br>
  interfaces: ens160<br><br>
  sources:<br><br>
  services: ssh dhcpv6-client samba dns freeipa-ldaps freeipa-trust<br><br>
  ports:<br><br>
  protocols:<br><br>
  masquerade: no<br><br>
  forward-ports:<br><br>
  source-ports:<br><br>
  icmp-blocks:<br><br>
  rich rules:</p><br>
<p>#

# firewall-cmd --permanent --zone=public --add-port=49152-65535/tcp<br><br>
success<br><br>
# firewall-cmd --permanent --zone=public --add-port=3269/tcp<br><br>
success<br><br>
# firewall-cmd --reload<br><br>
success<br><br>
# firewall-cmd --list-all<br><br>
public (active)<br><br>
  target: default<br><br>
  icmp-block-inversion: no<br><br>
  interfaces: ens160<br><br>
  sources:<br><br>
  services: ssh dhcpv6-client samba dns freeipa-ldaps freeipa-trust<br><br>
  ports: 49152-65535/tcp 3269/tcp<br><br>
  protocols:<br><br>
  masquerade: no<br><br>
  forward-ports:<br><br>
  source-ports:<br><br>
  icmp-blocks:<br><br>
  rich rules:<br><br>
#

17. systemdへの登録
systemdへの登録については「Managing the Samba AD DC Service Using Systemd」を参照のこと
CentOS6の場合は「Managing the Samba AD DC Service Using an Init Script

以上で設定は終了です。

既存のSamba 4.5以前を4.7へアップデートする場合の注意点

あまり考えずに既存のSamba 4.4.x環境を最新のSamba 4.7.xにアップデートをした。
ようは、configure;make;make install。

が・・・「Updating Samba」を見ると、Samba 4.5.0で「replPropertyMetaData」の取り扱いが変わったので修正しなければならない、という記載が・・・

修正が必要かどうかは「samba-tool dbcheck –cross-ncs」で確認出来る、とのこと

問題なければ、下記の出力・・・

# samba-tool dbcheck --cross-ncs
Checking 3602 objects
Checked 3602 objects (0 errors)
#

問題がある場合は下記の様な形でエラーが報告されます。
ちなみに、エラーのテキスト出力が6.5MBありました・・・

# samba-tool dbcheck --cross-ncs --fix --yes
Checking 3602 objects
CN=MHS-OR-Address,CN=Schema,CN=Configuration,DC=adosakana,DC=local: 0x0009030e
CN=MHS-OR-Address,CN=Schema,CN=Configuration,DC=adosakana,DC=local: 0x00090177
<略>
Checked 3602 objects (3467 errors)
#

「samba-tool dbcheck –cross-ncs –fix –yes」を実行することで修正されました。

また、4.0以前のバージョンからアップデートした場合にSYSVOLの修復を行うために「samba-tool ntacl sysvolreset」を実行するという記述があったので、試しにSYSVOLのチェック「samba-tool ntacl sysvolcheck」を実行してみると、下記のエラーが発生。

# samba-tool ntacl sysvolcheck

ERROR(<class 'samba.provision.ProvisioningError'>): uncaught exception - ProvisioningError: DB ACL on GPO directory /usr/local/samba/var/locks/sysvol/adosakana.local/Policies/{20AA5877-2399-4CBC-8BA4-7F23D8810774} O:DAG:DAD:PAI(A;OICI;0x001f01ff;;;DA)(A;OICI;0x001f01ff;;;EA)(A;OICIIO;0x001f01ff;;;CO)(A;OICI;0x001f01ff;;;DA)(A;OICI;0x001f01ff;;;SY)(A;OICI;0x001200a9;;;AU)(A;OICI;0x001200a9;;;ED) does not match expected value O:DAG:DAD:P(A;OICI;0x001f01ff;;;DA)(A;OICI;0x001f01ff;;;EA)(A;OICIIO;0x001f01ff;;;CO)(A;OICI;0x001f01ff;;;DA)(A;OICI;0x001f01ff;;;SY)(A;OICI;0x001200a9;;;AU)(A;OICI;0x001200a9;;;ED) from GPO object
  File "/usr/local/samba/lib64/python2.6/site-packages/samba/netcmd/__init__.py", line 176, in _run
    return self.run(*args, **kwargs)
  File "/usr/local/samba/lib64/python2.6/site-packages/samba/netcmd/ntacl.py", line 270, in run
    lp)
  File "/usr/local/samba/lib64/python2.6/site-packages/samba/provision/__init__.py", line 1723, in checksysvolacl
    direct_db_access)
  File "/usr/local/samba/lib64/python2.6/site-packages/samba/provision/__init__.py", line 1674, in check_gpos_acl
    domainsid, direct_db_access)
  File "/usr/local/samba/lib64/python2.6/site-packages/samba/provision/__init__.py", line 1621, in check_dir_acl
    raise ProvisioningError('%s ACL on GPO directory %s %s does not match expected value %s from GPO object' % (acl_type(direct_db_access), path, fsacl_sddl, acl))
#

「samba-tool ntacl sysvolreset」を実行して修正。

# samba-tool ntacl sysvolreset
# samba-tool ntacl sysvolcheck
#

samba 4.7.4で作ったActive Directory環境でWindowsServer2016フェールオーバークラスターを動作させた

以前試したときはうまくいかなかったが、どうやら、動くらしい、という話を聞いて試してみた。

Samba 4.7.4で、ドメインレベル/フォレストレベルをWindows Server 2008R2に設定した状態で実施。
(レベルの確認・変更については「samba 4.xでドメイン/フォレストの機能レベルを変更する」を参照のこと)

クラスタの検証は問題なく通過し、実際に組んで見るとネットワークへのリソース名登録周りでエラーが発生。

ログの名前:         System
ソース:           Microsoft-Windows-FailoverClustering
日付:            2018/02/28 18:41:44
イベント ID:       1194
タスクのカテゴリ:      ネットワーク名リソース
レベル:           エラー
キーワード:         
ユーザー:          SYSTEM
コンピューター:       server1.adosakana.local
説明:
クラスター ネットワーク名リソース 'クラスタリソース1' は、ドメイン 'adosakana.local' の関連付けられたコンピューター オブジェクトを作成できませんでした (期間: Resource online)。

関連するエラー コードのテキストは次のとおりです: アクセスが拒否されました。

ドメイン管理者と協力して、次のことを確認してください。
- クラスター ID 'クラスタ名$' が、コンピューター オブジェクトを作成するためのアクセス許可を持っていること。既定では、すべてのコンピューター オブジェクトがクラスター ID 'クラスタ名$' と同じコンテナー内に作成されます。
- コンピューター オブジェクトのクォータに達していないこと。
- 既存のコンピューター オブジェクトがある場合は、[Active Directory ユーザーとコンピューター] のツールを使用して、クラスター ID 'クラスタ名$' にそのコンピューター オブジェクトに対するフル コントロールのアクセス許可があることを確認してください。

解決方法はMicrosoftのKB「クラスター環境においてクライアント アクセス ポイントを作成または削除した際、イベント ID 1222 と 1197 が記録される。」にあるままでした。
下記の設定を行ったところ、クラスタが起動するようになりました。

1. Domain Administrator権限を持っているユーザで「Active Directory ユーザーとコンピューター」を開く
2. 「表示」-「拡張機能」を選択し、セキュリティなどの設定が表示される状態に変更
3. 「Computers」コンテナのプロパティを開く
4. 「セキュリティ」タブの「詳細設定」を開く
5. 「追加」を開く
6. まず、「プリンシパルの選択」のリンクをクリック
 「オブジェクトの種類」を開き、「コンピュータ」にチェックを入れる
 「選択するオブジェクト名を入力してください」の下の欄にエラーがでた「クラスタ名」を入力
 「名前を確認」してOK
7. 種類「許可」、適用先「このオブジェクトとすべての子オブジェクト」が選択されていることを確認
8. アクセス許可は「すべてのプロパティの読み取り」と「すべての子オブジェクトの作成」にチェック
 他の項目は標準設定のままで良い
9. この設定でセキュリティの追加を完了する

CephのOSD毎のPlacement Groupの数を確認する

Cephのテスト環境を構築してみた。

シナリオ通りに構築を進めていき、とりあえずは問題なくは終わった。
終わったんだけど、最後にステータスでも確認してみるかとceph healthを実行してみたところHEALTH_WARNが・・・

[root@ceph01 ~]# ceph health
HEALTH_WARN too many PGs per OSD (480 > max 300)
[root@ceph01 ~]#

OSDにたくさんのPGが割り当てられてる、といってるけど、具体的にはどれくらいあるんだろう?

と調べていくと、stackoverflowにある、下記のPGとOSDの関係性に関する質問を発見
Ceph too many pgs per osd: all you need to know

そこで紹介されている「Get the Number of Placement Groups Per Osd」に、OSD毎のPG数をコマンドで確認する手法が掲載されていた。

「ceph pg dump」の出力結果を整形して見やすいようにしている、というものだった。

ceph pg dump | awk '
BEGIN { IGNORECASE = 1 }
 /^PG_STAT/ { col=1; while($col!="UP") {col++}; col++ }
 /^[0-9a-f]+\.[0-9a-f]+/ { match($0,/^[0-9a-f]+/); pool=substr($0, RSTART, RLENGTH); poollist[pool]=0;
 up=$col; i=0; RSTART=0; RLENGTH=0; delete osds; while(match(up,/[0-9]+/)>0) { osds[++i]=substr(up,RSTART,RLENGTH); up = substr(up, RSTART+RLENGTH) }
 for(i in osds) {array[osds[i],pool]++; osdlist[osds[i]];}
}
END {
 printf("\n");
 printf("pool :\t"); for (i in poollist) printf("%s\t",i); printf("| SUM \n");
 for (i in poollist) printf("--------"); printf("----------------\n");
 for (i in osdlist) { printf("osd.%i\t", i); sum=0;
   for (j in poollist) { printf("%i\t", array[i,j]); sum+=array[i,j]; sumpool[j]+=array[i,j] }; printf("| %i\n",sum) }
 for (i in poollist) printf("--------"); printf("----------------\n");
 printf("SUM :\t"); for (i in poollist) printf("%s\t",sumpool[i]); printf("|\n");
}'

これをテスト環境で実行してみると下記の様な出力を得られた

[root@ceph01 ~]# ceph pg dump | awk '
BEGIN { IGNORECASE = 1 }
 /^PG_STAT/ { col=1; while($col!="UP") {col++}; col++ }
 /^[0-9a-f]+\.[0-9a-f]+/ { match($0,/^[0-9a-f]+/); pool=substr($0, RSTART, RLENGTH); poollist[pool]=0;
 up=$col; i=0; RSTART=0; RLENGTH=0; delete osds; while(match(up,/[0-9]+/)>0) { osds[++i]=substr(up,RSTART,RLENGTH); up = substr(up, RSTART+RLENGTH) }
 for(i in osds) {array[osds[i],pool]++; osdlist[osds[i]];}
}
END {
 printf("\n");
 printf("pool :\t"); for (i in poollist) printf("%s\t",i); printf("| SUM \n");
 for (i in poollist) printf("--------"); printf("----------------\n");
 for (i in osdlist) { printf("osd.%i\t", i); sum=0;
   for (j in poollist) { printf("%i\t", array[i,j]); sum+=array[i,j]; sumpool[j]+=array[i,j] }; printf("| %i\n",sum) }
 for (i in poollist) printf("--------"); printf("----------------\n");
 printf("SUM :\t"); for (i in poollist) printf("%s\t",sumpool[i]); printf("|\n");
}'
dumped all in format plain

pool :  4       5       6       7       8       9       10      11      12      13      14      1       2       15      3       | SUM
----------------------------------------------------------------------------------------------------------------------------------------
osd.4   39      29      25      36      27      24      35      34      30      28      34      33      35      29      32      | 470
osd.5   36      35      28      31      21      29      27      37      37      30      32      36      37      27      37      | 480
osd.6   38      37      30      35      30      24      37      33      32      31      27      32      33      31      27      | 477
osd.7   33      34      30      31      25      34      35      42      32      33      21      30      31      28      33      | 472
osd.8   29      32      39      35      28      39      31      34      36      35      38      34      35      24      21      | 490
osd.9   32      34      33      33      37      38      39      27      30      31      28      29      27      26      26      | 470
osd.10  39      31      34      24      35      36      35      40      34      37      37      45      32      31      37      | 527
osd.11  25      26      30      33      36      42      27      30      42      31      28      32      28      35      31      | 476
osd.0   27      39      38      29      35      24      34      26      28      31      38      23      33      31      32      | 468
osd.1   29      30      29      28      43      24      34      30      22      34      30      37      34      44      29      | 477
osd.2   27      32      35      33      31      38      21      24      30      26      37      26      26      36      33      | 455
osd.3   30      25      33      36      36      32      29      27      31      37      34      27      33      42      46      | 498
----------------------------------------------------------------------------------------------------------------------------------------
SUM :   384     384     384     384     384     384     384     384     384     384     384     384     384     384     384     |
[root@ceph01 ~]#

また、NAKAMURA Minoru’s Home Pageにある「RADOS の概略 (RADOS と CRUSH と Placement Group の関係)」は、Cephの理解に役に立った