Corregir la geolocalización IPv4 tras una transferencia

Corregir la geolocalización IPv4 tras una transferencia

Corregir la geolocalización IPv4 tras una transferencia

Respuesta rápida: tras una transferencia, la geolocalización IPv4 puede seguir mostrando el país equivocado (el anterior) porque el registro, el anuncio BGP y cada base de datos GeoIP comercial son sistemas separados. Cambiar el registro no reescribe las bases. Lo que funciona es publicar su propio archivo de ubicación (un geofeed según RFC 8805), referenciarlo desde su objeto de la RIPE Database y enviar una corrección a cada proveedor, guardando los identificadores de ticket. Ningún proveedor garantiza una fecha. Comprobado el 2026-10-14. Los pasos de registro están en nuestra guía de transferencias de RIPE NCC; este artículo empieza cuando el bloque ya es suyo.

Cuatro registros, cuatro preguntas distintas

Registro Responde a Quién lo fija Qué puede afectar
Registro RIR (WHOIS) Quién posee el bloque El titular, en el registro La identidad del titular. country: no es una ubicación
Origen BGP y ROA Quién lo anuncia y si está autorizado Usted, en sus routers y en RPKI Alcanzabilidad y validez de la ruta, no el país
Geofeed (RFC 8805) Dónde dice el operador que se usa cada prefijo Usted, en un archivo propio Una pista para los proveedores que lo leen
Base GeoIP comercial Dónde cree el proveedor que está la dirección El proveedor, con sus fuentes Lo que ven los sitios web y las apps

Lo quinto, dónde están realmente sus servidores, es lo que las otras cuatro intentan modelar. La documentación de la RIPE Database dice que nunca se ha especificado qué representa country:, así que no puede usarse de forma fiable para asignar direcciones IP a países, y RIPE NCC declara que no es un proveedor de geolocalización. Un bloque puede estar registrado a una empresa de un país y funcionar en otro, y ambos registros son correctos.

Diagnóstico con una lista y un script

Comprobación Comando Afecta a
CIDR y registro whois -h whois.ripe.net -r -T inetnum 192.0.2.0/24 Titular, country:, la línea geofeed:
Archivo geofeed curl -s <url de geofeed:> La pista de ubicación para los proveedores que lo leen
AS de origen y ROA RIPEstat prefix-overview, rpki-validation Enrutamiento y validez de la ruta, no el país
Registros de proveedores La página pública de consulta del proveedor El país que ven sus usuarios y socios
DNS inverso dig -x 192.0.2.1 Comprobaciones de correo y legibilidad de logs; ninguna fuente revisada lo usa para el país

192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24 y 2001:db8::/32 son prefijos de documentación: úselos solo para la sintaxis, porque no se anuncian y la consulta a RIPE devuelve para ellos el bloque padre ajeno a RIPE. Para la salida real usamos el prefijo propio de DCXV y AS204057 (ejecutado el 2026-10-14; Linux, whois 5.6, jq 1.8; en un sistema sin archivo services añada -p 43 a whois):

$ whois -h whois.ripe.net -r -T inetnum 178.23.189.0/24 | grep -E '^(inetnum|netname|country|geofeed)'
inetnum:        178.23.189.0 - 178.23.189.255
netname:        CY-DCXV-20210903
country:        CY
geofeed:        https://dcxv.com/geofeed.csv
$ curl -s 'https://stat.ripe.net/data/prefix-overview/data.json?resource=178.23.189.0/24' | jq -c '.data.asns'
[{"asn":204057,"holder":"DCXV-AS DCXV INTERNATIONAL LTD"}]
$ curl -s 'https://stat.ripe.net/data/rpki-validation/data.json?resource=204057&prefix=178.23.189.0/24' | jq -r '.data.status'
valid

El registro dice CY porque el titular es una empresa chipriota, mientras que los servidores están en otro sitio. El AS de origen y la ROA son válidos y hay un atributo geofeed:. Esa mezcla es normal y por eso un proveedor puede mostrar un país que el registro no indica. DCXV publica aquí los datos de su red. Si tiene un bloque con este problema, puede enviarnos una consulta sobre la transferencia IPv4.

El script siguiente (Python 3.8+, solo biblioteca estándar, probado en 3.14, solo recursos de la región RIPE) imprime el objeto de registro, el AS de origen, el estado RPKI y la línea de geofeed más específica para un prefijo, con la RIPE Database y RIPEstat. Lo ejecutamos con prefijos de DCXV, prefijos de documentación y casos de error; la coincidencia con el feed se comprobó además sin conexión con un archivo de ejemplo.

#!/usr/bin/env python3
"""geocheck.py PREFIX - registry country, origin ASN, RPKI status and geofeed line for a prefix.
Python 3.8+, standard library only. Data: RIPE Database REST API and RIPEstat (RIPE region only)."""
import csv, io, ipaddress, json, sys, time, urllib.error, urllib.parse, urllib.request

