Como Montar um Servidor NTP

Como fazer para montar um servidor na sua rede local para sincronizar o relogio de todos os seus servidores e estações.

O que é?

A grosso modo podemos dizer que o NTP é um protocolo que visa manter os relógios dos diversos equipamentos de rede sincronizados.

http://pt.wikipedia.org/wiki/NTP

Para que relógios sincronizados?

Simples, em caso de ataques ou análise de logs é muito importante que todos os equipamentos estejam com os relógios acertados.

Imagine que você precise ver o que um usuário fez, primeiro você olha o firewall, horário de entrada 09:03:42, depois olha o servidor web, horário de acesso 09:02:07, depois o servidor de email, 09:15:48, cada maquina com um horário diferente e que foram acessadas praticamente ao mesmo tempo.

Ao verificar o relógio de cada maquina você vê uma diferença absurda em cada relógio, você pode fazer isso ai nas suas maquinas para constatar, nenhum terá o horário igual a outra, a diferença varias em minutos e não em segundos.

Isso é muito prejudicial, e no horário de verão? Ajustar o horário maquina por maquina?

Todos esse problemas podem ser resolvidos usando o NTP, por exemplo, para sincronizar uma maquina basta utilizar o comando.

ntpdate pcdsh05.on.br
13 Jun 11:16:45 ntpdate[1437]: adjust time server 200.20.186.75 offset -0.032176 sec

Com esse comando eu sincronizo o meu Linux com o servidor NTP pcdsh05.on.br, esse servidor é do Observatório Nacional

Essa solução é totalmente viável para apenas uma ou duas maquinas mas se você quiser sincronizar todas as maquina da rede isso fica um pouco complicado devido a trafego na Internet, o protocolo é bem compacto, usa UDP e cada troca de informação são usados poucos pacotes como podemos ver abaixo

11:22:28.967672 IP 10.10.1.7.123 > 10.10.1.1.123: NTPv4, Client, length 48
11:22:28.967888 IP 10.10.1.1.123 > 10.10.1.7.123: NTPv4, Server, length 48
11:22:28.968853 IP 10.10.1.7.123 > 10.10.1.1.123: NTPv4, Client, length 48
11:22:28.969001 IP 10.10.1.1.123 > 10.10.1.7.123: NTPv4, Server, length 48
11:22:28.969550 IP 10.10.1.7.123 > 10.10.1.1.123: NTPv4, Client, length 48
11:22:28.969684 IP 10.10.1.1.123 > 10.10.1.7.123: NTPv4, Server, length 48
11:22:28.970373 IP 10.10.1.7.123 > 10.10.1.1.123: NTPv4, Client, length 48
11:22:28.970516 IP 10.10.1.1.123 > 10.10.1.7.123: NTPv4, Server, length 48

Porem isso sendo feito por algunas centenas de maquina gera bastante trafego no seu link, para contornar isso irei mostrar como montar um servidor NTP em sua própria rede.

Maquina usada nos testes

cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 7
model name      : Pentium III (Katmai)
stepping        : 3
cpu MHz         : 501.212
cache size      : 512 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
bogomips        : 1004.19
free
             total       used       free     shared    buffers     cached
Mem:        254048     230196      23852          0      74748      63128
-/+ buffers/cache:      92320     161728
Swap:       522104         96     522008
cat /etc/fedora-release
Fedora Core release 4 (Stentz)

Softwares necessários

Para instalar usando o Fedora Core basta digitar o comando

yum install ntp

Com isso será instalado tanto os softwares clientes como o servidor.

Ou você pode baixar a ultima versão do site http://www.ntp.org/

Configurando o servidor

Para configurar o servidor basta editar apenas um arquivo ntp.conf essa é a copia do arquivo que estou usando atualmente.

Não vou me estender muito nas configuração que podem ser feitas no arquivo, para isso você pode ler o arquivo que está disponível no site da RPN em http://www.rnp.br/_arquivo/cais/manual_ntp_v1b.pdf essa documentação é muito boa, nesse arquivos irei centralizar na criação rápida e fácil de um servidor.

# Permite acesso ao servidor para sincronizar mas nao permite modificacoes no servico
restrict default nomodify notrap noquery

# Permite acesso complete para a interface local
restrict 127.0.0.1

