where-is-the-iss.dedyn.io não é um site, e sim um experimento brincalhão que retorna a posição aproximada da Estação Espacial Internacional (ISS) usando apenas um registro DNS LOC
- DNS LOC é um padrão experimental da RFC 1876 que pode armazenar em um registro de domínio não só latitude e longitude, mas também altitude
- O intervalo de altitude do registro LOC vai de -100.000m a 42.849.672m, então dá para representar desde instalações subterrâneas até satélites em órbita geoestacionária
- As coordenadas da ISS são obtidas pela API da N2YO e, para se adequar ao formato LOC, a altitude precisa ser convertida de km para m, enquanto latitude e longitude precisam ser convertidas para o formato graus, minutos e segundos
- O registro é atualizado pela API da deSEC com TTL de 900 segundos, refletindo a posição mais recente a cada 15 minutos em um esquema de melhor esforço (best-effort)
Armazenando localização com registros DNS LOC
- Nomes de domínio normalmente apontam para servidores, mas servidores também são equipamentos com uma localização física dentro de um datacenter
- O registro DNS LOC é um tipo de registro DNS capaz de armazenar latitude, longitude e altitude em um domínio
- A RFC 1876 define o registro LOC como um padrão experimental
- Como um datacenter pode ficar em um prédio alto ou no subsolo, o parâmetro de altitude também foi incluído
- A altitude mínima é -100.000m
- A altitude máxima é 42.849.672m, uma faixa que também serve para satélites em órbita geoestacionária
where-is-the-iss.dedyn.io
where-is-the-iss.dedyn.io é um domínio criado para obter a posição aproximada da ISS por meio de uma consulta DNS
- Esse domínio não é um site, não responde a ping e não oferece nenhuma forma de interação além do DNS
- Usuários de Linux e Mac podem consultar o registro LOC com o seguinte comando
dig where-is-the-iss.dedyn.io LOC
- A resposta retorna latitude, longitude e altitude da ISS no formato LOC
;; ANSWER SECTION:
where-is-the-iss.dedyn.io. 1066 IN LOC 47 24 53.500 N 66 12 12.070 W 430520m 10000m 10000m 10000m
- Os registros DNS são atualizados em melhor esforço a cada 15 minutos
- O autor considera difícil encontrar uma forma de consultar registros LOC no PowerShell ou no Prompt de Comando do Windows
Obtendo os dados de localização
- A N2YO oferece um site para rastrear vários objetos em órbita e também uma API com uma camada gratuita generosa
- A ISS é consultada na API da N2YO com o ID de satélite 25544
- A resposta da API inclui campos como
satlatitude, satlongitude, sataltitude, timestamp e eclipsed
{
"info": {
"satname": "SPACE STATION",
"satid": 25544,
"transactionscount": 7
},
"positions": [
{
"satlatitude": -21.25409321,
"satlongitude": 140.3335763,
"sataltitude": 420.09,
"azimuth": 292.92,
"elevation": -70.95,
"ra": 202.69300845,
"dec": -32.16097472,
"timestamp": 1751366048,
"eclipsed": true
}
]
}
- A altitude na resposta da N2YO vem em km, mas o formato LOC exige metros
- Como latitude e longitude vêm em decimal, elas precisam ser convertidas para o formato graus, minutos e segundos (Degrees, Minutes, Seconds) antes de serem colocadas no registro LOC
Atualizando o registro LOC com a deSEC
- Não havia muitos provedores gratuitos de nomes de domínio com API para atualizar registros LOC, então a escolha foi a deSEC, uma organização beneficente de Berlim
- A deSEC oferece documentação de API
- O registro LOC inicial é adicionado ao endpoint
rrsets com curl
curl https://desec.io/api/v1/domains/where-is-the-iss.dedyn.io/rrsets/ \
--header "Authorization: Token _______" \
--header "Content-Type: application/json" --data @- <<< \
'{"type": "LOC", "records": ["40 16 25.712 S 29 32 36.243 W 427550m 0.00m 10000m 10m"], "ttl": 900}'
- Atualizar o registro é um pouco mais complicado, porque é preciso enviar um HTTP PATCH para outra URL
- A requisição PATCH precisa conter apenas os dados alterados
curl -X PATCH https://desec.io/api/v1/… \
--header "Authorization: Token _______" \
--header "Content-Type: application/json" --data @- <<< \
'{"records": ["40 16 25.712 S 29 32 36.243 W 427550m 0.00m 10000m 10m"]}'
Intervalo de atualização e limitações
- O TTL foi definido como 900 segundos
- O código roda a cada 15 minutos para atualizar o registro DNS
- Esse intervalo mantém o uso dentro dos limites de API tanto da N2YO quanto da deSEC
- Também seria possível usar um registro TXT para armazenar o horário da última atualização ou outros dados não estruturados, mas para esta demo o autor considera suficiente uma prova de conceito rápida
- Distribuir dados via registro DNS TXT pode até funcionar como uma API praticamente sem limite de requisições, sendo mais adequado para dados estáticos ou que mudam com pouca frequência
Dados curiosos que podem ser guardados no DNS
- Esta demo mostra, de forma complexa e brincalhona, que o DNS pode armazenar tipos de registro inesperados
- Assim como as coordenadas da ISS foram representadas em um registro LOC, dá para imaginar como representar também as coordenadas do Mars Rover
- Textos relacionados sobre DNS incluem BIMI - SVG in DNS TXT WTF?! e Why you can't dig Switzerland
1 comentários
Comentários do Hacker News
Outro registro, o Name Authority Pointer (NAPTR), contém o número de telefone do Johnson Space Center, em Houston
Ao consultar com
dig where-is-the-iss.dedyn.io NAPTR, aparecemE2U+voice:teletel:+12814830123Entendo os limites da API, mas um intervalo de atualização de 15 minutos parece bem longo para um objeto que dá uma volta na Terra em 90 minutos
Em média, a posição pode ficar defasada em cerca de 1/12 da circunferência da Terra, aproximadamente a distância entre Lisboa e Istambul
Se eu souber de uma forma de atualizar DNS gratuitamente em intervalos de minutos, migro com prazer
Para rastreamento preciso de posição, é definitivamente um erro grande
Li a primeira frase como “I love DNS erotica”, o que parece ser um sinal de que fiquei tempo demais dentro de casa e preciso sair para caminhar
Agora vou sair para caminhar
Talvez eu também precise de uma ducha fria
Bem legal. Acabei de adicionar também ao dns.toys
dig iss.sky +short @dns.toys[1] https://dns.toys
Excelente. Inteligente e educativo. Fiquei imediatamente pensando se daria para fazer algo parecido com o JWST
Infelizmente, o registro DNS LOC tem um limite de cerca de 42 milhões de metros, ou seja, altitude por volta de 42.000 km, enquanto o JWST fica cerca de 38 vezes mais longe, a aproximadamente 1,5 milhão de km
Portanto, não dá para representar sua posição no campo de altitude do LOC. Talvez seja possível com o Hubble
É parecido com perguntar pelas coordenadas GPS da Lua. A NASA testou em 2023 a recepção de sinais GPS fracos na Lua com o LRO, mas isso ainda não é útil para navegação
O motivo de esse método fazer sentido para a ISS é que existe um ponto subsatélite sobre a superfície da Terra. Independentemente da altitude, é possível receber sinais GPS
Além disso, TLE se aplica à ISS por ser um objeto em órbita terrestre. TLE foi projetado para definir a posição e a velocidade de satélites em órbita terrestre como elementos orbitais, para que modelos como o SGP4 os interpretem
“RFC 1876 é um padrão experimental” — que experimento duradouro
University of Warwick, January 1996
[1] https://datatracker.ietf.org/doc/html/rfc1876
Material adicional sobre registros DNS LOC: <https://www.ckdhr.com/dns-loc/>
Um método um pouco mais complexo, mas muito mais responsivo, seria apontar o registro NS de
where-is-the-iss.shkspr.mobipara o IP do seu próprio VPSDepois, é só executar um programa que escute em UDP/53 e TCP/53 e responda com pacotes DNS nos quais apenas o registro LOC e o ID da mensagem mudem dinamicamente
Não seguiria completamente a especificação DNS, mas seria suficiente para esse uso. A resposta da API poderia ser armazenada em cache para evitar limites de chamadas
Eu mesmo opero um serviço desses, e você pode testar com
2+2.op.dyn.bortzmeyer.fr/TXTouparis.now.weather.dyn.bortzmeyer.fr/TXTDNS é um armazenamento chave-valor federado, otimizado para leitura, replicado geograficamente e com consistência eventual
Mesmo olhando o RFC, não há explicação de por que isso era necessário
Fico imaginando se havia algum motivo ligado à logística de universidades ou data centers em 1996
Diz que o LOC RR pode ser usado para mapas de fluxo de backbone da USENET, um “traceroute visual” que mostra a rota geográfica de pacotes IP, aplicativos de gerenciamento de rede que geram mapas de hosts e roteadores administrados, etc.
Também não vejo por que isso não poderia ser uma string legível por humanos, como “42 Wallaby Way, Sidney”