def get(url):
    req = urllib.request.Request(url, headers={'Accept': 'application/json', 'User-Agent': 'geocheck/1.0'})
    for attempt in range(4):
        try:
            with urllib.request.urlopen(req, timeout=20) as r:
                return r.read(5_000_000).decode('utf-8-sig', 'replace')  # cap the read at 5 MB
        except OSError as e:  # includes HTTP 429 and connection resets
            if isinstance(e, urllib.error.HTTPError) and 400 <= e.code < 500 and e.code != 429:
                sys.exit('request refused for %s: %s' % (url, e))  # retrying a 4xx will not help
            if attempt == 3:
                sys.exit('network error for %s: %s' % (url, e))
            time.sleep(2 ** attempt)

def stat(call, **q):
    return json.loads(get('https://stat.ripe.net/data/%s/data.json?%s' % (call, urllib.parse.urlencode(q))))['data']

def registry(net):
    # best match: the most specific inetnum / inet6num that covers the prefix
    t = 'inet6num' if net.version == 6 else 'inetnum'
    q = urllib.parse.urlencode([('query-string', str(net)), ('source', 'ripe'), ('type-filter', t),
                                ('flags', 'no-referenced'), ('flags', 'no-irt')])
    try:
        obj = json.loads(get('https://rest.db.ripe.net/search.json?' + q))['objects']['object'][0]
    except (ValueError, KeyError, IndexError):
        return None
    return {a['name']: a['value'] for a in obj['attributes']['attribute']}

def feed_match(url, net):
    # most specific feed entry that covers the prefix; RFC 8805 columns: prefix,country,region,city
    best = None
    for row in csv.reader(io.StringIO(get(url))):
        if not row or row[0].lstrip().startswith('#'):
            continue
        try:
            p = ipaddress.ip_network(row[0].strip(), strict=False)
        except ValueError:
            continue
        if p.version == net.version and net.subnet_of(p) and (best is None or p.prefixlen > best[0].prefixlen):
            best = (p, row)
    return best[1] if best else None

def main(arg):
    try:
        net = ipaddress.ip_network(arg, strict=False)
    except ValueError:
        sys.exit('usage: geocheck.py PREFIX   (for example 192.0.2.0/24)')
    if net.prefixlen == net.max_prefixlen:
        sys.exit('give the prefix, not a single address: a /32 or /128 gives a misleading RPKI result')
    if net.prefixlen == 0:
        sys.exit('give a real prefix, not the default route')
    print('prefix           ', net)
    reg = registry(net)
    top = reg and ((reg.get('netname') or '').startswith('NON-RIPE-NCC-MANAGED')
                   or (reg.get('inetnum') or '').startswith('0.0.0.0 -') or reg.get('inet6num') == '::/0')
    if not reg or top:
        print('registry object   outside the RIPE NCC: query that RIR instead')
    else:
        print('registry object  ', reg.get('inetnum') or reg.get('inet6num'), '| netname', reg.get('netname'), '| status', reg.get('status'))
        print('registry country ', reg.get('country'), '(country: is not a location)')
    ov = stat('prefix-overview', resource=str(net))
    asns = [str(a['asn']) for a in ov.get('asns', [])]
    print('origin ASN       ', ', '.join('AS' + a for a in asns) or 'not announced (no origin in RIPEstat)')
    for a in asns:
        print('RPKI AS%-9s' % a, stat('rpki-validation', resource=a, prefix=str(net))['status'])
    url = None if top else (reg or {}).get('geofeed')
    if not url:
        print('geofeed          none (no geofeed: attribute on the best-match object)')
        return
    print('geofeed URL      ', url)
    if not url.startswith('https://'):
        sys.exit('geofeed URL is not https://, not fetched')
    row = feed_match(url, net)
    print('geofeed line     ', ','.join(row[:4]) if row else 'NO entry covers this prefix')

if __name__ == '__main__':
    if len(sys.argv) != 2:
        sys.exit('usage: geocheck.py PREFIX')
    main(sys.argv[1])

Lo que busca es valid y una línea del feed para su prefijo. "NO entry covers this prefix" significa que los proveedores que leen su feed omitirán el bloque.

Dónde enviar las correcciones

Use el canal actual de cada proveedor; corregir uno no corrige los demás. Documentación comprobada el 2026-10-14.

Proveedor Canal Qué dice su documentación
MaxMind Formularios puntuales; GeoIP Exchange para operadores Acepta geofeeds RFC 8805 y RFC 9632, revisados una vez por día hábil; sin fecha de publicación
IPinfo Página de correcciones; geofeeds Publicación en la comunidad (2026-02-05): primero la medición, geofeeds de forma selectiva
DB-IP Enlace de reporte en el resultado; lotes por formulario de contacto Un cambio en el WHOIS del RIR suele activar la actualización; un geofeed es otra vía
IP2Location Contacto e informe de precisión de datos Fechas de publicación por licencia; sin procedimiento público de corrección ni de geofeed
Google Formulario de reporte de IP en la Ayuda de Search Las actualizaciones pueden tardar más de un mes ("may take more than a month"); sin respuesta individual

Publique un geofeed y enlácelo