# Libera acesso a minha rede local
restrict 10.10.1.0 mask 255.255.255.0 nomodify notrap
restrict 10.1.0.0 mask 255.255.0.0 nomodify notrap

# Servidor para sincronizar o relógio
# Será usado em ordem
# o pcdsh05.on.br e stratum 1 todos os outros são stratum 2
server pcdsh05.on.br
server ntp.cais.rnp.br
server ntp.puc-rio.br
server ntp1.pucpr.br
server ntp.pop-rs.rnp.br

Mais servidores podem ser vistos em http://www.rnp.br/ntp/ntp-stratum2.html

para ver como estão as suas permições use o comando ntpdc.

#  ntpdc -nc reslist
   address          mask            count        flags
=====================================================================
0.0.0.0         0.0.0.0             14147  noquery, nomodify, notrap
10.1.0.0        255.255.0.0          2199  nomodify, notrap
10.10.1.0       255.255.255.0       10519  nomodify, notrap
10.10.1.1       255.255.255.255         0  ntpport, interface, ignore
127.0.0.1       255.255.255.255         2  none
127.0.0.1       255.255.255.255         0  ntpport, interface, ignore

Outro comando util é o ntpq com ele é possivel ver como status dos servidores.

Com ele podemos ver o nivel na hierarquia que o servidor se encontra, o delay e outras informações.

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*pcdsh05.on.br   .IRIG.           1 u  292 1024  377   45.989  -12.245   5.186
-titan.cais.rnp. 3.111.157.113    2 u  159 1024  377  180.385  -73.748 106.281
+139.82.34.11    200.143.193.3    3 u  208 1024  377   30.473  -15.311   0.586
+ntp.pucpr.br    192.5.41.209     2 u  249 1024  377   44.354  -23.184   1.113
-delta.pop-rs.rn 192.5.41.41      2 u  704 1024  377   69.726  -29.118   2.322
 LOCAL(0)        LOCAL(0)        10 l   63   64  377    0.000    0.000   0.004

Pronto agora que já configurou o arquivo basta iniciar o serviço

service ntpd start

e configurar para que ele seja iniciado todo vez que reiniciar a maquina

chkconfig ntpd on

Pronto seu servidor está configurado e funcionando, para isso vá em um cliente Linux e digite o comando.

ntpdate SERVIDOR

se você receber uma mensagem do tipo

13 Jun 12:13:51 ntpdate[6157]: no server suitable for synchronization found

Quer dizer que o seu servidor não está funcionando ainda, para saber o porque digite o comando

ntpdate -d SERVIDOR

para executar o ntpdate em modo debug

Looking for host SERVIDOR and service ntp
host found : SERVIDOR
transmit(10.10.1.7)
receive(10.10.1.7)
transmit(10.10.1.7)
receive(10.10.1.7)
transmit(10.10.1.7)
receive(10.10.1.7)
transmit(10.10.1.7)
receive(10.10.1.7)
transmit(10.10.1.7)
10.10.1.7: Server dropped: strata too high
server 10.10.1.7, port 123
stratum 16, precision -18, leap 11, trust 000
refid [10.10.1.7], delay 0.02612, dispersion 0.00000
transmitted 4, in filter 4
reference time:    00000000.00000000  Thu, Feb  7 2036  4:28:16.000
originate timestamp: c83954b4.4aeed890  Tue, Jun 13 2006 12:13:56.292
transmit timestamp:  c83954b4.4c0b45ae  Tue, Jun 13 2006 12:13:56.297
filter delay:  0.02629  0.02620  0.02617  0.02612
         0.00000  0.00000  0.00000  0.00000
filter offset: -0.00467 -0.00466 -0.00466 -0.00467
         0.000000 0.000000 0.000000 0.000000
delay 0.02612, dispersion 0.00000
offset -0.004673

13 Jun 12:13:56 ntpdate[6158]: no server suitable for synchronization found

Com isso podemos encontrar o problema na linha stratum 16, precision -18, leap 11, trust 000 essa linha fala que o nosso servidor está em stratum 16, esse é o stratum máximo de um servidor NTP, ou seja, ele está em um nível muito baixo e que não é confiável para ser usado para atualização de nossas maquinas.

Mas porque isso está acontecendo se tudo está configurado corretamente?

Fácil de responder, basta olhar no log do seu servidor.

tail /var/log/messages
Jun 13 12:13:16 SERVIDOR ntpd[1688]: ntpd [email protected] Fri May 12 09:51:35 EDT 2006 (1)
Jun 13 12:13:17 SERVIDOR ntpd[1688]: precision = 3.000 usec
Jun 13 12:13:17 SERVIDOR ntpd[1688]: Listening on interface wildcard, 0.0.0.0#123
Jun 13 12:13:17 SERVIDOR ntpd[1688]: Listening on interface wildcard, ::#123
Jun 13 12:13:17 SERVIDOR ntpd[1688]: Listening on interface lo, 127.0.0.1#123
Jun 13 12:13:17 SERVIDOR ntpd[1688]: Listening on interface eth0, 10.10.1.7#123
Jun 13 12:13:17 SERVIDOR ntpd[1688]: kernel time sync status 0040
Jun 13 12:13:17 SERVIDOR ntpd[1688]: frequency initialized 0.000 PPM from /var/lib/ntp/drift

O servidor NTP foi iniciado só que ainda não fez nenhuma sincronização, aguarde um pouco até aparecer algo como.

Jun 13 12:16:33 SERVIDOR ntpd[1688]: synchronized to 200.20.186.75, stratum 1

Pronto, pelo que você pode verificar demorou cerca de três minutos para ele fazer a primeira sincronização, o seu pode demorar um pouco mais, isso é feito de forma automática por um algoritimo interno do servidor e não pode ser mudado, ele mesmo calcula quando deve buscar uma sincronização com o servidor de stratum superior.

Pronto agora você pode executar o ntpdate no cliente.

ntpdate SERVIDOR
13 Jun 12:22:23 ntpdate[6187]: adjust time server 10.10.1.7 offset -0.021264 sec

Pronto agora sim o nosso cliente foi sincronizado com sucesso, uma diferença de -0.021264 segundos, essa diferença varia muito.

Automatizando

Com ntpd

Essa configuração é mais recomendada pois o ntpd utiliza um algoritimo interno para determinar a quantidade de vezes que ele precisa sincronizar, diminuindo o trafego de pacotes ntpd em sua rede.

Para fazer uma configuração mais redonda você pode configurar o arquivo ntp-client.conf do cliente informando os seguintes parametros.

restrict default nomodify notrap noquery
restrict 127.0.0.1
server 10.10.1.1
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
broadcastdelay  0.008
keys            /etc/ntp/keys

Com esse simples arquivo de configuração o cliente irá manter o relógio sincronizado, porém somente a própria maquina poderá acessar a interface aonde o NTP está rodando.

Para ativar o serviço basta executar os seguintes comandos

# chkconfig ntpd on
# service ntpd start
Starting ntpd:                                             [  OK  ]

Com ntpdate

Para deixar as maquinas sincronizado a cada hora, basta criar um script no diretório /etc/cron.hourly/ chamado timesync com a seguinte linha.

#vi /etc/cron.hourly/timesync
#!/bin/sh
/usr/sbin/ntpdate -s 10.10.1.1

A opção -s server para ele não mostrar nada na saida padrão, o retorno será enviado para o syslog coloco ele como executável.

#chmod +x /etc/cron.hourly/timesync

Pronto desta forma a minha maquina será sincronizada toda hora.

O NTPDate está sendo descontinuado http://ntp.isc.org/bin/view/Dev/DeprecatingNtpdate, porém eu ainda utilizo ele para fazer os testes iniciais de funcionamento do servidor, essa informação foi passada pelo Marcos Vinicius Lazarini.

Horário de verão

Para evitar problemas com o horário de verão eu configuro os meus servidor para usarem o relógio de hardware em UTC, para fazer isso no Fedora sigo os seguintes passos

Edito o arquivo /etc/sysconfig/clock e altero a linha UTC=false para UTC=true, executo o comando.

hwclock --set --date="HH:MM" –utc

Para poder ajustar o relógio do hardware para UTC, três horas a menos que o nosso horário.

Como o NTP só configura relógio de software o relógio de hardware ficará com uma referência que pode ser entendida posteriormente.

Para verificar o horário de Greewich acesse http://www.timeanddate.com/worldclock/city.html?n=45

Cisco IOS

Para configurar o roteador Cisco para utilizar o servidor NTP é bem simples, acesso seu roteador e siga os comandos.

Router> enable
password: *********
Router# config t
Router(config)# ntp server 10.10.1.1
Router(config)# ntp server 10.10.1.2
Router(config)# exit
Router# wr mem

Maquinas com Microsoft Windows

Windows XP

Duplo clique o relógio na barra de tarefas

Clicar na aba horário na Internet

Marcar a opção sincronizar automaticamente e colocar o endereço do seu servidor e clicar em atualizar agora.

Pronto

É importante lembrar que o serviço Horário do Windows tem que estar iniciado

O Windows só atualiza o relógio a cada 10 dias e não funcionou corretamente em meus testes.

Windows 2000/2003

Colaboração de Marcos Vinicius Lazarini

No Windows 2000 em diante inclusive o Windows XP existe um serviço para sincronizar o relógio interno. para utiliza-lo você deve abrir o Prompt de Comand.

Clique em Inciar -> Executar.

Digite cmd e clique em OK.

No Prompt de Comando digite.

net stop w32time
net time /setsntp:SERVIDOR
net start w32time

Lembrando que o serviço Horário do Windows deve estar configurado como automático.

Outras versões do Windows

Você pode usar o programa SP_TimeSync, que eu uso, ou o About Time ambos são gratuitos e funcionam bem melhor que o do Windows XP por dois motivos, posso usar em outras versões do Windows e também posso especificar em que período de tempo deverá ocorrer os sincronismos do relógio.

FAQ

Meu horário esta sendo atualizado com 3 horas a mais do que o meu horário real

Quando instalei o fedora, coloquei como São Paulo e marquei a opção [X] UTC

Agora apenas entrei via setup e desmarquei esta opção UTC.

Agora quando executo o date, aparece BRT ao invés de UTC

Cristiano Borges Brasil

the NTP socket is in use, exiting

Esse problema que você está é porque o seu cliente Linux está rodando o daemon do NTP.

Para resolver esse problema é bem facil, basta parar o serviço do ntpd

service ntpd stop

Depois basta executar o ntpdate

no server suitable for synchronization found

Nenhum servidor NTP foi localizado.

Use ntpdate -d SERVIDOR para rodar em modo de DEBUG para identificar a causa do problema.

As causas podem ser as mais diversas como problema na rede, no link de Internet, bloqueio de Firewall entre outro.

Você pode encontrar mais detalhes nesse mesmo artigo.

Referências

Rodrigo Luis Silva

Gestor de equipes especialista em sistemas GNU/Linux com vasta experiência em gerenciamento de storage, virtualização, network, desenvolvimento e outros.

More Posts - Website

Follow Me:
Twitter

4 Respostas

  1. Jorge Luiz

    Rodrigo,

    Esse servidor tem alguma imcompatibilidade com clientes XP???

      (Citar)

  2. root

    Jorge, nos testes que eu fiz o XP funcionou sem problemas usando esse servidor.

    O protocolo NTP é padrão de mercado, o cliente sendo compatível com o NTP vai funcionar em qualquer servidor.

    Você teve alguma dificuldade?

    Rodrigo

      (Citar)

  3. Daniel

    Caro Rodrigo,

    Você conhece alguma forma de montar um servidor NTP em uma rede apenas com Windows?

    Por exemplo utilizar uma máquina com windows XP para ser um servidor NTP.

    Obrigado antecipadamente.

    Daniel

      (Citar)

  4. Daniel:
    Caro Rodrigo,

    Você conhece alguma forma de montar um servidor NTP em uma rede apenas com Windows?

    Por exemplo utilizar uma máquina com windows XP para ser um servidor NTP.

    Obrigado antecipadamente.

    Daniel

    Oi Daniel, tudo bem.

    Desculpe a demora, rs

    Existe uma versão do softwre NTP compilado para Windows, segue o link

    http://www.meinberg.de/english/sw/ntp.htm

    A instalação é simples e praticamente se configura sozinho, só vai precisar liberar a porta no firewall e apontar as suas maquinas para o servidor.

    abs,

    Rodrigo

      (Citar)

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Home Linux Como Montar um Servidor NTP