PDC + Samba 4 + DLZ, o PDC con Samba4 y delegación de zona@Debian9

Se acuerdan del PDC simple con Samba 4? Hoy complicaremos el asunto. Hoy haremos lo mismo pero con delegación de zona, por lo que necesitaremos compilar Samba 4 y Bind 9. Ahora tu seguro te preguntarás: ¿Por qué mejor no lo hacemos con el bind y el samba del repositorio? Y yo te responderé: “Porque el bind y el samba que vienen en el repositorio, no vienen compilados con la delegación de zona en mente”.

Y entonces: ¿Qué es la delegación de zona?

Delegación de zona: Una delegación no es más que un puntero a un servidor DNS, ese otro servidor de DNS es responsable resolver un nombre.

Sabiendo eso, vamos a lo que nos toca.

En este tutorial me voy a saltar el dhcp, ntp, la configuración de la red y /etc/hosts ya que en el otro tutorial lo expliqué exhaustivamente.

Como les explicaba, necesitamos compilar Bind 9 y Samba 4, por lo que lo primero es descargarlos. Ahora bien, necesitaremos algunos paquetes que intervienen en al proceso de compilación.

0 → Programas necesarios para compilar:

# apt install acl attr autoconf bison build-essential debhelper dnsutils docbook-xml docbook-xsl flex gdb krb5-user libacl1-dev libaio-dev libattr1-dev libblkid-dev libbsd-dev libcap-dev libcups2-dev libgnutls28-dev libjson-perl libldap2-dev libncurses5-dev libpam0g-dev libparse-yapp-perl libpopt-dev libreadline-dev perl perl-modules pkg-config python-all-dev python-dev python-dnspython python-crypto xsltproc zlib1g-dev rcconf ccze mlocate telnet libssl-dev libgeoip-dev libkrb5-dev libxml2-dev libdb-dev

Y nos saldrán opciones a configurar[Kerberos].

Dominio

Servidor de Kerberos

Password changing server para Kerberos

Podemos rellenar esta información con lo que necesitemos, aunque en pasos posteriores samba cuando provisione el dominio, genera una configuración mejorada/adaptada al entorno que necesitamos.

1 → Compilando y configurando Bind 9

Descargamos, hacemos algunos ajustes y compilamos:

# wget -c https://ftp.isc.org/isc/bind9/cur/9.11/bind-9.11.2-P1.tar.gz

# groupadd -g 23 bind
# useradd -g bind -u 23 -d /var/run/named -M -s /sbin/nologin bind

# tar -zxvf bind-9.11.2-P1.tar.gz
# cd bind-9.11.2-P1

# ./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc/bind --localstatedir=/var --enable-threads --enable-largefile --with-libtool --enable-shared --enable-fixed-rrset --enable-static --with-openssl=/usr --with-gssapi=/usr --with-gnu-ld --with-dlz-bdb=yes --with-dlz-filesystem=yes --with-dlz-ldap --with-dlz-stub=yes --with-dlopen=yes --with-randomdev=/dev/urandom --with-geoip=/usr --with-ecdsa --with-libxml2 CFLAGS=-fno-strict-aliasing

# make
# make install

Ahora algunos otros toques extras:

# mkdir /var/log/bind9
# chown bind:bind /var/log/bind9
# cd /var/log/bind9
# touch bind.err bind.info bind.warn bind.log
# chmod -R 644 *; chown -R root:adm *

# mkdir -p /var/cache/bind
# chmod 775 /var/cache/bind; chown -R bind:bind /var/cache/bind

# cd /etc/bind/
# rndc-confgen -a -r /dev/urandom
# chmod 644 /etc/bind/rndc.key
# chown bind /etc/bind/rndc.key

Creamos el archivo named.conf con el siguiente contenido:

controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
options {
listen-on-v6 { none; };
auth-nxdomain yes;
allow-query { any; };
allow-update { any; };
dnssec-enable no;
dnssec-validation no;
empty-zones-enable no;
notify yes;
also-notify { 10.10.1.2;};
//allow-transfer { 10.10.1.3;}; // si va a ser transferencia de zona a otro servidor de dns esclavo
notify-source 10.10.1.2
transfer-source 10.10.1.2;
recursion yes;
allow-recursion { any; };
forwarders { 200.55.128.3; 200.55.128.4;};
tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
directory "/var/cache/bind";
};
include "/var/lib/samba/private/named.conf";
include "/etc/bind/rndc.key";

