Você está na página 1de 18

13/03/2011 Sincronizando o Linux com a Hora Leg…

Sincronizando o Linux com a Hora Legal Brasileira usando o NTP.br


Autor: Antonio M. Moreiras <antonio at moreiras.eng.br>
Data: 31/01/2008

A importância de manter o relógio sincronizado.

Uma característica básica e ao mesmo tempo importante do tempo é que ele sempre avança. O tempo não
para e não volta para trás. Vários programas de computador fazem uso dessa característica e podem ter seu
funcionamento comprometido se o relógio do computador inesperadamente passar a indicar um horário
errado, especialmente se for um horário no passado. Isso se complica ainda mais na Internet, com vários
computadores trocando informações entre si!

Quando se trata de um computador isolado a exatidão em relação à uma referência de tempo como a hora
legal brasileira não é tão importante. Nesse caso o mais importante é manter a monotonicidade do tempo.
Além disso, eventuais ajustes no relógio devem ser, sempre que possível, graduais. Saltos no tempo, mesmo
de alguns poucos segundos, para o futuro podem ser ruins, e para o passado, desastrosos.

Como exemplos de aplicações afetadas pelo tempo pode-se citar:

Sistemas de distribuição de conteúdo (www, usenet news, etc): Utilizam estampas de tempo para
controlar a expiração dos documentos e o cache. Servidores com o tempo errado podem causar
perda de informações ou impedir o acesso às mesmas.
Sistemas de arquivos (filesystems): Alguns eventos importantes como a criação e modificação de
arquivos são marcados por estampas de tempo. Algumas aplicações lêem essas informações e delas
dependem. Se alguma dessas datas estiver no futuro, as aplicações podem agir de forma indevida, ou
mesmo deixar de funcionar por completo. Como exemplos de aplicações sensíveis a essa situação
pode-se citar os sistemas de controle de versão (como o cvs), sistemas de compilação automática
(make), sistemas de backup de dados e sistemas de banco de dados.
Agendadores de eventos: Aplicações como o cron e o at dos sistemas unix dependem do tempo
correto para funcionarem.
Criptografia: Muitas técnicas criptográficas fazem uso de estampas de tempo para os eventos e chaves
para prevenir alguns tipos de ataques. Se os computadores envolvidos não estiverem sincronizados
entre si, a autenticação e comunicação criptografada podem falhar.
Protocolos de comunicação e aplicações de tempo real: Essas aplicações, que incluem as Interfaces
Gráficas, fazem uso de filas de eventos, timeouts, timers, e outros recursos de software ligados ao
tempo. Para seu correto funcionamento é necessário garantir a monotonicidade, uma boa resolução, e
a continuidade (ausência de saltos) no tempo.
Sistemas transacionais e bancos de dados distribuídos: Dependem de relógios exatos e muitas vezes,
de sua sincronia com a hora legal. Como exemplo dessas aplicações pode-se citar o Home Banking, o
Home Broker, os sistemas EDI, etc. As bolsas de valores, por exemplo, tem horários bem definidos
de início e término do pregão. A Receita Federal aceita as declarações de Imposto de Renda
geralmente até a meia noite da data limite para a entrega.
vivaolinux.com.br/…/impressora.php?c… 1/18
13/03/2011 Sincronizando o Linux com a Hora Leg…

É importante também do ponto de vista de segurança de redes que os relógios dos computadores estejam
sincronizados. Investigações relacionadas a incidentes de segurança tornam-se impossíveis caso os servidores
envolvidos e os diversos arquivos de log discordem entre si em relação às estampas de tempo dos eventos.

O NTP

O NTP, se corretamente utilizado, é capaz de garantir as propriedades necessárias ao relógio do computador


para o bom funcionamento das aplicações. Num primeiro momento isso pode parecer algo muito simples:
"consultar o tempo em um servidor" e "ajustar o relógio local" de tempos em tempos. Mas na verdade o NTP
faz muito mais do que isso. Diversos componentes do sistema colaboram para:

Obter, à partir de diversas amostras, informações de tempo de um determinado servidor, como o


deslocamento, dispersão e variação.
Discernir, dentre um conjunto de servidores, quais fornecem o tempo correto e quais estão mentindo.
Escolher, dentre os servidores que fornecem o tempo correto, qual é a melhor referência.
Disciplinar o relógio local, descobrindo seus principais parâmetros de funcionamento e ajustando-o de
forma contínua e gradual, mesmo na ausência temporária de referências de tempo confiáveis, para que
tenha e melhor exatidão possível.
Garantir a monotonicidade do tempo.
Identificar, à partir de métodos criptográficos, servidores de tempo conhecidos e confiáveis, evitando
possíveis ataques.
Formar, em conjunto com outros servidores NTP, uma topologia simples, confiável, robusta e
escalável para a sincronização de tempo.

Topologia do NTP
Os servidores NTP formam uma topologia hierárquica, dividida em camadas ou estratos (em inglês: strata)
numerados de 0 (zero) a 16 (dezesseis). O estrato 0 (stratum 0) na verdade não faz parte da rede de
servidores NTP, mas representa a referência primária de tempo, que é geralmente um receptor do Sistema de
Posicionamento Global (GPS) ou um relógio atômico. O estrato 16 indica que um determinado servidor está
inoperante.

O estrato 0, ou relógio de referência, fornece o tempo correto para o estrato 1, que por sua vez fornece o
tempo para o estrato 2 e assim por diante. O NTP é então, simultaneamente, servidor (fornece o tempo) e
cliente (consulta o tempo), formando uma topologia em árvore.

Os tipos de associação possíveis


As relações entre os diferentes dispositivos NTP são normalmente chamadas de Associações. Elas podem
ser:

Permanentes: são criadas por uma configuração ou comando e mantidas sempre.

vivaolinux.com.br/…/impressora.php?c… 2/18
13/03/2011 Sincronizando o Linux com a Hora Leg…
Priorizáveis (preemptables): são específicas da versão 4 do NTP e criadas por uma configuração ou
comando, podem ser desfeitas no caso de haver um servidor melhor, ou depois de um certo tempo.
Efêmeras ou transitórias: são criadas por solicitação de outro dispositivo NTP e podem ser desfeitas
em caso de erro ou depois de um certo tempo.

São possíveis as seguintes associações:

Cliente - Servidor: (client - server) É uma associação permanente e a forma mais comum de
configuração. Um dispositivo faz o papel de cliente, solicitando informações sobre o tempo a um
servidor. O cliente tem conhecimento das associações com os servidores e do estado da troca de
pacotes. Outro dispositivo faz o papel de servidor, respondendo à solicitação do cliente com
informações sobre o tempo. O servidor não armazena informações sobre o diálogo com o cliente ou
sobre sua associação com o mesmo.
Modo simétrico: (symmetric mode) Dois ou mais dispositivos NTP podem ser configurados como
pares (peers), de forma que possam tanto buscar o tempo, quanto fornecê-lo, garantindo redundância
mútua. Essa configuração faz sentido para dispositivos no mesmo estrato, configurados também como
clientes de um ou mais servidores. Caso um dos pares perca a referência de seus servidores, os demais
pares podem funcionar como referência de tempo. O modo simétrico pode ser:
Ativo: O dispositivo A configura o dispositivo B como seu par (criando dessa forma uma
associação permanente). Por sua vez, o dispositivo B também configura o dispositivo A como
seu par (também cria uma associação permanente).
Passivo: O dispositivo A configura o dispositivo B como seu par (modo simétrico ativo). Mas o
dispositivo B não tem o dispositivo A na sua lista de servidores ou pares. Ainda assim, ao
receber um pacote de A, o dispositivo B cria uma associação transitória, de forma a poder
fornecer ou receber o tempo de A.

Broadcast ou Multicast: O NTP pode fazer uso de pacotes do tipo broadcast ou multicast para enviar
ou receber informações de tempo. Esse tipo de configuração pode ser vantajosa no caso de redes
locais com poucos servidores alimentando uma grande quantidade de clientes.

A Troca de Mensagens e o cálculo do


Deslocamento
As mensagens do NTP são baseadas no protocolo UDP. A troca de mensagens entre cliente e servidor
permite que o cliente descubra qual seu deslocamento (offset) em relação ao servidor, ou seja, o quanto seu
relógio local difere do relógio do servidor.

Permite também calcular o atraso ou tempo de ida e volta (RTT) entre o cliente e o servidor.

O Algoritmo de Filtro de Relógio


Através da troca de mensagens, o NTP consegue as informações de atraso e deslocamento de um servidor.

vivaolinux.com.br/…/impressora.php?c… 3/18
13/03/2011 Sincronizando o Linux com a Hora Leg…
Essa troca de mensagens não é realizada uma única vez. Ela se repete periodicamente, com o período
dinamicamente controlado pelo NTP.

É importante notar então, que não há apenas um valor de atraso e um de deslocamento para cada servidor,
mas um conjunto deles, provenientes das diversas trocas de mensagem! A partir dessa lista de valores, o
Algoritmo de Filtro de Relógio calcula então um valor único de atraso (delay), de deslocamento (offset) e de
variação (jitter) para cada servidor para ser usado pelos próximos algoritmos.

O Algoritmo de Seleção dos Relógios


Uma vez que o Algoritmo de Filtro de Relógios tenha calculado os principais parâmetros referentes a cada
servidor, é importante descobrir quais deles são confiáveis e quais não. Os servidores que têm algum erro no
tempo fornecido são chamados de relógios falsos (falsetickers, na literatura em inglês, a tradução é
aproximada). Os servidores que fornecem a hora corretamente são chamados de relógios verdadeiros
(truechimmers, em inglês, uma tradução mais literal seria algo como "badaladores verdadeiros").

A Seleção de relógios busca um intervalo de intersecção para os valores de deslocamento de cada servidor,
considerados intervalos de confiança. Os servidores cujos deslocamentos ficam fora da intersecção são
relógios falsos.

O Algoritmo de Agrupamento
O algoritmo de Agrupamento trabalha com os servidores que são relógios verdadeiros, utilizando técnicas
estatísticas, com o objetivo de selecionar os melhores dentre eles.

No processo alguns servidores são descartados, sendo chamados de relógios afastados (outlyers). Os que
permanecem são chamados de relógios sobreviventes (survivors), algumas vezes na literatura em inglês utiliza-
se candidatos (candidates) no mesmo sentido que sobreviventes, por conta do algoritmo utilizado onde, à
princípio, todos os relógios verdadeiros são candidatos, mas apenas alguns sobrevivem.

O melhor dos relógios sobreviventes é considerado como par do sistema (system peer).

O Algoritmo de Combinação de Relógios


Se o algoritmo de Agrupamento encontrar apenas um sobrevivente, ele será o par do sistema e será utilizado
como referência para ajustar o relógio local. Se um servidor for configurado como tendo preferência sobre os
demais e estiver dentre os sobreviventes, ele será considerado como par do sistema e, mesmo que existam
outros sobreviventes, estes serão ignorados. Nesses casos, o algoritmo de Combinação de Relógios não é
utilizado.

Para os demais casos o algoritmo de Combinação de Relógios calcula uma média ponderada dos
deslocamentos dos relógios, com o objetivo de aumentar a exatidão.

vivaolinux.com.br/…/impressora.php?c… 4/18
13/03/2011 Sincronizando o Linux com a Hora Leg…

Disciplina do Relógio Local


O processo de disciplina do Relógio Local controla a fase e a freqüência do relógio do sistema. Ele é
baseado na combinação de duas filosofias de controle bastante diferentes entre si: Phase Locked Loop (PLL)
e Frequency Locked Loop (FLL) (traduções desses termos são incomuns, mas poderiam ser Laço
Controlado por Fase e Laço Controlado por Freqüência). Ambas as filosofias implementam controles onde
há realimentação, ou seja, onde a informação de saída é usada novamente na entrada.

O NTP disciplina o relógio local de forma contínua, mesmo em períodos onde não é possível consultar
servidores de tempo. As características do relógio local são medidas e se tornam conhecidas do NTP, o que
torna possível que ele funcione dessa forma. O arquivo indicado pela chave driftfile (geralmente
/var/lib/ntp/ntp.drift) na configuração armazena o erro esperado de freqüência para o relógio.

Algumas características importantes desse algoritmo:

Saltos no tempo são evitados sempre que possível. O tempo é ajustado para mais ou para menos
gradualmente, variando-se a freqüência do relógio local.
Se uma diferença maior do que 128ms for detectada o NTP considera que o tempo está muito errado,
e que é necessário um salto para frente ou para trás para corrigí-lo. Contudo isso só é feito se essa
diferença maior que 128ms persistir por um período maior que 900s (15min), para evitar que
condições de congestionamento grave mas temporário na rede, que podem levar a medições erradas
de tempo, causem inadvertidamente esse tipo de salto.
Se uma diferença maior que 1000s (~16,7min) for detectada o algoritmo aborta a execução,
considerando que algo muito errado aconteceu. Se houver diferenças dessa ordem ou maiores elas
devem ser corrigidas manualmente antes de se executar o daemon NTP.

Segurança no NTP
Por segurança no contexto da Tecnologia da Informação entende-se basicamente garantir quatro
propriedades da informação: integridade, disponibilidade, autenticidade e confidencialidade.

Os algoritmos vistos anteriormente, aliados à correta configuração do sistema, com um número suficiente de
fontes de tempo com referências primárias independentes, garantem de forma satisfatória a integridade e
disponibilidade do serviço de tempo.

Os algoritmos de criptografia do NTP visam garantir a autenticidade da informação. Ou seja, têm o objetivo
de assegurar ao cliente de que o servidor é quem ele diz ser.

A confidencialidade não é considerada um problema no contexto do NTP. Ou seja, a informação de tempo


sempre trafega na rede de forma aberta, sem criptografia, mesmo quando uma assinatura cifrada é utilizada
para garantir a autenticidade da informação. Isso é dessa forma porque: o tempo é uma informação pública,
não há razão para esconder essa informação e trabalhar com a informação de tempo cifrada demandaria
tempo tanto do servidor quando do cliente e degradaria o desempenho do sistema, fazendo-o menos exato.

Existem basicamente dois métodos no NTP para realizar a autenticação, chave simétrica (symmetric key) e

vivaolinux.com.br/…/impressora.php?c… 5/18
13/03/2011 Sincronizando o Linux com a Hora Leg…
chave pública (autokey).

O projeto NTP.br

O acordo entre o ON e o NIC.br


Dada a importância da sincronização dos computadores com a hora correta, por iniciativa do Comitê Gestor
da Internet no Brasil, foi firmado um acordo o Observatório Nacional (ON) e o Núcleo de Informação e
Coordenação do .br (NIC.br).

O ON tem como atribuição legal a geração, conservação e disseminação da Hora Legal Brasileira. Rastreado
ao Bureau International des Poids et Mesures (BIPM), na França, participa do Tempo Universal
Coordenado (TUC ou UTC), juntamente com os órgãos disseminadores de tempo e freqüência dos demais
países.

Ou seja, para fins práticos a Hora Legal Brasileira é a mesma que a hora fornecida pelo Tempo Universal
Coordenado (a diferença fica na casa dos nanosegundos). Mas é o ON quem tem a responsabilidade legal no
Brasil de dizer qual é a hora certa.

Pelos termos do acordo o ON disponibiliza ao Núcleo de Informação e Coordenação do Ponto BR -


NIC.br, o sincronismo à Hora Legal Brasileira, seguro, confiável, rastreável e auditável, e o NIC.br
disponibiliza ao ON um conjunto de equipamentos necessários à manutenção da infra-estrutura de
sincronismo.

A infra estrutura do NTP.br


Os servidores públicos do NTP.br são os seguintes:

Nome Endereço
a.ntp.br 200.160.0.8
b.ntp.br 200.189.40.8
c.ntp.br 200.192.232.8

Eles são estrato 2, ou seja, estão sincronizados a outro conjunto de servidores, que não é público e que, por
sua vez, está sincronizado com relógios atômicos, de responsabilidade do Observatório Nacional.

O site do projeto: http://www.ntp.br fornece mais detalhes sobre o NTP, sobre a estrutura, e permite
monitorar o funcionamento dos servidores através de gráficos.

Instalando o NTP no Linux

vivaolinux.com.br/…/impressora.php?c… 6/18
13/03/2011 Sincronizando o Linux com a Hora Leg…

Instalação do NTP à partir dos fontes


A instalação à partir dos fontes permite trabalhar com a última versão do ntp. Permite também ter certeza de
que se está rodando o software padrão, sem modificações de terceiros. Se sua intenção for instalar um
servidor de tempo, recomendo usar os fontes.

Verifique no site do NTP http://www.ntp.org/downloads.html qual o link para o download da versão mais
recente. Na época em que esse artigo foi escrito a versão mais recente era 4.2.4p4.

Faça o download do arquivo, descompacte-o, entre na pasta criada e então rode o script de configuração,
compile e instale:

# wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2.4p4.tar.gz
# tar zxvf ntp-4.2.4p4.tar.gz
# cd ntp-4.2.4p4
# ./configure
# make
# make install

Substitua o conteúdo do arquivo de configuração padrão /etc/ntp.conf pela configuração abaixo.

# wget http://www.ntp.br/xnix/ntp.conf
# cp ./ntp.conf /etc/ntp.conf

Esse arquivo pode ser baixado do site do ntp.br:

http://www.ntp.br/xnix/ntp.conf

# "memoria" para o escorregamento de frequência do micro


# pode ser necessário criar esse arquivo manualmente com
# o comando touch ntp.drift
driftfile /etc/ntp.drift

# estatísticas do ntp que permitem verificar o histórico


# de funcionamento e gerar gráficos
statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

# servidores públicos do projeto ntp.br


server a.ntp.br iburst
server b.ntp.br iburst
server c.ntp.br iburst

# outros servidores

vivaolinux.com.br/…/impressora.php?c… 7/18
13/03/2011 Sincronizando o Linux com a Hora Leg…
# server outro-servidor.dominio.br iburst

# configurações de restrição de acesso


restrict default kod notrap nomodify nopeer

A hora do seu computador pode ser ajustada inicialmente com o seguinte comando:

# /usr/local/bin/ntpd -q -g

Isso permite que o ntp ajuste seu relógio mesmo que ele tenha um erro de tempo absurdamente alto (maior
que 16 min). O daemon ntp pode ser executado então:

# /usr/local/bin/ntpd

Arquivos de inicialização apropriados podem ser criados conforme o padrão de sua distribuição.

Instalação para GNU/Linux através de pacotes


prontos
Para algumas distribuições uma das possíveis formas de instalação está indicada abaixo. Pode haver métodos
alternativos para a instalação, por isso é recomendável consultar a documentação de sua distribuição.

* Debian GNU/Linux e sistemas que usam apt (Ubuntu, Kurumin, Conectiva, etc)

# apt-get update
# apt-get install ntp

* RedHat GNU/Linux e sistemas que usam rpm (Fedora, etc):

# yum install ntp

* Gentoo GNU/Linux:

# emerge sync
# emerge ntp

* Slackware GNU/Linux:

# slackpkg update
# slackpkg install ntp

* FreeBSD e OpenBSD:

# cd /usr/ports/net/ntp
# make install

vivaolinux.com.br/…/impressora.php?c… 8/18
13/03/2011 Sincronizando o Linux com a Hora Leg…
Após instalar o ntp, crie o arquivo ntp.drift com o comando:

# touch /etc/ntp.drift

Substitua o conteúdo do arquivo de configuração padrão /etc/ntp.conf pela configuração abaixo.

# wget http://www.ntp.br/xnix/ntp.conf
# cp ./ntp.conf /etc/ntp.conf

Esse arquivo pode ser baixado do site do ntp.br:

http://www.ntp.br/xnix/ntp.conf

# "memoria" para o escorregamento de frequência do micro


# pode ser necessário criar esse arquivo manualmente com
# o comando touch ntp.drift
driftfile /etc/ntp.drift

