Migrando un dominio Samba NT4 a Samba Active Directory

De WikiSalud
Revisión a fecha de 15:42 15 mar 2017; Alortiz (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Contenido

Resumen

Migración de Dominio NT4 sobre Samba3 a un dominio AD con Samba4 e integración en la infraestructura existente para un cambio de servidor transparente en los clientes

Introducción

Samba4 posibilita la configuración de un dominio Active Directory con servidores Linux. En la mayoría de casos, la cuestión más usual es sobre migrar un dominio NT4 existente con cientos de clientes conectados a un Dominio AD con la mayor transparencia posible para cada cliente. Esta guía exime incluso de cambiar servidor DNS a cada cliente. Las claves son el cambio de IP del servidor y la integración del dominio DNS minsal.psalud.gob.sv como subdominio dentro del dominio psalud.gob.sv de la infraestructura existente.

Guía de migración

Pasos previos

  • El charset del sistema de configurarse correctamente, lo que viene a ser "tal como se supone que usted quiere". En mi caso particular configuro es_SV.UTF-8 tal como se explica acá
  • Actualizar el sistema antes de instalar: Aptitude en Debian Jessie se esta comportando mal a la hora de resolver dependencias cuando el sistema esta desactualizado.

Sobre la infraestructura a usar en la migración

Samba infraestructura migracion.png

Ejecutando la migración

Servidor AD

Creamos un directorio para almacenar los ficheros que componían al dominio NT de samba3.

mkdir /var/lib/samba3tdb/

Transferimos al servidor AD dichos ficheros, en el ejemplo, desde estando en AD ejecutamos:

scp -r root@10.30.20.49:/var/lib/samba/* /var/lib/samba3tdb/
scp -r root@10.30.20.49:/etc/samba/* /var/lib/samba3tdb/

Instalamos todos los paquetes necesarios con:

aptitude install samba smbclient bind9 bind9-host krb5-user ntp

Nos aseguramos que samba esté apagado

systemctl stop samba-ad-dc.service

En serio, nos aseguramos que no haya un servicio relacionado (En Debian parece que el Servidor Samba intenta funcionar como samba 3)

systemctl stop smbd.service
systemctl stop nmbd.service
systemctl disable nmbd.service
systemctl disable smbd.service

El proceso de instalación ha creado algunos ficheros que no necesitamos de la forma en que se configuraron por defecto:

rm /etc/samba/smb.conf
rm -r /var/lib/samba/private/*tdb

Servidor PDC

Apagamos en el servidor viejo al servicio samba y lo sacamos del arranque con el inicio de sistema por si las dudas

service samba stop
update-rc.d samba disable

Servidor AD

Parte de la configuración necesaria para el dominio es leída del fichero /etc/samba/smb.conf que trajimos desde el servidor PDC. Luego, será necesario constatar dos cosas:

  • netbios name se corresponde con el nombre de host del actual servidor ad. En ese caso, el servidor se llama ad
netbios name = ad
  • passdb backend debe referirse a una IP desde el cual pueda accederse al servidor LDAP del servidor PDC
passdb backend = ldapsam:ldap://10.30.20.49

El comando de migración va de la siguiente forma:

samba-tool domain classicupgrade --dbdir=/var/lib/samba3tdb/ --use-xattrs=yes --realm=minsal.psalud.gob.sv --dns-backend=BIND9_DLZ /var/lib/samba3tdb/smb.conf --verbose

En las versiones más recientes de Debian, hay un error con el anterior comando, por el cuál se escribe winbindd en lugar de winbind en server services, con lo cual habrá que modificar manualmente. En términos generales, el fichero de configuración es de lo máse breve y sencillo, algo así como el siguiente:

# Global parameters
[global]
        workgroup = SALUD.GOB.SV
        realm = minsal.salud.gob.sv
        netbios name = AD
        server role = active directory domain controller
        server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbind, ntp_signd, kcc, dnsupdate
        idmap_ldb:use rfc2307 = yes

[netlogon]
        path = /var/lib/samba/sysvol/minsal.salud.gob.sv/scripts
        read only = No 

[sysvol]
        path = /var/lib/samba/sysvol
        read only = No


Ante la necesidad de reiniciar al proceso debido a errores como SID duplicados o nombres de usuario/grupo duplicados, borrar los archivos borrados con

rm -r /var/lib/samba/sysvol/* 
rm -r /var/lib/samba/private/*ldb 
rm -r /var/lib/samba/private/sam.ldb.d/*
rm -r /var/lib/samba/private/dns/sam.ldb.d/*
rm -r /var/lib/samba/private/smbd.tmp/*
rm /etc/samba/smb.conf

Con --verbose veremos infinidad de información que podría ser útil guardar, sin embargo, podría pasarse por alto un fragmento que de hecho contiene información sumamente sensible, y va de la siguiente forma:

Admin password:        3g6cgvKP&WCM5gh
Server Role:           active directory domain controller
Hostname:              ad
NetBIOS Domain:        PSALUD.GOB.SV
DNS Domain:            minsal.psalud.gob.sv
DOMAIN SID:            S-1-5-21-1048629412-387374047-4087719091

Verificamos la version de bind9 instalada, siendo en Debian Jessie la 9.9.5 y verificamos que se haga referencia a la librería correspondiente en /var/lib/samba/private/named.conf:

database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_9.so";

A continuación configuramos bind9 con el siguiente fichero, pero será posible hacer otros cambios que se consideren necesarios. Basta considerar que para que la zona dinámica funcione, esta debe encontrarse en el mismo equipo donde esta samba, por otro lado, las consultas que los clientes windows hacen al DNS están configuradas como norecursive.

cat <<CONF >/etc/bind/named.conf
# Global Bind configuration options
include "/var/lib/samba/private/named.conf";
options {

    auth-nxdomain yes;
    directory "/var/lib/bind/";
    notify no;
    empty-zones-enable no;
    tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
 
    allow-query {
        127.0.0.1;
        192.168.2.0/24;
        # add other networks you want to allow to query your DNS
    };
 
    allow-recursion {
        192.168.2.0/24;
        # add other networks you want to allow to do recursive queries
    };
 
    forwarders {
        # Google public DNS server here - replace with your own if necessary
        192.168.2.4;
    };

    allow-transfer {
        # this config is for a single master DNS server
        none;
    };
 
};

# Required localhost forward-/reverse zones
zone "localhost" {
   type master;
   file "master/localhost.zone";
};

zone "0.0.127.in-addr.arpa" {
    type master;
    file "master/0.0.127.zone";
};
CONF

Creamos el directorio para las primeras zonas:

mkdir /var/lib/bind/master

La zona localhost que estamos creando en el fichero anterior

cat <<CONF >/var/lib/bind/master/localhost.zone
\$TTL 3D

\$ORIGIN localhost.

@       1D      IN     SOA     @       root (
                      2013050101      ; serial
                      8H              ; refresh
                      2H              ; retry
                      4W              ; expiry
                      1D              ; minimum
                      )

@       IN      NS      @
       IN      A       127.0.0.1
CONF

La zona reversa para localhost

cat <<CONF >/var/lib/bind/master/0.0.127.zone
\$TTL 3D 

@       IN      SOA     localhost. root.localhost. (
                       2013050101      ; Serial
                       8H              ; Refresh
                       2H              ; Retry
                       4W              ; Expire
                       1D              ; Minimum TTL
                       ) 

       IN      NS      localhost. 

1      IN      PTR     localhost.
CONF

Normalizamos permisos y obtenemos el directorio DNS raíz:

chown bind:bind /var/lib/bind/master/*zone
chmod 640 /var/lib/bind/master/*zone

wget -q -O /var/lib/bind/named.root http://www.internic.net/zones/named.root
chown bind:bind /var/lib/bind/named.root

Reiniciar el servicio

systemctl restart bind9.service

Un registro saludable ocurre de la siguiente forma:

abr 21 12:46:05 directorio named[1032]: generating session key for dynamic DNS
abr 21 12:46:05 directorio named[1032]: sizing zone task pool based on 2 zones
abr 21 12:46:05 directorio named[1032]: Loading 'AD DNS Zone' using driver dlopen
abr 21 12:46:06 directorio named[1032]: samba_dlz: started for DN DC=minsal,DC=psalud,DC=gob,DC=sv
abr 21 12:46:06 directorio named[1032]: samba_dlz: starting configure
abr 21 12:46:06 directorio named[1032]: samba_dlz: configured writeable zone 'minsal.psalud.gob.sv'
abr 21 12:46:06 directorio named[1032]: samba_dlz: configured writeable zone '_msdcs.minsal.psalud.gob.sv'
abr 21 12:46:06 directorio named[1032]: set up managed keys zone for view _default, file 'managed-keys.bind'
abr 21 12:46:06 directorio named[1032]: command channel listening on 127.0.0.1#953
abr 21 12:46:06 directorio named[1032]: command channel listening on ::1#953

Con el servidor DNS ya funcional, debe configurarse al servidor como su propio servidor DNS en /etc/resolve.conf. Descuidar esto es una parte significativa de los quebraderos de cabeza con los que los foros en internet están llenos (Cannot find KDC for realm "PSALUD.GOB.SV" while getting initial credentials es el más común).

Para configurar kerberos con el fichero creado por el asistente de migración, basta con crear un enlace simbólico:

ln -sf /var/lib/samba/private/krb5.conf /etc/krb5.conf

Llegado a este punto, reiniciar samba

systemctl restart samba-ad-dc.service

Un registro saludable (Exceptuando el problema con cups) ocurre de la siguiente forma:

abr 21 12:47:20 directorio samba[1105]: samba version 4.1.17-Debian started.
abr 21 12:47:20 directorio samba-ad-dc[1096]: Starting Samba AD DC daemon: samba.
abr 21 12:47:21 directorio samba[1106]: [2016/04/21 12:47:21.005728,  0] ../source4/smbd/server.c:488(binary_smbd_main)
abr 21 12:47:21 directorio samba[1106]: samba: using 'standard' process model
abr 21 12:47:21 directorio samba[1106]: [2016/04/21 12:47:21.021866,  0] ../lib/util/become_daemon.c:136(daemon_ready)
abr 21 12:47:21 directorio smbd[1109]: [2016/04/21 12:47:21.947156,  0] ../lib/util/become_daemon.c:136(daemon_ready)
abr 21 12:47:21 directorio smbd[1123]: STATUS=daemon 'smbd' finished starting up and ready to serve connectionsUnable to connect to CUPS server localhost:631 - Descriptor de fichero erróneo
abr 21 12:47:21 directorio smbd[1122]: STATUS=daemon 'smbd' finished starting up and ready to serve connectionsfailed to retrieve printer list: NT_STATUS_UNSUCCESSFUL

Revisamos que nuestro reino kerberos esta en línea, usando para ello la contraseña que hemos recogido antes

kinit administrator@MINSAL.PSALUD.GOB.SV

Si el anterior comando ocurre sin problemas (No devuelve nada), podemos usar las herramientas de samba4 para revisar los registros DNS.

samba-tool dns query 127.0.0.1 minsal.psalud.gob.sv @ ALL

Y no podía faltar un clásico, porque los clásicos nunca mueren

smbclient //DIRECTORIO/netlogon -U alortiz

En este punto, usted tiene un servidor AD con samba4 totalmente funcional. Si atiende a la dirección DNS, en este punto ya es posible que todos aquellos servicios que se autentican contra el servidor LDAP puedan cambiar su configuración.

Integrando AD en la infraestructura existente

Cambio de IP

Considerando equipos dentro del antiguo dominio NT con samba3, si el servidor que vamos a migrar adquiere la nueva IP la transición será totalmente transparente. Considerar que esta transición es irreversible, lo que si bien es algo bueno nos obliga a realizar pruebas de esta guía en un entorno de red aislado.

Servidor PDC

A estas alturas de la vida, tenemos a samba apagado. Pero ahora tenemos que decir adiós para siempre a nuestro servidor Samba. En lugar del dramatismo, basta con cambiar su IP para poder usarla en el nuevo servidor Samba.

Servidor AD

Agregamos la ip al vuelo. Necesitamos que la otra IP este disponible porque existen muchas operaciones que se realizan contra ella.

ip addr add 10.30.20.49/24 dev eth0

Actualizamos los registros DNS para que tome en cuenta la nueva IP

samba_dnsupdate --verbose

La salida es sumamente extensa, pero básicamente hay que fijarse en cada punto donde pone Failed:

Failed to find matching DNS entry A directorio.minsal.psalud.gob.sv 10.30.20.49

Por cada uno de ellos, y hacia el final de dicho comando, debe existir un salida de este tipo:

Calling nsupdate for A directorio.minsal.psalud.gob.sv 10.30.20.49 (add)
Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id:      0
;; flags:; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
;; UPDATE SECTION:
directorio.minsal.psalud.gob.sv. 900 IN	A	10.30.20.49

La mejor prueba de que ha funcionado es que al volver a correr ese comando, no hay mayores cambios y hacia el final de toda la salida el comando devuelve:

No DNS updates needed

Apagamos un momento a samba mientras hacemos los cambios systemctl stop samba-ad-dc.service

Cambiamos la IP para el sistema. En Debian basta con modificar /etc/hosts y /etc/network/interfaces. Revisamos por ultima vez que en /etc/resolv.conf se apunte al mismo servidor como DNS

Reiniciamos la red

systemctl restart networking.service

Verificamos el estado de nuestra conexión con el sistema, si es que estábamos conectados en remoto

Reiniciamos con toda confianza samba

systemctl start samba-ad-dc.service

En este punto, hemos hecho un cambio exitoso de dirección IP a Samba.

Integración de servidores DNS

Esto puede ser un pequeño truco. Para unir nuevos equipos el dominio, bastará con que tengan configurado un servidor DNS que resuelva toda las entradas relacionadas al funcionamiento de AD. Ahora, para ahorrar el paso de tener que configurar la red, es posible que este sea el procedimiento que quiera seguir. Servidor DNS

Agregamos en el fichero /etc/bind/named.conf.default-zones (O donde sea que se agreguen las zonas en nuestra configuración DNS) un zona esclava de la siguiente forma:

zone "minsal.psalud.gob.sv" {
        type slave;
        file "/var/lib/bind/minsal.psalud.gob.sv.db";
        allow-transfer  {10.30.20.49/32;};
        masters {10.30.20.49;};
};

Creamos el fichero /var/lib/bind/minsal.psalud.gob.sv.db y normalizamos permisos:

touch /var/lib/bind/minsal.psalud.gob.sv.db
chown bind:bind /var/lib/bind/minsal.psalud.gob.sv.db

Reiniciamos el servicio BIND:

systemctl restart bind9.service

Un registro característico y funcional apunta de la siguiente manera

mar 15 14:29:22 dns named[30171]: zone minsal.psalud.gob.sv/IN: loading from master file /var/lib /bind/minsal.psalud.gob.sv.db failed: end of file
mar 15 14:29:22 dns named[30171]: zone minsal.psalud.gob.sv/IN: unable to load from '/var/lib/bind/minsal.psalud.gob.sv.db'; renaming file to '/var/lib/bind/db-AVREcZAb' for failure analysis and retransferring.
mar 15 14:29:22 dns named[30171]: zone localhost/IN: loaded serial 2
mar 15 14:29:22 dns named[30171]: zone salud.gob.sv/IN: loaded serial 1408027834
mar 15 14:29:22 dns named[30171]: all zones loaded
mar 15 14:29:22 dns named[30171]: running 
mar 15 14:29:22 dns named[30171]: zone minsal.psalud.gob.sv/IN: Transfer started.
mar 15 14:29:22 dns named[30171]: transfer of 'minsal.psalud.gob.sv/IN' from 10.30.20.49#53: connected using 192.168.2.4#45887
mar 15 14:29:22 dns named[30171]: zone minsal.psalud.gob.sv/IN: transferred serial 1
mar 15 14:29:22 dns named[30171]: transfer of 'minsal.psalud.gob.sv/IN' from 10.30.20.49#53: Transfer completed: 1 messages, 21 records, 1032 bytes, 0.012 secs (86000 bytes/sec)

Esta configuración la podemos probar al ejecutar una consulta DNS no recursiva contra el servidor dado. Un equipo externo al DNS sería su mejor opción

dig @10.30.20.4 -t SRV _kerberos._udp.minsal.psalud.gob.sv +short +norecurse
0 100 88 directorio.minsal.psalud.gob.sv.

Fuentes

Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas