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
- http://www.ntp.org/
- http://pt.wikipedia.org/wiki/NTP
- http://www.rnp.br/_arquivo/cais/manual_ntp_v1b.pdf
- http://www.rnp.br/ntp/ntp-hierarquia.html
- http://www.on.br/
- http://pcdsh01.on.br/
- http://www.rnp.br/ntp/ntp-stratum2.html
- http://www.timeanddate.com/worldclock/city.html?n=45
- http://www.arachnoid.com/abouttime/index.html
- http://www.spdialer.com/timesync/
Rodrigo,
Esse servidor tem alguma imcompatibilidade com clientes XP???
Jorge Luiz(Citar)
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
root(Citar)
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
Daniel(Citar)
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
Rodrigo Luis Silva(Citar)