# estatísticas do ntp que permitem verificar o histórico


# de funcionamento e gerar gráficos
statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

# servidores públicos do projeto ntp.br


server a.ntp.br iburst
server b.ntp.br iburst
server c.ntp.br iburst

# outros servidores
# server outro-servidor.dominio.br iburst

# configurações de restrição de acesso


restrict default kod notrap nomodify nopeer

Ajuste a hora do seu computador com:

# ntpd -q -g

Inicie, ou reinicie o ntpd.

Configurações adicionais

vivaolinux.com.br/…/impressora.php?c… 9/18
13/03/2011 Sincronizando o Linux com a Hora Leg…

Restringindo ainda mais o acesso


Se você estiver apenas sincronizando seu Linux e não quiser que ele transforme-se num servidor, pode mudar
a configuração de restrição de acesso para:

# configurações de restrição de acesso


restrict default kod notrap nomodify nopeer noquery noserve

A palavra chave noserve diz para o servidor não informar o tempo, e noquery para não dar outros tipos de
informação (consultas do ntpq).

Liberando o acesso para alguns hosts ou redes


Se quiser ainda liberar o acesso apenas para alguns hosts:

# configurações de restrição de acesso


restrict default kod notrap nomodify nopeer noquery noserve

# liberando para alguns hosts


restrict 10.10.0.123 kod notrap nomodify nopeer notrust
restrict 172.21.22.1 mask 255.255.255.0 kod notrap nomodify nopeer notrust

Você primeiro bloqueia tudo, depois libera para os hosts ou redes específicas.

Limitando o numero de acessos por unidade de


tempo
Se você estiver pensando em manter um servidor de tempo público, é uma boa idéia restringir o número de
consultas que um mesmo IP pode realizar por período de tempo.

Um cliente NTP convencional, bem educado e bem intencionado faz no pior caso, uma consulta a cada 64s,
e no melhor caso, uma consulta a cada 1024s. Mas há os mal escritos, mal configurados ou mal
intencionados, que abusivamente fazem consultas a cada segundo ou mais.

# configuração de limitação para consultas


discard average 2 minimum 1
restrict default limited notrap nomodify nopeer

Nesse caso vale a pena tirar o kod, o beijo da morte. Com o kod o ntp bloquearia clientes abusivos e a única
forma de desbloqueá-los seria reiniciando o serviço. Bem, não queremos clientes abusivos. Mas no caso de
incidentes não intencionados de abuso, também não queremos ficar reiniciando nosso NTP para que um
determinado cliente possa voltar a acessá-lo.

vivaolinux.com.br/…/impressora.php?c… 10/18
13/03/2011 Sincronizando o Linux com a Hora Leg…
Uma solução de compromisso é usar a palavra chave limited. No comando discard configuramos os limites,
na configuração acima, um cliente pode mandar na média até um pacote a cada 2s, com picos de um pacote
até 1s. Se mandar pacotes acima dessa taxa, não obterá respostas. É uma taxa alta, mas lembre que pode
haver clientes atrás de NAT. E também pode haver picos de utilização ao se utilizar a palavra chave iburst
para acelerar a configuração inicial de um servidor.

Configurando seus outros servidores como peers


Se você tem uma pequena rede, com mais do que 3 equipamentos, escolha 3 servidores e faça deles também
servidores NTP. Isso vai economizar sua banda Internet, mesmo que a utilização do NTP seja baixíssima; vai
também ajudar a manter os servidores públicos com uma carga aceitável; e vai melhorar a qualidade da
sincronização dos hosts de sua rede.

Vamos supor que seus servidores sejam:

serv1.suarede.com.br
serv2.suarede.com.br
serv3.suarede.com.br

Na configuração do servidor 1, coloque o servidor 2 e 3 como peers. Isso significa que eles podem tanto
consultar quanto informar o tempo entre si, e serve como configuração de redundância, caso algum deles
deixe de falar com a Internet, mas ainda converse com os outros. Analogamente configure o serv2 e 3.

Para o serv1, por exemplo, a conf. fica assim:

# servidores públicos do projeto ntp.br


server a.ntp.br iburst
server b.ntp.br iburst
server c.ntp.br iburst

# pares (modo simétrico ativo)


peer serv2.suarede.com.br
peer serv3.suarede.com.br

Outros servidores NTP públicos


Se você quiser acrescentar outros servidores à sua configuração verifique:

http://pcdsh01.on.br - Divisão do Serviço da Hora do Observatório Nacional. O ON possui um


serviço de NTP público.
http://time.pads.ufrj.br/services.html - Servidores Públicos da UFRJ
http://support.ntp.org/bin/view/Servers/WebHome - Lista oficial de servidores públicos
http://www.pool.ntp.org - Projeto que mantém um DNS pool com servidores públicos de NTP.
http://www.rnp.br/ntp/ntp-stratum2.html - Servidores Públicos da RNP

vivaolinux.com.br/…/impressora.php?c… 11/18
13/03/2011 Sincronizando o Linux com a Hora Leg…

Usando o ntpq para monitorar o NTP

