Eu vi a discussão que surgiu lá pelo dia 12 sobre sincronização de hora com servidores NTP e queria ter feito alguns testes no fim-de-semana passado pra entender em definitivo qual era a real desse negócio, mas logo na sexta-feira 13 rompeu a fibra aqui na minha rua e só resolveram nesta terça-feira última.
Pois agora consegui fazer os testes e me espantei com o que vi de regras de firewall (tão fazendo até DPI checando versão do NTP, pelo visto

).
Primeiro, suporte a NTS não parece fazer diferença nenhuma. O NTS só usa TCP na porta 4460 ou 443 pra troca de chaves. A sincronização em si ainda acontece com NTP via UDP na porta 123 (a especificação do NTS até prevê a possibilidade do servidor sinalizar uma porta diferente durante a troca de chaves, mas os servidores que testei com NTS -
time.cloudflare.com e stratum 1 do
NTP.br - usam a porta 123 padrão, mesmo, e isso parece ser o mais comum entre servidores que suportam NTS). Logo, com NTS ou sem NTS, ainda se está sujeito às mesmas regras de firewall da Vivo.
Segundo, a Vivo parece manter uma lista de endereços IPv4 de servidores NTP whitelistados (somente sob determinadas situações - explico mais adiante). Nos meus testes limitados, só consegui determinar que todos (menos 1) dos servidores do
NTP.br estão whitelistados:
200.160.0.8 (a.ntp.br) - Ok
200.189.40.8 (b.ntp.br) - Ok
200.192.232.8 (c.ntp.br) - Ok
200.160.7.186 (a.st1.ntp.br) - Ok
201.49.148.135 (b.st1.ntp.br) - Ok
200.186.125.195 (c.st1.ntp.br) - Ok
200.20.186.76 (d.st1.ntp.br) - Ok
200.160.7.197 (gps.ntp.br) - Ok
200.160.7.193 (gps.ntp.br) - Não ok - Provavelmente não foi whitelistado por não constar no site do NTP.br
Quanto às regras de firewall implementadas, observei o seguinte:
Obs.: todas as notas abaixo levam em consideração a perspectiva do cliente (no caso, do meu roteador)
- IPv4
- De/para IPs de servidores NTP whitelistados pela Vivo
- NTP versão 3
- Permite requisições NTP (UDP outbound) com porta origem 123 e porta destino 123. Também permite a respectiva resposta NTP (UDP inbound), que igualmente tem porta origem 123 e porta destino 123. Esta regra acaba sendo a mais importante para quem usa Windows (descrevo mais sobre isso mais adiante)
- Parece bloquear demais requisições NTP (UDP outbound) com porta destino 123 e porta origem diferente de 123 e/ou respostas NTP (UDP inbound) com porta origem 123 e porta destino diferente de 123
- NTP versão 4
- Permite requisições NTP (UDP outbound) com porta destino 123 e porta origem diferente de 123. Também permite a respectiva resposta NTP (UDP inbound), que tem porta origem 123 e porta destino diferente de 123
- Parece bloquear demais requisições NTP (UDP outbound) com porta destino 123 e porta origem 123 e/ou respostas NTP (UDP inbound) com porta origem 123 e porta destino 123
- De/para demais IPs
- NTP versão 3
- Parece bloquear todas requisições NTP (UDP outbound) com porta destino 123 e porta origem qualquer e/ou respostas NTP (UDP inbound) com porta origem 123 e porta destino qualquer. Ou seja, parece bloquear tudo que for NTP versão 3 que não envolva os IPs whitelistados
- NTP versão 4
- Permite requisições NTP (UDP outbound) com porta destino 123 e porta origem diferente de 123. Também permite a respectiva resposta NTP (UDP inbound), que tem porta origem 123 e porta destino diferente de 123
- Parece bloquear demais requisições NTP (UDP outbound) com porta destino 123 e porta origem 123 e/ou respostas NTP (UDP inbound) com porta origem 123 e porta destino 123
- IPv6
- Parece simplesmente bloquear pacotes UDP inbound com porta destino 123
Nesse post aqui eu já tinha deixado meu rant sobre a Vivo bloquear indiscriminadamente pacotes ICMP Destination Unreachable em IPv4. Agora isso só reforça um dos motivos pra quem é cliente da Vivo adotar IPv6 de vez (com dual-stack, claro). Se livrar das gambiarras do passado com IPv4 e usufruir de regras de firewall muito mais sensatas em IPv6.
A
RFC 5905 do NTP versão 4 é de junho de 2010. ntpd e chrony já suportam NTP versão 4 desde antes da
RFC 5905 ser publicada, enquanto o timesyncd já nasceu com suporte a NTP versão 4. Então a maioria das plataformas que vemos por aí já possuem implementações maduras e conseguem driblar algumas dessas restrições malucas da Vivo no IPv4 (se usar uma porta diferente de 123 no lado do cliente, claro). E se usar IPv6, também dribla algumas dessas restrições (de novo, desde que use uma porta diferente de 123 no lado do cliente). Deve ser por isso que eu, particularmente, não tinha notado esses problemas todos de NTP até levantarem a discussão aqui no fórum.
A única grande m*, mesmo, é a implementação do Windows (e olha que tô falando de Windows 11 com todas atualizações em dia, hein), que insiste em usar NTP versão 3 com porta origem 123 e porta destino 123 (suporte a NTS, então, passa longe). Numa rede doméstica normal, o Windows de um cliente da Vivo só vai conseguir sincronizar o relógio se usar um dos servidores whitelistados em IPv4. Em IPv6, por usar porta origem 123 e porta destino 123, o Windows não vai conseguir sincronizar o relógio com nenhum servidor (pois vai sempre ser barrado pelas regras de firewall da Vivo) e vai sempre fazer fallback para IPv4 no caso do NTP.
Agora já consigo escutar alguém falando "mas eu uso o pool.ntp.org no Windows e tá sincronizando o relógio". Isso acontece pois entre os IPs ofertados pelo pool.ntp.org (também br.pool.ntp.org, etc), estão alguns IPs do próprio
NTP.br. Então quando a gente escuta aqueles relatos conflitantes de "funcionou com pool.ntp.org" e "não funcionou com pool.ntp.org", tudo indica que é só uma questão de qual IP do pool que o Windows acabou usando naquele momento. Agora, no momento que escrevo, o
NTP Pool Project diz ter 20 servidores IPv4 ativos no Brasil (mas só alguns desses são os IPs do
NTP.br whitelistados pela Vivo).
Dá pra melhorar um pouco a situação do Windows e escapar da whitelist adicionando uma regra de Source NAT no IPv6 (se o roteador permitir), fazendo com que o Windows consiga sincronizar o relógio com qualquer servidor NTP com suporte a IPv6 (time.google.com, time.cloudflare.com, a.ntp.br, b.ntp.br, c.ntp.br, a.st1.ntp.br, gps.ntp.br, etc).
Código:
action=src-nat chain=srcnat out-interface-list=wan-interface-list protocol=udp src-port=123 to-ports=49152-65535
Agora deixando de falar de Windows, pensando na figura geral, acabei configurando a mesma regra de Source NAT pra IPv4 também. Me abre a possibilidade de usar qualquer servidor NTP sem cair em bloqueios da Vivo (desde que o cliente use NTP versão 4).