[Feature] Neues Modul ipinfo – self-hosted IP/Country/ASN-Lookup ohne MaxMind #17
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Motivation
Aktuell nutze ich für IP-Geolocation (Land, ASN) externe/dritte Lösungen (z.B. ipinfo.tw-Image). Das bedeutet ein zusätzlicher Container, eine zusätzliche Abhängigkeit und MaxMind als Datenquelle (Account, Lizenzbedingungen). Da varde bereits als modularer Hub für genau solche kleinen self-hosted Dienste gedacht ist (WKD, Webhook, …), passt ein IP-Info-Modul konzeptionell besser dorthin als ein separater Container.
Proposal
Ein neues Module in varde, das über HTTP die anfragende Client-IP sowie deren Land und ASN zurückgibt – ohne MaxMind, auf Basis offener, lizenzfreier Datensätze.
Alternatives Considered
Datenquelle
user-country-ipv4.csv/-ipv6.csv(Public Domain, kein Attribution-Zwang, GitHub-Releases)asnbzw.origin-asnDatensatzstart_ip,end_ip,...– sortierte, nicht überlappende RangesFunktionale Anforderungen
Lookup-Engine
sort.Search(Binärsuche) auf Start-IPuint32) / IPv6 (netip.Addr-Vergleich)HTTP-Endpoints (Namensgebung analog ipinfo.tw, damit bestehende Clients/Skripte kompatibel bleiben)
GET /ip→ Client-IP als PlaintextGET /country,/country_code,/country_nameGET /as,/asn,/as_descGET /json→ alle Felder als JSONGET /→ Plaintext-Kurzübersicht (IP, Land, AS, User-Agent)Client-IP-Ermittlung
X-Real-IP-Header (von Traefik gesetzt), Fallback aufRemoteAddrX-Forwarded-Forohne expliziten Trusted-Proxy-Check (Spoofing-Schutz)Datenaktualisierung
atomic.Pointer) – kein Neustart, keine Downtime während RefreshKonfiguration
Module-Interface)Nicht-Ziele (out of scope, v1)
Offene Fragen
/build_epoch-Äquivalent (Timestamp der geladenen Daten) mit ausgeliefert werden, um Monitoring zu ermöglichen?Akzeptanzkriterien
whois) übereinRemoteAddrfunktioniert, wennX-Real-IPfehlt