O ntp traz consigo algumas ferramentas que permitem monitorar seu funcionamento. A mais importante é o
ntpq. A seguir são apresentados dois comandos do ntpq que permitem visualizar algumas variáveis
importantes do ntp:

ntpq -c pe
Uma reposta normal se parece com essa:

# ntpq -c pe
remote refid st t when poll reach delay offset jitter
==============================================================================
*ttm.nic.br .GPS. 1 u 8 16 377 0.320 -0.008 1.340
+server20.pop-df .GPS. 1 u 11 16 377 15.608 -0.002 0.491
201.63.254.68 .INIT. 16 u - 16 0 0.000 0.000 0.000
+santuario.pads. .GPS. 1 u 59 64 377 6.852 -0.002 0.045
xtime.nist.gov .ACTS. 1 u 56 64 377 282.494 -45.091 1.718
-ntp2.usno.navy. .USNO. 1 u 52 64 377 135.380 4.391 7.449
-a.ntp.br 200.160.7.192 2 u 15 16 377 0.362 0.424 0.048
-b.ntp.br 200.160.7.186 2 u 17 16 376 17.544 1.562 0.134
-c.ntp.br 200.160.7.192 2 u 10 16 377 15.680 0.393 0.012
-clock.trit.net 192.12.19.20 2 u 42 64 377 296.580 -29.083 0.574
-Stone.Rodents.M 65.71.16.189 3 u 47 64 377 249.918 -7.678 0.963
-rbi0261.giga-dn 192.53.103.104 2 u 49 64 377 262.197 18.316 0.845
-einstein.postre 66.187.233.4 2 u 43 64 377 341.553 34.962 38.449

A primeira coluna apresenta os tally codes, que significam o seguinte:

* o system peer, par do sistema, ou principal fonte de sincronização;


o o system peer, par do sistema, ou principal fonte de sincronização, mas apenas se a fonte for o sinal
de um pulso por segundo (PPS);
+ candidate, ou um relógio sobrevivente, indica que é uma boa fonte de sincronização e que está sendo
utilizada no momento, juntamente com o par do sistema, para ajustar o relógio local;
- outlyer, ou relógio afastado, indica que é uma boa fonte de sincronização, mas não sobreviveu ao
algoritmo de agrupamento, ou seja, no momento há opções melhores e ela não está sendo utilizada;
x falseticker, ou relógio falso, indica que não é uma boa fonte de sincronização, foi descartada já no
algoritmo de seleção de relógios por discordar muito das outras fontes;
. excess, excesso: a fonte foi rejeitada por não estar entre as 10 melhores;
(espaço em branco) reject, relógio rejeitado porque não responde, porque há um loop na
sincronização, ou porque ele apresenta uma distância na sincronização enorme.

A seguir são apresentados os significados das demais colunas:

remote = nome ou IP da fonte de tempo;


refid = a referência (par do sistema) à qual o servidor de tempo remoto está sincronizado;
st = o estrato da fonte de tempo;
when = quanto segundos se passaram desde a última consulta à essa fonte de tempo;
vivaolinux.com.br/…/impressora.php?c… 12/18
13/03/2011 Sincronizando o Linux com a Hora Leg…
poll = de quantos em quantos segundos essa fonte é consultada;
reach = um registrador de 8 bits que vai girando para a esquerda representado na forma octal, que
mostra o resultado das últimas 8 consultas à fonte de tempo: 377 = 11.111.111 significa que todas as
consultas foram bem sucedidas; outros número indicam falhas, por exemplo 375 = 11.111.101, indica
que a penúltima consulta falhou;
delay = atraso, ou tempo de ida e volta, em milissegundos, dos pacotes até essa fonte de tempo;
offset = deslocamento, ou quanto o relógio local tem de ser adiantado ou atrasado, em milissegundos,
para ficar igual ao da fonte de tempo;
jitter = a variação, em milissegundos, entre as diferentes medidas de deslocamento para essa fonte de
tempo.

ntpq -c rl
Uma reposta normal se parece com essa:

# ntpq -c rl status=0674 leap_none, sync_ntp, 7 events, event_peer/strat_chg,


version="ntpd 4.2.2p4@1.1585-o Fri Dec 21 12:11:30 UTC 2007 (1)",
processor="i386", system="FreeBSD/6.2-RELEASE-p9", leap=00, stratum=2,
precision=-19, rootdelay=0.190, rootdispersion=9.288, peer=55053,
refid=200.160.7.165,
reftime=cb30fba4.4923180b Thu, Jan 10 2008 18:16:36.285, poll=4,
clock=cb30fc19.0b973e9e Thu, Jan 10 2008 18:18:33.045, state=4,
offset=-0.107, frequency=31.729, jitter=0.039, noise=0.016,
stability=0.007, tai=0

Enquanto o ntpq -c pe apresenta as variáveis relacionadas a cada associação, ou seja, a cada fonte de
tempo, o ntpq -c rl apresenta as variáveis (globais) do sistema. As mais importantes estão indicadas a seguir:

version = versão do ntp;