logging {
channel err {
file "/var/log/bind9/bind.err";
severity error;
print-time yes;
print-category yes;
print-severity yes;
};
channel info {
file "/var/log/bind9/bind.info";
severity info;
print-time yes;
print-category yes;
print-severity yes;
};
channel warn {
file "/var/log/bind9/bind.warn";
severity warning;
print-time yes;
print-category yes;
print-severity yes;
};
channel log {
file "/var/log/bind9/bind.log";
severity debug 1;
print-time yes;
print-category yes;
print-severity yes;
};
category default { err; info; warn; log; };
};

Y pasamos a compilar samba pues necesitaremos hacer algunos arreglos a bind contra samba antes de continuar.

2 → Compilando y configurando Samba 4

# wget -c https://download.samba.org/pub/samba/samba-4.7.5.tar.gz
# tar -zxvf samba-4.7.5.tar.gz 
# cd samba-4.7.5

# ./configure --enable-fhs --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-debug --enable-selftest --cross-answers --cross-execute --disable-cups --disable-iprint --sbindir=/usr/sbin --mandir=/usr/share/man -j4 --enable-selftest --without-systemd

# make
# make install

Probando las configuraciones:

# smbd -b | grep "CONFIGFILE"
CONFIGFILE: /etc/samba/smb.conf
# smbd -b | egrep "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"
LOCKDIR: /var/lock/samba
STATEDIR: /var/lib/samba
CACHEDIR: /var/cache/samba
PRIVATE_DIR: /var/lib/samba/private

Provisionamos el directorio:

root@pdc:/etc/samba# samba-tool domain provision --use-rfc2307 --interactive
Realm [INUTIL.CU]:
Domain [INUTIL]:
Server Role (dc, member, standalone) [dc]:
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ
Administrator password:
Retype password:
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=inutil,DC=cu
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=inutil,DC=cu
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
See /var/lib/samba/private/named.conf for an example configuration include file for BIND
and /var/lib/samba/private/named.txt for further documentation required for secure DNS updates
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba AD has been generated at /var/lib/samba/private/krb5.conf
Setting up fake yp server settings
Once the above files are installed, your Samba AD server will be ready to use
Server Role: active directory domain controller
Hostname: pdc
NetBIOS Domain: INUTIL
DNS Domain: inutil.cu
DOMAIN SID: S-1-5-21-1746660850-1884490242-2990293921

Permisos a la configuración de bind en la carpeta de samba:

# chgrp bind /var/lib/samba/private/dns.keytab
# chmod g+r /var/lib/samba/private/dns.keytab

Linkear el krb5.conf del samba4 al del sistema

# mv /etc/krb5.conf{,.orig}
# ln -s /var/lib/samba/private/krb5.conf /etc/krb5.conf

Creamos el archivo:

# nano /var/lib/samba/private/named.conf.update.static

Con el siguiente contenido:

grant *.inutil.cu wildcard *.1.10.10.in-addr.arpa. PTR TXT;
grant local-ddns zonesub any;

Creamos la carpeta de samba:

mkdir /var/run/samba

Cambiamos el propietario y el grupo al directorio /var/lib/samba/private/dns y creamos /var/run/named:

# chown -R root:bind /var/lib/samba/private/dns
# chmod 775 -R /var/lib/samba/private/dns
# mkdir /var/run/named
# chmod 775 -R /var/run/named
# chown root:bind /var/run/named

Arrancamos Bind 9:

# named -u bind -4 -d 3 &

Y Samba 4:

samba -i -M single &

Y revisamos los logs para ver si todo inició bien. Ahora probaremos si funciona:

root@pdc:~# kinit administrator@INUTIL.CU
Password for administrator@INUTIL.CU:
Warning: Your password will expire in 41 days on Sat 07 Apr 2018 07:56:41 PM CDT

Ejecutamos klist:

# klist

Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@INUTIL.CU

Valid starting Expires Service principal
02/24/2018 19:38:37 02/25/2018 05:38:37 krbtgt/INUTIL.CU@INUTIL.CU
renew until 02/25/2018 19:38:32

Ahora crearemos la zona inversa del DNS:

# samba-tool dns zonecreate pdc 1.10.10.in-addr.arpa
# samba-tool dns add pdc 1.10.10.in-addr.arpa 4 PTR pdc.inutil.cu

Y probamos:

root@pdc:~# samba-tool dns query 127.0.0.1 inutil.cu @ ALL
Password for [administrator@INUTIL.CU]:
Name=, Records=3, Children=0
SOA: serial=1, refresh=900, retry=600, expire=86400, minttl=3600, ns=pdc.inutil.cu., email=hostmaster.inutil.cu. (flags=600000f0, serial=1, ttl=3600)
NS: pdc.inutil.cu. (flags=600000f0, serial=1, ttl=900)
A: 10.10.1.4 (flags=600000f0, serial=1, ttl=900)
Name=_msdcs, Records=0, Children=0
Name=_sites, Records=0, Children=1
Name=_tcp, Records=0, Children=4
Name=_udp, Records=0, Children=2
Name=DomainDnsZones, Records=0, Children=2
Name=ForestDnsZones, Records=0, Children=2
Name=pdc, Records=1, Children=0
A: 10.10.1.4 (flags=f0, serial=1, ttl=900)

Ahora debemos actualizar el fichero de configuración de Samba 4, y dejarlo de la siguiente manera:

# Global parameters
[global]
netbios name = PDC
realm = INUTIL.CU
server role = active directory domain controller
server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate
workgroup = INUTIL
idmap_ldb:use rfc2307 = yes
nsupdate command = /usr/bin/nsupdate -g
ldap server require strong auth = No
log level = 1
log file = /var/log/samba/samba.log
max log size = 50

[netlogon]
path = /var/lib/samba/sysvol/inutil.cu/scripts
read only = No
create mask = 0700
directory mask = 0644

[sysvol]
path = /var/lib/samba/sysvol
read only = No
create mask = 0700
directory mask = 0644

La directiva “nsupdate command” lo que hace es utilizar el dns dinámico.

Y ahora comprobamos si actualiza dinámicamente el dns:

# samba_dnsupdate --verbose --all-names

Ahora sólo queda copiar a /etc/init.d/ los scripts de inicio de bind9 y samba. Los cuales extraeremos de los respectivos paquetes en el repositorio, para no escribir todo ese código. Después de copiarlos a /etc/init.d debemos hacerlos ejecutables y ponerlos a que inicien con el sistema.

# cd /etc/init.d
# update-rc.d bind9 defaults
# update-rc.d samba defaults
# update-rc.d samba-ad-dc defaults
# update-rc.d nmbd defaults
# update-rc.d smbd defaults

Y reiniciamos el sistema, para comprobar de que iniciaron todos los scripts bien. Después de reiniciar ejecutamos netstat para ver si todo ocurrió bien:

root@pdc:~# netstat -lptun
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:464 0.0.0.0:* LISTEN 494/samba
tcp 0 0 10.10.1.4:53 0.0.0.0:* LISTEN 449/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 449/named
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 446/sshd
tcp 0 0 0.0.0.0:88 0.0.0.0:* LISTEN 494/samba
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 449/named
tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 491/samba
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 493/smbd
tcp 0 0 0.0.0.0:49152 0.0.0.0:* LISTEN 487/samba
tcp 0 0 0.0.0.0:49153 0.0.0.0:* LISTEN 487/samba
tcp 0 0 0.0.0.0:49154 0.0.0.0:* LISTEN 487/samba
tcp 0 0 0.0.0.0:3268 0.0.0.0:* LISTEN 491/samba
tcp 0 0 0.0.0.0:3269 0.0.0.0:* LISTEN 491/samba
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 491/samba
tcp 0 0 0.0.0.0:135 0.0.0.0:* LISTEN 487/samba
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 493/smbd
tcp6 0 0 :::464 :::* LISTEN 494/samba
tcp6 0 0 :::22 :::* LISTEN 446/sshd
tcp6 0 0 :::88 :::* LISTEN 494/samba
tcp6 0 0 :::636 :::* LISTEN 491/samba
tcp6 0 0 :::445 :::* LISTEN 493/smbd
tcp6 0 0 :::49152 :::* LISTEN 487/samba
tcp6 0 0 :::49153 :::* LISTEN 487/samba
tcp6 0 0 :::49154 :::* LISTEN 487/samba
tcp6 0 0 :::3268 :::* LISTEN 491/samba
tcp6 0 0 :::3269 :::* LISTEN 491/samba
tcp6 0 0 :::389 :::* LISTEN 491/samba
tcp6 0 0 :::135 :::* LISTEN 487/samba
tcp6 0 0 :::139 :::* LISTEN 493/smbd
udp 0 0 10.10.1.4:53 0.0.0.0:* 449/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 449/named
udp 0 0 0.0.0.0:67 0.0.0.0:* 1965/dhcpd
udp 0 0 10.10.1.4:88 0.0.0.0:* 494/samba
udp 0 0 0.0.0.0:88 0.0.0.0:* 494/samba
udp 0 0 10.10.1.4:123 0.0.0.0:* 444/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 444/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 444/ntpd
udp 0 0 10.10.1.4:137 0.0.0.0:* 488/samba
udp 0 0 10.10.1.255:137 0.0.0.0:* 488/samba
udp 0 0 0.0.0.0:137 0.0.0.0:* 488/samba
udp 0 0 10.10.1.4:138 0.0.0.0:* 488/samba
udp 0 0 10.10.1.255:138 0.0.0.0:* 488/samba
udp 0 0 0.0.0.0:138 0.0.0.0:* 488/samba
udp 0 0 10.10.1.4:389 0.0.0.0:* 492/samba
udp 0 0 0.0.0.0:389 0.0.0.0:* 492/samba
udp 0 0 10.10.1.4:464 0.0.0.0:* 494/samba
udp 0 0 0.0.0.0:464 0.0.0.0:* 494/samba
udp 0 0 0.0.0.0:47625 0.0.0.0:* 1965/dhcpd
udp6 0 0 :::88 :::* 494/samba
udp6 0 0 :::123 :::* 444/ntpd
udp6 0 0 :::10510 :::* 1965/dhcpd
udp6 0 0 :::389 :::* 492/samba
udp6 0 0 :::464 :::* 494/samba