Un geofeed es un archivo CSV definido por el RFC 8805: ip_prefix,alpha2code,region,city. Se permiten prefijos anidados y gana el más específico. El RFC pide UTF-8 y saltos de línea CRLF, declara obsoleto el código postal (omítalo) y permite a los consumidores tratar los datos solo como una pista. Un archivo mínimo con prefijos de documentación:

# prefix,country,region,city
192.0.2.0/24,CZ,CZ-10,Prague
2001:db8::/32,CZ,CZ-10,Prague

Aloje el archivo en HTTPS y añada una línea geofeed: https://example.net/geofeed.csv a su inetnum o inet6num; el atributo es opcional y único. El RFC 9632 indica a los consumidores usar el objeto más específico que tenga geofeed e ignorar entonces otras pistas como country:. También define una firma RPKI opcional para el archivo; no verificamos qué proveedores la comprueban. Tras una transferencia, lea el objeto: una línea geofeed: dejada por el vendedor apunta a un archivo que usted no controla.

Plan de pasos para el nuevo titular

  1. Reúna pruebas. El registro que lo muestra como titular, la lista de CIDR y la prueba de dónde funcionan los servidores.
  2. Corrija su parte. Rectifique la línea geofeed:, publique el archivo, ejecute el script.
  3. Envíe a cada proveedor. Una solicitud por proveedor, con la URL del feed. Indique solo la ubicación real: los proveedores pueden contrastarla con sus propias mediciones.
  4. Lleve un registro. Identificador de ticket, fecha, proveedor, prefijo, respuesta.
  5. Compruebe más adelante. Nadie promete una fecha, así que no planifique un lanzamiento sobre ella.

Síntoma, causa, comprobación, acción

Síntoma Causa posible Verificar Acción
Varios proveedores muestran el país anterior Sin geofeed, o aún no leído El script: ¿línea geofeed: y fila coincidente? Publicar el feed y una corrección por proveedor
Un proveedor sigue el registro, no su feed Ese proveedor no usa feeds Su documentación y una consulta Enviar una corrección con la URL del feed
El feed está activo y siguen los datos antiguos Retraso de publicación, fallo de descarga o la medición discrepa HTTPS accesible, prefijo cubierto, sin fila anidada conflictiva Preguntar al proveedor, guardar el ticket, comprobar más tarde
Solo un CDN, banco o servicio de pagos se equivoca Usa datos propios: Cloudflare, por ejemplo, actualiza su base varias veces por semana y no puede garantizar que coincida con otros proveedores; los motores de riesgo pueden ponderar otras señales Preguntar qué fuente usa Corregir esa fuente y avisar al servicio
País correcto, ciudad errónea El feed no tiene ciudad o la medición difiere La columna city del feed Añadir región y ciudad y volver a pedir

Diagrama de flujo: cinco comprobaciones en orden ante un país erróneo en un bloque IPv4, con la acción de cada una

Estime el riesgo antes de comprar

Las listas negras y el abuso están en la checklist de due diligence; aquí solo la geolocalización. Consulte el prefijo en varios proveedores ahora, lea su inetnum (country: y cualquier URL geofeed:) y averigüe quién controla ese archivo. Acuerde en el contrato que el vendedor entregue o elimine la referencia al feed en el cierre.

Siguiente paso

¿No sabe dónde está el fallo? Envíenos una consulta sobre la transferencia IPv4 o escriba a ipv4@dcxv.com con el prefijo y el síntoma. No prometemos cuándo actualizará un proveedor.

Escrow de IPv4: calendario de pagos y checklist de hitos
ipv4brokertransfer

Escrow de IPv4: calendario de pagos y checklist de hitos

Escrow de IPv4 explicado: hitos de pago, quién confirma qué, condiciones para liberar los fondos y casos de fallo para compradores y vendedores, con ejemplo.

Corregir la geolocalización IPv4 tras una transferencia
ipv4networkingtransfer

Corregir la geolocalización IPv4 tras una transferencia

¿Su bloque IPv4 transferido sigue mostrando el país anterior? Verifique WHOIS, BGP y GeoIP, publique un geofeed y solicite correcciones a cada proveedor.

Transferencia IPv4 en RIPE: PA, PI, LIR patrocinador
ipv4ripe-ncctransferbrokernetworking

Transferencia IPv4 en RIPE: PA, PI, LIR patrocinador

Guía práctica de transferencias IPv4 en RIPE: recursos PA y PI, LIR patrocinador, documentos, escrow y pasos. Política revisada en 2026-10 con RIPE-807.

Cómo comprar direcciones IPv4: costes, reglas y riesgos
ipv4brokerpricingtransferripe-ncc

Cómo comprar direcciones IPv4: costes, reglas y riesgos

Compre direcciones IPv4 con seguridad: compra, alquiler o BYOIP, coste total, verificación del bloque, depósito y requisitos de RIPE NCC, ARIN y APNIC.

Broker IPv4, marketplace o venta directa: la más segura?
ipv4brokertransfer

Broker IPv4, marketplace o venta directa: la más segura?

Compare broker IPv4, marketplace y venta directa por rapidez, privacidad, verificación del comprador, escrow, tarifas y apoyo al traspaso, con señales de alerta.