Ubuntu15.04とSambaの4.3.0(現時点での最新安定版)を使って、①内蔵DNSサーバーを使う方法②BIND9_FLATFILEを使う方法を改めて投稿します。いずれもコンパイル版を使用しましたが何故か、DNSサーバーの動作がおかしい。いろいろ調べてみますと、デスクトップ版では知らないうちに簡易DNSのdnsmasqデーモンが動いており、これが内蔵DNS、フラット版ともに動作をじゃましていたことが分かりました。これについて、次のサイトの記事でやっと分かり、を参考にしました。
http://case-of-t.net/2012/12/25/samba-ad-dc-howto/
bindがうまく動作してくれない原因は、上の記事の次の部分にあります。
===================================
警告: もし X Windowsが起動している場合、ネットワークマネージャーはおそらく dnsmasqを起動するでしょう、ログをチェックして、このような行がないか確認してください:
Failed to bind to 0.0.0.0:53 TCP - NT_STATUS_ADDRESS_ALREADY_ASSOCIATED
これを無効化する必要があるなら、 /etc/NetworkManager/NetworkManager.conf を好きなエディタでroot権限で開き、dns=dnsmasq の行をコメントアウトしてください、そして network-manager を再起動します。
===================================
なお、一度Ubuntuを再起動させたほうが良いと思います。Ubuntu 15.04/15.10ベータ版で動作を確認しています。この設定を前提には、SambaによるActive Directory Domain Conroller(AD DC)の構築方法につきましてはこちらの投稿記事こちら(http://www2.it-ishin.com/archives/2013/07/17/84.html)を参照しにしました。
これから、フラット版による構築の方法について述べます。メリットとしては、強力なBINDが使えるメリットがあること、正引きゾーンのほぼ完成形態を自動的に生成してくれることがあります0。
サーバー版ではこのくだりは必要ないと思いますが、デスクトップ版ではNetworkManagerでネットワーク環境をコントロールするため、dnssmasqが簡易DNSサーバーとしてポート番号53を専有します。したがって、この簡易DNSサーバーが起動しないようにする必要があります。/etc/NetworkManager/NetworkManager.conf を好きなエディタでroot権限で開き、dns=dnsmasq の行をコメントアウトして下さい。Ubuntuを再起動します。
【1】Samba4のコンパイル
Ubuntu15.04でゲットできるSamba4の最新版は4.3.0ですので、この正式版(ソース版)を公式サイトからダウンロードします。コンパイルにあたっては、次のソフトをapt-get installでゲットしておく必要があるようです(ソフトウェアデザイン2013年02月号に高橋元信さんの書かれた「Samba4ファーストインプレッション」による)
python-dev libattr1-dev libacl1-dev python-dev attr krb5-user dnsutils libpopt-dev lib-gnutlsなどなど。ただし、サイト管理者がconfigureしたところ、他のライブラリも必要でした。これは、apt-get または autitudeでインストールできますので、二、三度ネットワークからインストールすれば良いようです。
なお、krb5-userをインストールする際に、Realm名と管理サーバー名を聞かれるので、サイト管理者はIT-ISHIN.COM, it-ishin.comにしました。コンパイルの仕方はホームディレクトリに適当なディレクトリを作って、その中に圧縮ファィルをダウンロードします。そして、次のようにコンパイルすれば良いです。
※Ubuntu 15.04では、./configureに失敗した場合は必要なライブラリを指示してくれますので、その指示に従ってください。
$ tar xzvf samba-4.3.0.tar.gz $ cd samba-4.3.0 $ ./configure $ make $ sudo make install
終わるまで20分程度かかりますので、コーヒーでも飲みましょう。インストール先は標準で/usr/local/sambaとなります。
【2】Active Directory Domain Controller(ADDC)の作成
最もシンプルなやり方で、次のようにすれば良いです。
$ sudo ln -s /usr/local/samba/bin/samba-tool /usr/bin $ sudo mv /usr/bin/smbclient /usr/bin/smbclient3 //必要に応じて $ sudo ln -s /usr/local/samba/bin/smbclient /usr/bin $ sudo samba-tool domain provision
ここで、レルム名を聞かれるので、IT-ISHIN.COMと大文字で入力。DNSについては内蔵DNSを使う設定になっていますが、bindと連携させるために、BIND9_FLATFILEを選び、最後に英数字記号の入ったパスワードを入れます。パスワードは厳密で、必ず英数字記号の三文字種入ってないと、作業が失敗します。そうすると、後はSamba4が必要なファイルを作ってくれて、/usr/local/bin/samba/privateに置いてくれます。注目すべきことは/usr/local/bin/samba/private/dnsに、正引きゾーンのit-ishin.com.zoneを自動的に作成してくれることです。
※ただし、この方法はSOHO向けで、中企業から大企業以降はBIND9_DLZを選択する必要があります。この場合は、本格的なイントラネット用のDNSサーバーを構築し、Sambaと結合させる必要があります。
【3】bind9のインストールと連携
$ sudo apt-get install bind9 でbind9をインストールします。設定ファイルは/etc/bindに入っています。このうち、named.confの中身を次のようにします。 // This is the primary configuration file for the BIND DNS server named. // // Please read /usr/share/doc/bind9/README.Debian.gz for information on the // structure of BIND configuration files in Debian, *BEFORE* you customize // this configuration file. // // If you are just adding zones, please do that in /etc/bind/named.conf.local include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.default-zones"; include "/etc/bind/named.conf.local"; include "/usr/local/samba/private/named.conf"; include "/etc/bind/rndc.key";
DNS設定のために不可欠なzoneファイルは/usr/local/samba/private/dns/it-ishin.com.zoneです。これが、bind9で読めるように、次の設定をします。
$ sudo chown root:bind /usr/local/samba/private/named.conf $ sudo chown root:bind -R /usr/local/samba/private/dns または、sudo chown root:bind -R /usr/local/samba/privateで良いと思います。
次に、/etc/bind/named.conf.optionsの最後に次の諸行を付加します。
tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab"; //←必須① allow-query { any; }; allow-recursion { any; }; forwarders { 192.168.1.1; }; //ルーターのアドレス、外部へのnameserverのIPアドレス //dnssec-validation no;
/usr/local/samba/private/named.txtによると、①は必須です。ただ、サイト管理者の場合、これだけでは、ADドメインに参加できなかったので(エラーが発生)、参考文献に書いてあった次の4行をつけました。最後を//でコメントしているのは、二重設定のようでbind9が起動しなかったためです。
【3】Bind9の起動と動作の確認
最初に、resolv.confのnameserverに自身のホスト、つまり、127.0.0.1を設定します。
michiaki@ubuntu01:~$ cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN # domain it-ishin.com nameserver 127.0.0.1 nameserver 192.168.1.2 //ホストのIPアドレス。必ず必要と言うものでもない。 nameserver 192.168.1.1 //宅内のルーターのIPアドレス search flets-east.jp iptvf.jp
こうしておいて、sudo service bind9 startとすれば、BINDが起動します。うまく動作しているか確認するためには、statusを見ればよい。sudo service bind9 statusですね。サイト管理者のところでは、次のようになりました。
● bind9.service - BIND Domain Name Server Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: enabled) Drop-In: /run/systemd/generator/bind9.service.d └─50-insserv.conf-$named.conf Active: active (running) since Tue 2015-10-20 13:04:29 JST; 3s ago Docs: man:named(8) Process: 4256 ExecStop=/usr/sbin/rndc stop (code=exited, status=0/SUCCESS) Main PID: 4261 (named) CGroup: /system.slice/bind9.service └─4261 /usr/sbin/named -f -u bind Oct 20 13:04:29 ubuntu01 named[4261]: command channel listening on ::1#953 Oct 20 13:04:29 ubuntu01 named[4261]: managed-keys-zone: journal file is ou...le Oct 20 13:04:29 ubuntu01 named[4261]: managed-keys-zone: loaded serial 53 Oct 20 13:04:29 ubuntu01 named[4261]: zone 0.in-addr.arpa/IN: loaded serial 1 Oct 20 13:04:29 ubuntu01 named[4261]: zone 127.in-addr.arpa/IN: loaded serial 1 Oct 20 13:04:29 ubuntu01 named[4261]: zone 255.in-addr.arpa/IN: loaded serial 1 Oct 20 13:04:29 ubuntu01 named[4261]: zone it-ishin.com/IN: loaded serial 2...17 Oct 20 13:04:29 ubuntu01 named[4261]: zone localhost/IN: loaded serial 2 Oct 20 13:04:29 ubuntu01 named[4261]: all zones loaded Oct 20 13:04:29 ubuntu01 named[4261]: running
起動確認後、bind9の動作を次のようにして確認します。
$ sudo service bind9 restart $ host -t SRV _ldap._tcp.it-ishin.com. _ldap._tcp.it-ishin.com has SRV record 0 100 389 ubuntu.it-ishin.com. $ host -t SRV _ldap._tcp.dc._msdcs.it-ishin.com. _ldap._tcp.dc._msdcs.it-ishin.com has SRV record 0 100 389 ubuntu.it-ishin.com. $ host -t SRV _kerberos._udp.it-ishin.com. _kerberos._udp.it-ishin.com has SRV record 0 100 88 ubuntu.it-ishin.com. $ host -t A ubuntu01.it-ishin.com. ubuntu.it-ishin.com has address 192.168.1.2
ここで、nxdomainなどと言われたら、NetworkManager.confのdnsmasqのところにコメントを加えていないか、または、DNSの設定が間違っています。コメントアウトするか、または、設定を見なおして見ましょう。
【重要】すべに述べましたように、かなりの確率で上記コマンドが正常に実行されない場合があります。これは、デスクトップ環境の場合、dnsmasqという簡易DNSが動作しており、bind9とバッティングしているためです。その場合は、次の設定ファイル/etc/NetworkManager/NetworkManager.confを編集し、その中のdnsmasqをコメントアウトしてください。そして、Ubuntuを再起動してください。
また、bind9を起動させる場合に、apparamorが効いて動作しなくなる場合があります。その場合は、/etc/apparmor.d/usr.sbin.namedを調節する必要があります。取り敢えず、次のように最後に付け加えるとうまく動作してくれました。
# vim:syntax=apparmor # Last Modified: Fri Jun 1 16:43:22 2007 #include <tunables/global> /usr/sbin/named { #include <abstractions/base> #include <abstractions/nameservice> capability net_bind_service, capability setgid, capability setuid, capability sys_chroot, capability sys_resource, # /etc/bind should be read-only for bind # /var/lib/bind is for dynamically updated zone (and journal) files. # /var/cache/bind is for slave/stub data, since we're not the origin of it. # See /usr/share/doc/bind9/README.Debian.gz /etc/bind/** r, /var/lib/bind/** rw, /var/lib/bind/ rw, /var/cache/bind/** lrw, /var/cache/bind/ rw, # gssapi /etc/krb5.keytab kr, /etc/bind/krb5.keytab kr, # ssl /etc/ssl/openssl.cnf r, # GeoIP data files for GeoIP ACLs /usr/share/GeoIP/** r, # dnscvsutil package /var/lib/dnscvsutil/compiled/** rw, /proc/net/if_inet6 r, /proc/*/net/if_inet6 r, /usr/sbin/named mr, /{,var/}run/named/named.pid w, /{,var/}run/named/session.key w, # support for resolvconf /{,var/}run/named/named.options r, # some people like to put logs in /var/log/named/ instead of having # syslog do the heavy lifting. /var/log/named/** rw, /var/log/named/ rw, # Site-specific additions and overrides. See local/README for details. #include <local/usr.sbin.named> # Samba4 FLATFILE and Active Directory Zones (default source installation) /usr/local/samba/lib/** rw, /usr/local/samba/private/dns.keytab r, /usr/local/samba/private/named.conf r, /usr/local/samba/private/named.conf.update r, /usr/local/samba/private/dns/** rwk, }
なお、併せてkerberosの動作の確認も必要です。取り敢えず、おまじないです。
$ sudo kinit Administrator@IT-ISHIN.COM Password for Administrator@IT-ISHIN.COM: Warning: Your password will expire in 41 days on Wed Aug 28 02:44:10 2013 $ sudo klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: Administrator@it-ishin.com Valid starting Expires Service principal 17/07/2013 09:32 17/07/2013 19:32 krbtgt it-ishin.com@it-ishin.com renew until 18/07/2013 09:32
Administratorのパスワードはsamba-tool domain provisionで設定したものです。
【4】Samba4の起動スクリプト(暫定版)
※以下は、暫定的なものです。 恥ずかしながら、次のようなsmbスクリプトもどきを書いて、実行権限を与えた後、/usr/binに放り込みました。
#!/bin/bash if [ -f /usr/local/samba/var/run/samba.pid ]; then /bin/rm /usr/local/samba/var/run/samba.pid killall samba fi /usr/bin/sudo service bind9 stop /usr/local/samba/sbin/samba # service nmbd restart sleep 5 /usr/bin/sudo service bind9 start
何故か、sleepがついています。samba起動直後にbind9を再起動させるとうまく行かなかったことの名残りです。