SAMBA 4 Active Directory Domain Controller - Configuração para reportar a diferentes redes (Servidor DNS externo)


Surgiu uma necessidade de eu implementar o Samba 4. Analisando a documentação oficial (https://wiki.samba.org/index.php/Main_Page), eu verifiquei que o próprio Samba roda um DNS interno. Porém, os computadores que precisavam ingressar no AD fazem parte de redes diferentes, e a configuração com o DNS interno não permitia fazer a comunicação dos computadores com o DC. Para resolver esse problema, foi necessário encaminhar as requisições de resolução de nomes para o DNS principal da rede.



A imagem abaixo mostra a infraestrutura básica para implementar o Samba 4.



Observando a figura, temos duas redes neste cenário: a rede 192.167.10.0, onde encontra-se o DNS principal da rede e outros hosts (podendo ser clientes do Samba), e a rede 192.167.0.0, onde ficará o servidor Samba e outros hosts (podendo ser clientes do Samba). Para esse nosso teste, os hosts do cenário tem os seguintes IP's:

DNS Principal = 192.167.10.51
SAMBA AD DC = 192.167.0.251 (este host está com o nome samba-4)

* O objetivo principal deste post é fazer o samba se reportar a diferentes redes. Portanto, não será demonstrado como ingressar um computador no domínio. Poderá ser um tópico para outro post.
* Para evitar problemas de bloqueio, eu desabilitei o firewall do servidor do Samba 4 e as políticas de SELinux.

Os testes executados neste post foram realizados com a distribuição CentOS 6.4.

Com a instalação mínima do CentOS 6.4, executar os seguintes comandos:

yum install gcc libacl-devel libblkid-devel gnutls-devel \
readline-devel python-devel gdb pkgconfig krb5-workstation \
zlib-devel setroubleshoot-server libaio-devel \
setroubleshoot-plugins policycoreutils-python \
libsemanage-python setools-libs-python \
setools-libs popt-devel libpcap-devel \
sqlite-devel libidn-devel libxml2-devel \
libacl-devel libsepol-devel libattr-devel \
keyutils-libs-devel cyrus-sasl-devel \
cups-devel bind-utils bind wget -y


Incluir as opções acl e user_xattr no arquivo /etc/fstab na partição onde está o diretório /usr. Essas opções devem ser acrescentadas após a opção defaults. Seu arquivo /etc/fstab deverá ficar parecido com a linha abaixo:

/dev/mapper/VolGroup-lv_root /      ext4   defaults,acl,user_xattr  1 1

Para esse teste, o /usr estava na partição /. Antes de compilarmos o Samba, precisamos remontar o sistema de arquivos:

mount -o remount /

Para verificar se o sistema está montado com as opções acl e user_xattr, execute:

mount | grep acl
/dev/mapper/VolGroup-lv_root on / type ext4 (rw,acl,user_xattr)

Para uma lista completa dos requisitos do Samba 4, acesse https://wiki.samba.org/index.php/Samba_4/OS_Requirements.

Baixar a última versão estável do Samba 4:

cd /usr/src/
wget http://www.samba.org/samba/ftp/stable/samba-4.0.9.tar.gz
tar xf samba-4.0.9.tar.gz

Compilar o Samba 4:

./configure
make
make install

Se você desejar exportar para a variável PATH os diretórios utilizados pelo Samba (o que é aconselhável), digite os seguintes comandos:

 echo "export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/local/samba/sbin:/usr/local/samba/bin" >> /root/.bashrc
source /root/.bashrc

Samba 4 instalado. Hora de fazer as configurações básicas antes de configurarmos o AD DC.

Dois arquivos importantes que devem ser editados são: /etc/hosts e /etc/resolv.conf

Nesse nosso teste, o nome do host será samba-4 e o nome do domínio testesamba.com.br

o arquivo /etc/hosts deverá ficar da seguinte forma:

127.0.0.1    localhost
127.0.0.1    samba-4.testesamba.com.br samba-4
192.167.0.251 samba-4.testesamba.com.br samba-4

O IP 192.167.0.251 é o IP escolhido para o servidor que irá rodar o Samba 4.

Já o arquivo /etc/resolv.conf deverá ficar da seguinte forma:

search testesamba.com.br
nameserver 192.167.10.51

Iremos utilizar o DNS Bind no servidor do Samba 4 que irá encaminhar a resolução de nomes para o servidor DNS externo (principal DNS de toda a rede). Observe que no arquivo /etc/resolv.conf, o nosso servidor de nomes está configurado com o IP do servidor DNS externo. Essa configuração é mais utilizada para redes que possuem várias sub-redes e também vários domínios, mas o samba precisa se reportar a todas as redes.

Vamos configurar o domínio para o Samba 4:

Execute:
samba-tool domain provision
Realm: TESTESAMBA.COM.BR
Domain [TESTESAMBA]: 
Server Role (dc, member, standalone) [dc]: 
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ
Administrator password: 
Retype password: 

E aguarde a configuração terminar.
Com essa configuração, o Samba 4 irá solicitar a resolução de nomes para o servidor Bind rodando em seu próprio servidor, e o Bind irá encaminhar as requisições para o servidor principal da rede (essa configuração será realizada a seguir).

Ao final da execução do comando anterior, veremos as seguintes informações:

Once the above files are installed, your Samba4 server will be ready to use
Server Role:              active directory domain controller
Hostname:                SAMBA-4
NetBIOS Domain:      TESTESAMBA
DNS Domain:            testesamba.com.br
DOMAIN SID:          S-1-5-21-1472350804-1383287446-2542997206

Configuramos o arquivo /etc/named.conf, incluindo na seção options o seguinte conteúdo:
forwarders {192.167.10.51;};
Que é o IP do servidor DNS principal da rede.

* Até aqui, as configurações foram realizadas no no próprio servidor do Samba. Agora, precisamos fazer algumas configurações no servidor DNS principal.

No arquivo /etc/named.conf, devemos incluir a zona do domínio do Samba.

zone "testesamba.com.br" {
       type master;
       file "data/samba-4.db";
};

Observe que informamos que o arquivo de configuração da zona testesamba.com.br é samba-4.db, que criaremos dentro do diretório /var/named/data/. Esse arquivo deverá ter o seguinte conteúdo:

$TTL    86400
$ORIGIN testesamba.com.br.
@               IN SOA  localhost.      root.testesamba.com.br. (
                                        2013300777      ; serial
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
@                       IN NS           samba-4
samba-4         IN A            192.167.0.251
_kerberos._tcp.testesamba.com.br.        IN      SRV     0 100 88 samba-4
_ldap._tcp.testesamba.com.br.            IN      SRV     0 100 389 samba-4
_kpasswd._udp.testesamba.com.br.         IN      SRV     0 0 464 samba-4

Devemos também incluir o servidor do samba na zona reversa do DNS. O arquivo da configuração da zona reversa do meu servidor é /var/named/rev/0.167.192.db.
251     IN      PTR     samba-4.testesamba.com.br.
Reinicie o serviço do Bind no servidor DNS principal e também no servidor do Samba.
service named restart
Tudo certo com o DNS. Agora podemos iniciar o Samba e fazer alguns testes (voltar a executar os comandos no servidor do Samba, pois as configurações no DNS principal terminaram):

Execute:
samba
Pode usar o comando 'ps aux | grep samba' para verificar se os processos estão em execução.

Agora executamos os seguintes comandos para verificar o funcionamento do Samba.
Para listar os compartilhamentos do Samba:

smbclient -L localhost -U%
Domain=[TESTESAMBA] OS=[Unix] Server=[Samba 4.0.9]

 Sharename       Type      Comment
 ---------       ----      -------
 netlogon        Disk      
 sysvol          Disk      
 IPC$            IPC       IPC Service (Samba 4.0.9)
Domain=[TESTESAMBA] OS=[Unix] Server=[Samba 4.0.9]

 Server               Comment
 ---------            -------

 Workgroup            Master
 ---------            -------
Para testar a autenticação no compartilhamento netlogon do Samba:

smbclient //samba-4.testesamba.com.br/netlogon -UAdministrator%'p@ssw0rd' -c 'ls'
Domain=[TESTESAMBA] OS=[Unix] Server=[Samba 4.0.9]
  .                                   D        0  Wed Sep  4 15:36:58 2013
  ..                                  D        0  Wed Sep  4 15:37:35 2013

  52726 blocks of size 131072. 38573 blocks available
Para checar as configurações do arquivo smb.conf
testparm
Após os testes, podemos continuar com a configuração do domínio.
Vamos ajustar a configuração do Kerberos.

Renomeie o arquivo padrão de configuração:

mv /etc/krb5.conf /etc/krb5.conf.old
Faça o link simbólico do arquivo criado pelo Samba para o nosso domínio:

ln -s /usr/local/samba/private/krb5.conf /etc/
O arquivo krb5.conf deve ter o seguinte conteúdo:
[libdefaults]
        default_realm = TESTESAMBA.COM.BR
        dns_lookup_realm = false
        dns_lookup_kdc = true
Iniciamos um ticket do kerberos para o usuário Administrator:

kinit administrator@TESTESAMBA.COM.BR
Password for administrator@TESTESAMBA.COM.BR:
Warning: Your password will expire in 41 days on Wed Oct 16 16:05:41 2013
Para verificarmos o ticket gerado:

klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@TESTESAMBA.COM.BR

Valid starting     Expires            Service principal
09/04/13 16:11:36  09/05/13 02:11:36  krbtgt/TESTESAMBA.COM.BR@TESTESAMBA.COM.BR
 renew until 09/05/13 16:11:32
Para testar a autenticação no Samba utilizando Kerberos, executamos:
smbclient -k //samba-4.testesamba.com.br/netlogon -c 'ls'
Domain=[TESTESAMBA] OS=[Unix] Server=[Samba 4.0.9]
  .                                   D        0  Wed Sep  4 16:05:22 2013
  ..                                  D        0  Wed Sep  4 16:05:50 2013

  52726 blocks of size 131072. 38572 blocks available
Para testar se o DNS está funcionando corretamente, execute o seguinte comando:

O comando abaixo realiza o teste para uma consulta ao serviço LDAP.
host -t SRV _ldap._tcp.testesamba.com.br.
_ldap._tcp.testesamba.com.br has SRV record 0 100 389 samba-4.testesamba.com.br.
Se o resultado do comando acima for diferente, por exemplo, conter no final not found: 3(NXDOMAIN), alguma coisa errada tem com o DNS, tanto no servidor do Samba 4 como também no servidor DNS principal.

Com isso, você já pode ingressar com os computadores de outras sub-redes no servidor do Samba 4, pois as requisições de resolução de nome para o Samba serão encaminhadas por um servidor DNS central que irá fazer o tratamento correto.

Share this:

, ,

COMENTÁRIOS

4 comentários:

  1. poxa instalei ao centos 6.4 pra tentar fazer o samba rodar mas dá erro quando tento usar o comando "kinit administrator@PMPC.COM.BR":
    kinit: Cannot resolve servers for KDC in realm "PMPC.COM.BR" while getting initial credentials
    Sabe me dizer onde esta o problema que deriva esse erro.

    ResponderExcluir
    Respostas
    1. Verifique a resolução de nomes no seu servidor.
      1- verifique o arquivo /etc/hosts
      2- verifique as configurações do BIND.

      Você seguiu o post ou realizou o teste de outra forma?

      Excluir
  2. Ola. Primeiramente otimo tutorial. Obrigado.
    Fiz todos os procedimentos e esta tudo normal, apenas esse passo nao deu certo.
    Sabe o que pode ser?

    [root@srvad01 ~]# smbclient -k //setas.local/netlogon -c 'ls'
    ads_krb5_mk_req: smb_krb5_get_credentials failed for cifs/setas.local@ (Server not found in Kerberos database)
    cli_session_setup_kerberos: spnego_gen_krb5_negTokenInit failed: Server not found in Kerberos database
    session setup failed: SUCCESS - 0

    Obrigado

    ResponderExcluir
  3. Ola, desculpe, eu tinha esquecido de colocar o nome da maquina. Agora deu certo:

    [root@srvad01 ~]# smbclient -k //srvad01.setas.local/netlogon -c 'ls'
    Domain=[SETAS] OS=[Unix] Server=[Samba 4.1.6]
    . D 0 Mon Apr 14 14:48:49 2014
    .. D 0 Mon Apr 14 14:49:01 2014

    39371 blocks of size 524288. 34861 blocks available

    Obrigado

    ResponderExcluir