coredns/plugin/geoip
Sven Nebel 21f1207afe
Create geoip plugin (#4688)
* 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>
2021-07-14 09:25:30 +02:00
..
testdata Create geoip plugin (#4688) 2021-07-14 09:25:30 +02:00
city.go Create geoip plugin (#4688) 2021-07-14 09:25:30 +02:00
geoip.go Create geoip plugin (#4688) 2021-07-14 09:25:30 +02:00
geoip_test.go Create geoip plugin (#4688) 2021-07-14 09:25:30 +02:00
README.md Create geoip plugin (#4688) 2021-07-14 09:25:30 +02:00
setup.go Create geoip plugin (#4688) 2021-07-14 09:25:30 +02:00
setup_test.go Create geoip plugin (#4688) 2021-07-14 09:25:30 +02:00

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