Migrando un dominio Samba NT4 a Samba Active Directory
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
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 servidorad
. En ese caso, el servidor se llamaad
netbios name = ad
-
passdb backend
debe referirse a una IP desde el cual pueda accederse al servidor LDAP del servidorPDC
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.