IPv4-Geolokalisierung nach Transfer: Schritt für Schritt
Kurzantwort: Nach einem Transfer kann die IPv4-Geolokalisierung weiter das falsche Land (das frühere) anzeigen, weil Registry-Eintrag, BGP-Announcement und jede kommerzielle GeoIP-Datenbank getrennte Systeme sind. Eine Änderung in der Registry schreibt die Datenbanken nicht um. Was funktioniert: eine eigene Standortdatei veröffentlichen (einen Geofeed nach RFC 8805), im RIPE-Database-Objekt darauf verweisen und bei jedem Anbieter eine Korrektur einreichen, die Ticket-IDs aufheben. Kein Anbieter garantiert einen Termin. Geprüft am 2026-10-14. Die Registry-Schritte stehen in unserem RIPE-NCC-Transferleitfaden; dieser Beitrag beginnt, wenn der Block Ihnen gehört.
Vier Einträge, vier verschiedene Fragen
| Eintrag | Beantwortet | Wer setzt ihn | Wirkung |
|---|---|---|---|
| RIR-Eintrag (WHOIS) | Wer den Block hält | Der Inhaber, in der Registry | Identität des Inhabers. country: ist kein Standort |
| BGP-Origin und ROA | Wer ihn announct und ob das autorisiert ist | Sie, auf Ihren Routern und in RPKI | Erreichbarkeit und Routen-Gültigkeit, nicht das Land |
| Geofeed (RFC 8805) | Wo der Betreiber jedes Präfix nutzt | Sie, in einer selbst gehosteten Datei | Ein Hinweis für Anbieter, die ihn lesen |
| Kommerzielle GeoIP-Datenbank | Wo der Anbieter die Adresse vermutet | Der Anbieter, aus eigenen Quellen | Was Websites und Apps sehen |
Das Fünfte, wo Ihre Server wirklich stehen, versuchen die anderen vier abzubilden. Die Dokumentation der RIPE Database sagt, es sei nie festgelegt worden, was country: bedeutet; es lässt sich nicht zuverlässig nutzen, um IP-Adressen Ländern zuzuordnen, und das RIPE NCC erklärt, kein Geolokalisierungsanbieter zu sein. Ein Block kann auf eine Firma in einem Land eingetragen sein und in einem anderen laufen, und beide Einträge stimmen.
Diagnose mit einer Checkliste und einem Skript
| Prüfung | Befehl | Wirkung |
|---|---|---|
| CIDR und Registry-Eintrag | whois -h whois.ripe.net -r -T inetnum 192.0.2.0/24 |
Inhaber, country:, die Zeile geofeed: |
| Geofeed-Datei | curl -s <URL aus geofeed:> |
Standorthinweis für Anbieter, die ihn lesen |
| Origin-AS und ROA | RIPEstat prefix-overview, rpki-validation |
Routing und Routen-Gültigkeit, nicht das Land |
| Anbieter-Einträge | Öffentliche Abfrageseite des Anbieters | Das Land, das Ihre Nutzer und Partner sehen |
| Reverse DNS | dig -x 192.0.2.1 |
Mail-Prüfungen und lesbare Logs; keine geprüfte Quelle nutzt es für das Land |
192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24 und 2001:db8::/32 sind Dokumentationspräfixe: nur für die Syntax verwenden, denn sie werden nicht announct, und die RIPE-Abfrage liefert für sie den übergeordneten Block außerhalb von RIPE. Für die Live-Ausgabe nehmen wir das eigene Präfix von DCXV und AS204057 (ausgeführt am 2026-10-14; Linux, whois 5.6, jq 1.8; auf einem System ohne services-Datei -p 43 an whois anhängen):
$ 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
Die Registry sagt CY, weil der Inhaber eine zyprische Firma ist, die Server stehen anderswo. Origin-AS und ROA sind gültig, und ein Attribut geofeed: ist vorhanden. Diese Mischung ist normal und der Grund, warum ein Anbieter ein Land zeigen kann, das die Registry nicht nennt. DCXV veröffentlicht seine Netzdaten hier. Wenn Sie einen Block mit diesem Problem halten, können Sie eine Anfrage zum IPv4-Transfer stellen.
Das folgende Skript (Python 3.8+, nur Standardbibliothek, mit 3.14 getestet, nur Ressourcen der RIPE-Region) gibt Registry-Objekt, Origin-AS, RPKI-Status und die spezifischste Geofeed-Zeile für ein Präfix aus, über die RIPE Database und RIPEstat. Wir haben es mit DCXV-Präfixen, Dokumentationspräfixen und Fehlerfällen ausgeführt; das Feed-Matching wurde zusätzlich offline an einer Beispieldatei geprüft.
#!/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])
Sie wollen valid und eine Feed-Zeile für Ihr Präfix sehen. "NO entry covers this prefix" heißt: Anbieter, die Ihren Feed lesen, überspringen den Block.
Wohin Korrekturen gehen
Nutzen Sie den aktuellen Kanal jedes Anbieters; die Korrektur bei einem behebt die anderen nicht. Dokumentation geprüft am 2026-10-14.
| Anbieter | Kanal | Was die Dokumentation sagt |
|---|---|---|
| MaxMind | Einmalformulare; GeoIP Exchange für Betreiber | Nimmt Geofeeds nach RFC 8805 und RFC 9632 an, Prüfung einmal je Werktag; kein Release-Termin |
| IPinfo | Korrekturseite; Geofeeds | Community-Beitrag (2026-02-05): zuerst Messung, Geofeeds selektiv |
| DB-IP | Report-Link im Ergebnis; Sammelmeldung per Kontaktformular | Geänderter RIR-WHOIS-Eintrag löst meist eine Aktualisierung aus; ein Geofeed ist ein weiterer Weg |
| IP2Location | Kontakt und Bericht zur Datengenauigkeit | Release-Termine je Lizenz; kein öffentliches Korrektur- oder Geofeed-Verfahren gefunden |
| IP-Meldeformular in der Search-Hilfe | Updates können über einen Monat dauern ("may take more than a month"); keine individuelle Rückmeldung |
Geofeed veröffentlichen und verlinken
Ein Geofeed ist eine CSV-Datei nach RFC 8805: ip_prefix,alpha2code,region,city. Verschachtelte Präfixe sind erlaubt, das spezifischste gewinnt. Der RFC verlangt UTF-8 und CRLF-Zeilenumbrüche, erklärt die Postleitzahl für veraltet (also weglassen) und erlaubt Konsumenten, die Daten nur als Hinweis zu behandeln. Eine minimale Datei mit Dokumentationspräfixen:
# prefix,country,region,city
192.0.2.0/24,CZ,CZ-10,Prague
2001:db8::/32,CZ,CZ-10,Prague
Hosten Sie die Datei per HTTPS und fügen Sie Ihrem inetnum oder inet6num eine Zeile geofeed: https://example.net/geofeed.csv hinzu; das Attribut ist optional und einfach. RFC 9632 weist Konsumenten an, das spezifischste Objekt mit Geofeed zu nehmen und andere Hinweise wie country: dann zu ignorieren. Er definiert auch eine optionale RPKI-Signatur für die Datei; welche Anbieter sie prüfen, haben wir nicht verifiziert. Lesen Sie nach einem Transfer das Objekt: Eine vom Verkäufer hinterlassene Zeile geofeed: zeigt auf eine Datei, die Sie nicht kontrollieren.
Ein Schrittplan für den neuen Inhaber
- Belege sammeln. Den Registry-Eintrag mit Ihnen als Inhaber, die CIDR-Liste und den Nachweis, wo die Server laufen.
- Die eigene Seite korrigieren. Zeile
geofeed:berichtigen, Datei veröffentlichen, Skript ausführen. - Pro Anbieter einreichen. Je eine Anfrage mit der Feed-URL. Nur den tatsächlichen Standort angeben: Anbieter können ihn mit eigenen Messungen abgleichen.
- Protokoll führen. Ticket-ID, Datum, Anbieter, Präfix, Antwort.
- Später erneut prüfen. Niemand verspricht einen Termin, planen Sie also keinen Start darauf.
Symptom, Ursache, Prüfung, Maßnahme
| Symptom | Mögliche Ursache | Prüfen | Maßnahme |
|---|---|---|---|
| Mehrere Anbieter zeigen das frühere Land | Kein Geofeed oder noch nicht gelesen | Das Skript: Zeile geofeed: und passender Eintrag? |
Feed veröffentlichen, dann je Anbieter eine Korrektur |
| Ein Anbieter folgt der Registry, nicht Ihrem Feed | Der Anbieter nutzt keine Feeds | Seine Dokumentation und eine Abfrage | Korrektur mit der Feed-URL senden |
| Feed ist live, alte Daten bleiben | Release-Verzug, Abruffehler oder Messung widerspricht | HTTPS erreichbar, Präfix abgedeckt, kein widersprüchlicher verschachtelter Eintrag | Anbieter fragen, Ticket behalten, später prüfen |
| Nur ein CDN, eine Bank oder ein Zahlungsdienst liegt falsch | Er nutzt eigene Daten: Cloudflare etwa aktualisiert seine Datenbank mehrmals pro Woche und kann keine Übereinstimmung mit anderen Anbietern garantieren; Risiko-Engines gewichten ggf. weitere Signale | Fragen, welche Quelle er verwendet | Diese Quelle korrigieren, dann den Dienst informieren |
| Land stimmt, Stadt falsch | Im Feed fehlt die Stadt, oder die Messung weicht ab | Die Spalte city im Feed | Region und Stadt ergänzen, dann erneut anfragen |

Das Risiko vor dem Kauf abschätzen
Blacklists und Missbrauch stehen in der Due-Diligence-Checkliste; hier geht es nur um Geolokalisierung. Fragen Sie das Präfix jetzt bei zwei oder drei Anbietern ab, lesen Sie im inetnum das country: und jede URL geofeed: und klären Sie, wer diese Datei kontrolliert. Vereinbaren Sie im Vertrag, dass der Verkäufer den Feed-Verweis beim Closing übergibt oder entfernt.
Nächster Schritt
Unklar, wo die Lücke liegt? Eine Anfrage zum IPv4-Transfer stellen oder an ipv4@dcxv.com schreiben, mit Präfix und Symptom. Wir versprechen nicht, wann ein Anbieter aktualisiert.