Y listo, a crear usuarios y a unir máquinas de windows al dominio.

Uniendo a nuestra colega Rosa.

Listo!

Ahora sólo queda instalar RSAT tools, y a modificar el dominio de forma gráfica, para los que no le gusta la consola.

Mirando las propiedades del dominio.

Mirando las máquinas clientes[La PC de Rosa].

Mirando las máquinas clientes[La PC del Administrador].

Editando los datos de los usuarios…

Y ya está bueno… Probar y mejorar, es lo que les recomiendo, la creació de grupos y politicas es cosa de ustedes :D. Gracias a los colegas Erki Polo Manresa, a Arian Molina y a Héctor Suáres Planas por sus respuestas concretas y bien atinadas a mis dudas. Y a la wiki de Samba, no se me puede olvidar ;).

Un saludo y espero les sirva.

9 comentarios de “PDC + Samba 4 + DLZ, o PDC con Samba4 y delegación de zona@Debian9

  1. hola como estas_
    me da este error cuando estoy verificando samba….

    smbd: /usr/lib/x86_64-linux-gnu/libndr.so.0: version `NDR_0.0.9′ not found (required by /usr/lib/samba/libndr-samba-samba4.so)

    samba-tool domain provision –use-rfc2307 –interactive
    Traceback (most recent call last):
    File “/usr/bin/samba-tool”, line 33, in
    from samba.netcmd.main import cmd_sambatool
    File “/usr/lib/python2.7/dist-packages/samba/__init__.py”, line 394, in
    is_heimdal_built = _glue.is_heimdal_built
    AttributeError: ‘module’ object has no attribute ‘is_heimdal_built’

  2. hola como estas?
    muchas gracias por el tutorial q hiciste, pero tengo unas dudas y un errores q me gustaria comentar
    hice todo lo que dice en la web perfectamente con el mismo ip y nombre, incluso con diferentes versiones samba, y de bind…
    pero 100pre despues de install samba
    que escribo make install aparece:
    ——————————————————
    Waf: Leaving directory `/usr/local/src/samba-4.7.6/bin’
    ‘build’ finished successfully (46m0.680s)
    ——————————————————-
    y supuertamente debe haber terminado bien…
    cuando trato de verficar:
    smbd -b | grep “CONFIGFILE”
    desde ahi para abajo sale
    ——————————————————
    -bash: smbd: no se encontró la orden
    ——————————————————
    mi duda es si te falto algo o si estas mal?
    me gustaria q me ayudara!!!
    saludos
    version de debian 9.3
    Voy a probar con debian 9.4

  3. Algo no estas haciendo bien, porque no deberia salirte ese cartel, no importa si lo haces en Debian9.3 o Debian8, eso no determina, lo que determina es que algo no estas pasandole bien las opciones o algo se te pas’o de largo. Revisa bien…

  4. hola como estas?
    he seguido su tutorial y tengo una duda que me gustaria q me acarace..
    Si tienes algun tutorial de como montas el dns que utilizas en la confi de samba, te lo agradeceria, pues yo no he logrado que los clientes se registren en el dominio

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *