説明
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.
}
// ...
データベース
サポートされているデータベースは、City
や Enterprise
などの都市スキーマを使用します。異なるスキーマを持つ他のデータベースタイプはまだサポートされていません。
無料のパブリック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 | 南アメリカ |