geoip

ソースコード

geoip は、クライアントIPを使用してmaxmind geoip2データベースを検索し、関連するgeoipデータをコンテキストリクエストに追加します。

説明

geoip プラグインは、クライアントIPに関連付けられた地理位置情報を追加します。 geoIP2 maxmindデータベース を設定して、IPアドレスに関連付けられた地理位置情報を追加できます。

データは *metadata* プラグインを活用して追加され、値も同様に取得できます。例えば

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.
}
// ...

データベース

サポートされているデータベースは、CityEnterprise などの都市スキーマを使用します。異なるスキーマを持つ他のデータベースタイプはまだサポートされていません。

無料のパブリックCityデータベースをダウンロードできます。

構文

geoip [DBFILE]

または

geoip [DBFILE] {
    [edns-subnet]
}
  • DBFILE はmmdbデータベースファイルのパスです。より正確な結果を得るために、mmdbデータベースを定期的に更新することをお勧めします。

  • edns-subnet: オプション。DNSリクエストのソースIPの代わりに、EDNS0サブネット(存在する場合)をGeo IPに使用します。これは、中間DNSリゾルバーを介して最も近いソースIPアドレスを特定するのに役立ち、GeoIPテストも容易にします。dig +subnet=1.2.3.4 @dns-server.example.com www.geo-aware.com

    注意: セキュリティ上の理由から、再帰DNSリゾルバーはクライアントのIPアドレスのビット数をマスクする場合があり、GeoIP解決の精度が低下する可能性があります。

    標準では定義されたマスクサイズはありませんが、例があります。RFC 7871の例では、IPv6ソースアドレスの最後の72ビットを隠蔽し、NS1ヘルプセンターはECS対応のDNSリゾルバーはソースIPv4アドレスの最初の3オクテット(例:/24)のみを送信すると述べています。

次の設定は、City データベースを設定し、EDNS0サブネットが存在する場合はそれに基づいて地理位置情報を検索します。

. {
    geoip /opt/geoip2/db/GeoLite2-City.mmdb {
      edns-subnet
    }
    metadata # Note that metadata plugin must be enabled as well.
}

view プラグインは、geoip メタデータを選択基準として使用して、GSLB機能を提供できます。この例では、「Exampleshire」の都市からのクライアントは、example.com.exampleshire-db で定義されたゾーンから example.com の回答を受け取ります。他のすべてのクライアントは、example.com.db で定義されたゾーンから回答を受け取ります。以下の2つの example.com サーバーブロックの順序が重要であることに注意してください。デフォルトのviewlessサーバーブロックは最後になければなりません。

example.com {
    view exampleshire {
      expr metadata('geoip/city/name') == 'Exampleshire'
    }
    geoip /opt/geoip2/db/GeoLite2-City.mmdb
    metadata
    file example.com.exampleshire-db
}

example.com {
    file example.com.db
}

メタデータラベル

限られたフィールドセットがラベルとしてエクスポートされます。すべての値は、基になる値の型に関係なく文字列を使用して格納されるため、元の型に戻す必要がある場合があります。数値は常に10進数で表されることに注意してください。

ラベル 説明
geoip/city/name 文字列 Cambridge 英語での都市名。
geoip/country/code 文字列 GB ISO 3166-1 コード。
geoip/country/name 文字列 United Kingdom 英語での国名。
geoip/country/is_in_european_union 真偽値 false true または false
geoip/continent/code 文字列 EU 大陸コードを参照してください。
geoip/continent/name 文字列 Europe 英語での大陸名。
geoip/latitude float64 52.2242 10進数、利用可能な最大精度。
geoip/longitude float64 0.1315 10進数、利用可能な最大精度。
geoip/timezone 文字列 Europe/London タイムゾーン。
geoip/postalcode 文字列 CB4 郵便番号。

大陸コード

大陸 (英語)
AF アフリカ
AN 南極大陸
AS アジア
EU Europe
NA 北アメリカ
OC オセアニア
SA 南アメリカ