No artigo anterior falamos sobre geofeed, RFC 8805, RFC 9632, RDAP e por que isso importa para provedores.
Agora vamos para a prática.
A ideia aqui é montar um exemplo simples de publicação de geofeed usando o Registro.br, com arquivo CSV publicado em HTTPS e validação via WHOIS e RDAP.
Para não usar nenhum bloco real, os exemplos abaixo usam blocos reservados para teste e documentação. Em produção, naturalmente, você deve substituir pelos blocos reais do ASN.
Cenário de exemplo
Vamos imaginar que o provedor tenha um bloco IPv4 /22 e use cada /24 em uma cidade diferente.
Para o exemplo IPv4, vamos usar:
198.18.0.0/22
Esse bloco faz parte de um espaço reservado para testes/benchmarking. Ele não deve ser usado em produção na Internet. Aqui ele serve apenas para deixar o exemplo com cara de operação real, sem expor prefixo.
198.18.0.0/24 Apucarana - PR
198.18.1.0/24 Londrina - PR
198.18.2.0/24 Sao Paulo - SP
198.18.3.0/24 Porto Alegre - RS
No IPv6, vamos usar o bloco de documentação:
2001:db8::/32
E separar em /40:
2001:db8:0000::/40 Apucarana - PR
2001:db8:0100::/40 Londrina - PR
2001:db8:0200::/40 Sao Paulo - SP
2001:db8:0300::/40 Porto Alegre - RS
Essa abordagem fica mais próxima do mundo real: um bloco maior cadastrado e, dentro dele, divisões por cidade ou região.
Um arquivo por bloco
Por enquanto, o Registro.br mantém uma política mais restrita para publicação de geofeed.
Na prática, o caminho mais seguro é trabalhar com um arquivo por bloco cadastrado, contendo apenas o próprio bloco ou sub-blocos dele.
Então, se o bloco cadastrado é:
198.18.0.0/22
faz sentido ter um único arquivo para esse /22, contendo os /24 internos:
geofeeds_198.18.0.0_22.csv
Conteúdo:
198.18.0.0/24,BR,BR-PR,Apucarana,
198.18.1.0/24,BR,BR-PR,Londrina,
198.18.2.0/24,BR,BR-SP,Sao Paulo,
198.18.3.0/24,BR,BR-RS,Porto Alegre,
Perceba o ponto principal: todas as linhas estão dentro do bloco 198.18.0.0/22.
Isso é diferente de misturar blocos independentes no mesmo arquivo.
Por exemplo, se você tivesse dois blocos diferentes cadastrados no Registro.br, como:
198.18.0.0/22
198.18.8.0/22
não seria uma boa ideia colocar tudo no mesmo CSV neste momento. O mais seguro seria criar um arquivo para cada bloco.
Arquivo IPv6
Para o IPv6, seguindo a mesma lógica, o bloco cadastrado seria:
2001:db8::/32
O arquivo poderia se chamar:
geofeeds_2001-db8_32.csv
Conteúdo:
2001:db8:0000::/40,BR,BR-PR,Apucarana,
2001:db8:0100::/40,BR,BR-PR,Londrina,
2001:db8:0200::/40,BR,BR-SP,Sao Paulo,
2001:db8:0300::/40,BR,BR-RS,Porto Alegre,
Aqui também vale a mesma regra: os /40 estão dentro do /32.
Em um provedor real, a granularidade pode variar. Você pode usar /40, /44, /48 ou outro tamanho, dependendo de como o IPv6 foi planejado. O importante é que o geofeed represente a operação de forma coerente e não tente ser mais preciso do que a rede realmente permite.
Formato correto do CSV
A RFC 8805 define o formato base do geofeed [1]:
ip_prefix,alpha2code,region,city,postal_code
Mas no arquivo publicado, normalmente você não coloca cabeçalho.
ip_prefix,alpha2code,region,city,postal_code
198.18.0.0/24,BR,BR-PR,Apucarana,
Faça assim:
198.18.0.0/24,BR,BR-PR,Apucarana,
Alguns detalhes importantes:
O arquivo deve estar em UTF-8.
O prefixo precisa estar em formato CIDR.
O país do Brasil é BR.
O estado precisa seguir ISO 3166-2. Paraná é BR-PR, São Paulo é BR-SP, Rio Grande do Sul é BR-RS.
A cidade não deve conter vírgula.
O campo de código postal deve ficar vazio, mas a vírgula final deve permanecer.
Onde consultar os códigos dos estados
Para o campo de região, use ISO 3166-2.
BR-PR Paraná
BR-SP São Paulo
BR-RS Rio Grande do Sul
BR-SC Santa Catarina
BR-MG Minas Gerais
BR-RJ Rio de Janeiro
BR-DF Distrito Federal
A fonte oficial é a ISO Online Browsing Platform [4].
Para consulta rápida, a página ISO 3166-2:BR também lista os códigos dos estados brasileiros [5].
Publicando o arquivo
Você pode publicar o CSV no próprio site do provedor, em um servidor web, em um bucket público ou usando GitHub Pages.
O ponto principal é que a URL precisa baixar o arquivo diretamente.
Exemplo para IPv4:
https://geo.seuprovedor.com.br/geofeeds_198.18.0.0_22.csv
Exemplo para IPv6:
https://geo.seuprovedor.com.br/geofeeds_2001-db8_32.csv
Ou, usando GitHub Pages:
https://usuario.github.io/geofeeds/geofeeds_198.18.0.0_22.csv
https://usuario.github.io/geofeeds/geofeeds_2001-db8_32.csv
Cuidado com links do tipo:
https://github.com/usuario/geofeeds/blob/main/geofeeds_198.18.0.0_22.csv
Esse link abre uma página HTML do GitHub, não o arquivo diretamente.
Para o Registro.br, a URL precisa entregar o CSV direto.
Exemplo com GitHub Pages
Um caminho simples para laboratório ou pequenos provedores é usar GitHub Pages.
O fluxo é:
- criar uma conta no GitHub;
- criar um repositório chamado
geofeeds; - criar o arquivo
geofeeds_198.18.0.0_22.csv; - colocar dentro dele o conteúdo CSV;
- habilitar GitHub Pages no repositório;
- acessar a URL pública gerada.
198.18.0.0/24,BR,BR-PR,Apucarana,
198.18.1.0/24,BR,BR-PR,Londrina,
198.18.2.0/24,BR,BR-SP,Sao Paulo,
198.18.3.0/24,BR,BR-RS,Porto Alegre,
A URL final poderia ficar assim:
https://usuario.github.io/geofeeds/geofeeds_198.18.0.0_22.csv
Se ao abrir essa URL o navegador baixar ou mostrar somente o conteúdo CSV, está no caminho certo.
Se abrir uma página do GitHub, com layout, botões, menu e preview, está errado.
Content-Type
O Registro.br pode validar o tipo de conteúdo publicado.
O ideal é que o servidor responda com:
Content-Type: text/csv
ou:
Content-Type: application/geofeed+csv
A RFC 9877 registra o tipo application/geofeed+csv para arquivos geofeed [3].
curl -I https://usuario.github.io/geofeeds/geofeeds_198.18.0.0_22.csv
Exemplo de resposta esperada:
HTTP/2 200
content-type: text/csv
ou:
HTTP/2 200
content-type: application/geofeed+csv
Validando a sintaxe
Antes de cadastrar no Registro.br, vale passar o arquivo em um validador.
https://opengeofeed.org/validator
Ele ajuda a pegar erro bobo, como:
- campo faltando;
- estado em formato errado;
- prefixo inválido;
- CSV malformado;
- linha duplicada;
- país inválido;
- uso incorreto de região.
198.18.0.0/24,BR,PR,Apucarana
Problemas:
PRdeveria serBR-PR;- faltou a vírgula final;
- o número de campos ficou inconsistente.
198.18.0.0/24,BR,BR-PR,Apucarana,
Configurando no Registro.br
Depois de publicar e validar o arquivo, acesse o portal do Registro.br.
- entrar no portal;
- acessar a área de Numeração;
3. selecionar o bloco e abrir a opção Configurar Geofeed;
4. informar a URL HTTPS do arquivo;
Deixe uma resposta