stratum = estrato do servidor local;
precision = precisão indicada com o expoente de um número base 2;
rootdelay = atraso ou tempo de ida e volta dos pacotes até o estrato 0, em milissegundos;
rootdispersion = erro máximo da medida de offset em relação ao estrato 0, em milissegundos;
refid = o par do sistema, ou principal referência;
offset = deslocamento, quanto o relógio local tem de ser adiantado ou atrasado para chegar à hora
certa (hora igual à do estrato 0);
frequency = erro na freqüência do relógio local, em relação à freqüência do estrato 0, em partes por
milhão (PPM).

Interpretando os logs do NTP

Os principais logs do ntp são o loopstats, que apresenta as informações do loop local, ou seja, as variáveis
do sistema, e o peerstats, que apresenta as informações de cada associação.
vivaolinux.com.br/…/impressora.php?c… 13/18
13/03/2011 Sincronizando o Linux com a Hora Leg…

loopstats
Seu formato é o seguinte:

day, second, offset, drift compensation, estimated error, stability, polling interval dia, segundo, deslocamento,
escorregamento, erro estimado, estabilidade, e intervalo de consulta.

Exemplo:

54475 73467.286 -0.000057852 31.695 0.000015298 0.006470 4


54475 73548.286 -0.000084064 31.688 0.000017049 0.006471 4
54475 73682.286 -0.000077221 31.678 0.000016130 0.006988 4
54475 73698.286 -0.000077448 31.677 0.000015103 0.006550 4
54475 73761.286 -0.000083230 31.672 0.000014275 0.006376 4
54475 73889.286 -0.000059100 31.665 0.000015846 0.006487 4

peerstats
Seu formato é o seguinte:

day, second, address, status, offset, delay, dispersion, skew (variance)


dia, segundo, endereço, estado, deslocamento, atraso, dispersão, variância

Exemplo:

54475 34931.294 200.20.186.75 9074 0.009958844 0.008390600 0.000390895 0.000132755


54475 34931.301 200.192.232.43 f0f4 0.000348814 0.015550265 0.001120348 0.000023645
54475 34932.303 200.189.40.28 f0f4 0.000810708 0.017701986 0.188995109 0.000043145
54475 34934.286 200.160.0.28 f0d4 0.000332344 0.000271801 0.000620139 0.000037467
54475 34935.286 200.160.7.165 9614 0.000003557 0.000216088 0.000826694 0.000022076
54475 34935.301 200.19.119.69 9334 0.002667663 0.015740055 0.001858731 0.001733883

Gerando gráficos
A interpretação dos arquivos de log fica bastante facilitada com o uso de gráficos. E uma vez que se conhece
seu formato fica muito fácil gerá-los. Recomenda-se o uso do gnuplot.

Como exemplo, crie um arquivo chamado deslocamento.txt com o seguinte conteúdo:

set term gif


set output '| display'
set title "Deslocamento"
vivaolinux.com.br/…/impressora.php?c… 14/18
13/03/2011 Sincronizando o Linux com a Hora Leg…
plot "/var/log/ntpstats/loopstats" using 2:3 t"deslocamento" with linespoints lt rgb "#d0d0d0";

Observe que o comando plot faz referência ao arquivo loopstats, e usa suas colunas 2 e 3, 2 representa o
tempo, no dia, em segundos e é o eixo x; e 3 representa o deslocamento, em milissegundos e é o eixo y.

Execute então o seguinte comando:

# gnuplot deslocamento.txt

E pronto, como a saída esta redirecionada para display, você verá o gif gerado na tela.

Escolhendo diferentes colunas dos logs você poderá obter gráficos de outras variáveis.

A questão do horário de verão

O NTP *não* trata da questão do horário de verão. O relógio dos computadores geralmente trabalha
sincronizado com o UTC e, além disso, o Sistema Operacional sabe qual é o fuso horário adequado para
utilizar. Quando entramos ou saímos do horário de verão e relógio do computador não é alterado, somente o
fuso horário.

Use o comando zic para modificar o arquivo correspondente ao seu fuso horário:

1. Crie um arquivo com extensão .zic na pasta onde está o arquivo do fuso horário utilizado. Por exemplo, se
você utiliza Brazil/East, crie o arquivo /usr/share/zoneinfo/Brazil/verao.zic. O conteúdo é o seguinte:

Rule Brazil 2007 only - Oct 14 00:00 1 S


Rule Brazil 2008 only - Feb 17 00:00 0 -
Zone Brazil/East -3:00 Brazil BR%sT

Altere as duas primeiras linhas para refletir o ano atual. Os valores exemplificados são válidos para o horário
de verão que se inicia em 14/10/07 e termina em 17/02/08. A última linha indica qual o arquivo de fuso
horário será alterado.

2. Execute o comando zic:

# zic verao.zic

3. Verifique o arquivo do fuso horário com o comando zdump.

# zdump -v Brazil/East
Brazil/East Fri Dec 13 20:45:52 1901 UTC = Fri Dec 13 17:45:52 1901 BRT isdst=0 gmtoff=-10800
Brazil/East Sat Dec 14 20:45:52 1901 UTC = Sat Dec 14 17:45:52 1901 BRT isdst=0 gmtoff=-10800
Brazil/East Sun Oct 14 02:59:59 2007 UTC = Sat Oct 13 23:59:59 2007 BRT isdst=0 gmtoff=-10800
Brazil/East Sun Oct 14 03:00:00 2007 UTC = Sun Oct 14 01:00:00 2007 BRST isdst=1 gmtoff=-7200
Brazil/East Sun Feb 17 01:59:59 2008 UTC = Sat Feb 16 23:59:59 2008 BRST isdst=1 gmtoff=-7200
Brazil/East Sun Feb 17 02:00:00 2008 UTC = Sat Feb 16 23:00:00 2008 BRT isdst=0 gmtoff=-10800
Brazil/East Mon Jan 18 03:14:07 2038 UTC = Mon Jan 18 00:14:07 2038 BRT isdst=0 gmtoff=-10800
Brazil/East Tue Jan 19 03:14:07 2038 UTC = Tue Jan 19 00:14:07 2038 BRT isdst=0 gmtoff=-10800

vivaolinux.com.br/…/impressora.php?c… 15/18
13/03/2011 Sincronizando o Linux com a Hora Leg…

O daemon crond deve ser reiniciado após a entrada ou saída do horário de verão.

No site do CAIS/RNP há também informações sobre como se fazer essas alterações. Se restarem dúvidas,
consulte:

http://www.rnp.br/cais/alertas/2007/cais-alr-20071005.html

Se você procura mais informações sobre o horário de verão, verifique o site da Agência Nacional da Energia
Elétrica e o site do Observatório Nacional.

Não use ntpdate no cron: use o daemon ntpd!

Utilize o ntpd. Com ele consegue-se uma exatidão bem maior do que com o ntpdate, mesmo quando o
computador fica temporariamente sem acesso aos servidores. O daemon é leve e a banda utilizada é
extremamente baixa.

Caso o relógio do seu computador esteja muito desajustado pode-se utilizar o ntpdate para ajustar o mesmo,
antes de se rodar o daemon NTP. Mas mesmo nesse caso é preferível utilizar o ntpd com as opções -q e -g,
como explicado anteriormente neste tutorial.

O ntpdate não é mais oficialmente suportado e deve ser retirado da distribuição em breve.

Concluindo e apresentando referências para consulta

Bem, espero ter deixado claro nesse artigo:

que a sincronização dos computadores é muito importante;


que o ntp é fácil e seguro de usar, mas tem por trás de si um algoritmo complexo e robusto,
responsável por manter o tempo certo;
que há servidores públicos fornecendo oficialmente a hora legal brasileira, e que é uma boa alternativa
usá-los;
como realizar uma instalação e configuração funcionais do NTP no Linux;
como usar algumas ferramentas para verificar a qualidade da sincronização, como o ntpq e gráficos
dos logs.

A principal referência desse artigo é o site do ntp.br:

http://www.ntp.br

Alguns itens do artigo são resumos de partes desse site, feitos com a devida permissão.

Outras referências para consulta são:

vivaolinux.com.br/…/impressora.php?c… 16/18
13/03/2011 Sincronizando o Linux com a Hora Leg…
http://www.ntp.org
Página oficial do projeto NTP.

http://www.eecis.udel.edu/~mills/ntp.html
Página do projeto NTP mantida por David Mills.

http://www.eecis.udel.edu/~mills/ntp/html/index.html
Documentação da implementação de referência oficial do NTP, mantida por David Mills.

http://www.ntp.org/ntpfaq
FAQ e HOWTO do NTP.

http://support.ntp.org
NTP Public Services Project, é um site wiki com documentação construída pela comunidade:
support.ntp.org/bin/view/Support/WebHome. A página também lista servidores ntp públicos:
support.ntp.org/bin/view/Servers/WebHome.

http://www.isc.org
Página do Internet Systems Consortium. O ISC mantém o NTP Public Services Project.

http://www.pool.ntp.org
Projeto que mantém um DNS pool com servidores públicos de NTP.

http://www.ijs.si/time
Página do Jožef Stefan Institute, na Eslovênia, sobre NTP. Documentação de ótima qualidade.

http://www.meinberg.de/english/sw/ntp.htm
Instalador do NTP (implementação de referência) para Windows.

ftp://ftp.registro.br/rfc/rfc1305
Especificação do protocolo NTP versão 3. Não existe uma especificação da versão 4 do protocolo.

ftp://ftp.registro.br/rfc/rfc4330
Especificação do protocolo SNTP versão 4.

http://www.ietf.org/html.charters/ntp-charter.html
Esta página com o link para a versão mais recente do draft do protocolo NTP versão 4.

http://support.ntp.org/bin/view/IETF/WebHome
Grupo de trabalho do IETF para a criação da especificação do NTP versão 4.

http://www.vivaolinux.com.br/artigo/Sincronizando-o-Linux-com-a-Hora-Legal-Brasileira-usando-o-NTP.br

Voltar para o site

vivaolinux.com.br/…/impressora.php?c… 17/18
13/03/2011 Sincronizando o Linux com a Hora Leg…

vivaolinux.com.br/…/impressora.php?c… 18/18