* Create geoip plugin Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Update plugin/geoip/README.md Co-authored-by: Miek Gieben <miek@miek.nl> Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Update plugin/geoip/README.md Co-authored-by: Miek Gieben <miek@miek.nl> Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Update plugin/geoip/README.md Co-authored-by: Miek Gieben <miek@miek.nl> Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Move DBFILE bullet below example Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Update plugin/geoip/README.md Co-authored-by: Miek Gieben <miek@miek.nl> Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Remove plugin name test case Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Remove languages option Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Update free database link Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Remove last language bits Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Use 127.0.0.1 as probing IP Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Update plugin/geoip/geoip.go Co-authored-by: Miek Gieben <miek@miek.nl> Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Update plugin/geoip/geoip.go Co-authored-by: Miek Gieben <miek@miek.nl> Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Use relative path for fixtures dir Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Set names with default string zero value Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Remove unused db types Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Remove non city databases in testdata Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Remove create databases main Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Fix metadata label format test case Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Fix import path block Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * go fmt after changes Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Tidy up go.mod and go.sum Signed-off-by: Sven Nebel <nebel.sven@gmail.com> * Add plugin to CODEOWNERS Signed-off-by: Sven Nebel <nebel.sven@gmail.com> Co-authored-by: Miek Gieben <miek@miek.nl> |
||
---|---|---|
.. | ||
testdata | ||
city.go | ||
geoip.go | ||
geoip_test.go | ||
README.md | ||
setup.go | ||
setup_test.go |
geoip
Name
geoip - Lookup maxmind geoip2 databases using the client IP, then add associated geoip data to the context request.
Description
The geoip plugin add geo location data associated with the client IP, it allows you to configure a geoIP2 maxmind database to add the geo location data associated with the IP address.
The data is added leveraging the metadata plugin, values can then be retrieved using it as well, for example:
import (
"strconv"
"github.com/coredns/coredns/plugin/metadata"
)
// ...
if getLongitude := metadata.ValueFunc(ctx, "geoip/longitude"); getLongitude != nil {
if longitude, err := strconv.ParseFloat(getLongitude(), 64); err == nil {
// Do something useful with longitude.
}
} else {
// The metadata label geoip/longitude for some reason, was not set.
}
// ...
Databases
The supported databases use city schema such as City
and Enterprise
. Other databases types with different schemas are not supported yet.
You can download a free and public City database.
Syntax
geoip [DBFILE]
- DBFILE the mmdb database file path.
Examples
The following configuration configures the City
database.
. {
geoip /opt/geoip2/db/GeoLite2-City.mmdb
metadata # Note that metadata plugin must be enabled as well.
}
Metadatada Labels
A limited set of fields will be exported as labels, all values are stored using strings regardless of their underlying value type, and therefore you may have to convert it back to its original type, note that numeric values are always represented in base 10.
Label | Type | Example | Description |
---|---|---|---|
geoip/city/name |
string |
Cambridge |
Then city name in English language. |
geoip/country/code |
string |
GB |
Country ISO 3166-1 code. |
geoip/country/name |
string |
United Kingdom |
The country name in English language. |
geoip/country/is_in_european_union |
bool |
false |
Either true or false . |
geoip/continent/code |
string |
EU |
See Continent codes. |
geoip/continent/name |
string |
Europe |
The continent name in English language. |
geoip/latitude |
float64 |
52.2242 |
Base 10, max available precision. |
geoip/longitude |
float64 |
0.1315 |
Base 10, max available precision. |
geoip/timezone |
string |
Europe/London |
The timezone. |
geoip/postalcode |
string |
CB4 |
The postal code. |
Continent Codes
Value | Continent (EN) |
---|---|
AF | Africa |
AN | Antarctica |
AS | Asia |
EU | Europe |
NA | North America |
OC | Oceania |
SA | South America |