描述
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
: 選用。使用 EDNS0 子網路(如果存在)進行地理 IP 定位,而不是 DNS 請求的來源 IP。這有助於透過中介 DNS 解析器識別最近的來源 IP 位址,並且也讓地理 IP 測試變得容易:dig +subnet=1.2.3.4 @dns-server.example.com www.geo-aware.com
。注意: 由於安全原因,遞迴 DNS 解析器可能會遮蔽用戶端 IP 位址的一些位元,這可能會導致地理 IP 解析不準確。
標準中沒有定義遮罩大小,但有一些範例:RFC 7871 的範例 隱藏了 IPv6 來源位址的最後 72 位元,而 NS1 說明中心 提及 啟用 ECS 的 DNS 解析器僅發送來源 IPv4 位址的前三個八位位元組(例如 /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
中定義的區域接收答案。請注意,以下兩個 example.com
伺服器區塊的順序很重要;預設的無檢視伺服器區塊必須是最後一個。
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 |
字串 |
劍橋 |
英文城市名稱。 |
geoip/country/code |
字串 |
GB |
國家/地區 ISO 3166-1 代碼。 |
geoip/country/name |
字串 |
英國 |
英文國家/地區名稱。 |
geoip/country/is_in_european_union |
布林值 |
false |
true 或 false 。 |
geoip/continent/code |
字串 |
EU |
請參閱 洲代碼。 |
geoip/continent/name |
字串 |
歐洲 |
英文洲名稱。 |
geoip/latitude |
float64 |
52.2242 |
10 進制,最大可用精度。 |
geoip/longitude |
float64 |
0.1315 |
10 進制,最大可用精度。 |
geoip/timezone |
字串 |
歐洲/倫敦 |
時區。 |
geoip/postalcode |
字串 |
CB4 |
郵遞區號。 |
洲代碼
值 | 洲 (EN) |
---|---|
AF | 非洲 |
AN | 南極洲 |
AS | 亞洲 |
EU | 歐洲 |
NA | 北美洲 |
OC | 大洋洲 |
SA | 南美洲 |