GDNSD-PLUGIN-GEOIP(8) gdnsd GDNSD-PLUGIN-GEOIP(8) (NAME) gdnsd-plugin-geoip - (GSLB) GeoIP2 (SYNOPSIS) gdnsd : plugins => { geoip => { maps => { my_prod_map => { geoip2_db => GeoIP2-City.mmdb, datacenters => [dc-03, dc-02, dc-01, dc-fail], map => { EU => { DE => [dc-03, dc-01, dc-fail], CH => [dc-01, dc-03, dc-fail] }, NA => { MX => [dc-02, dc-fail] } } }, my_auto_map => { geoip2_db => GeoIP2-Country.mmdb, datacenters => [dc1, dc2], auto_dc_coords => { dc1 => [ 38.9, -77 ], dc2 => [ 50.1, 8.7 ], } } }, resources => { prod_www => { map => my_prod_map service_types => up dcmap => { dc-01 => 192.0.2.1, dc-02 => { lb01 => 192.0.2.2, lb02 => 192.0.2.3 }, dc-03 => [ 192.0.2.4, 192.0.2.5, 192.0.2.6 ], dc-fail => last.resort.cname.example.net. } } corp_www => { map => my_auto_map dcmap => { dc1 => 192.0.2.100, dc2 => 192.0.2.101 } } } }} (RR) example.com: www 600 DYNA geoip!prod_www www-dc01 600 DYNA geoip!prod_www/dc-01 www.corp 600 DYNA geoip!corp_www (DESCRIPTION) gdnsd-plugin-geoip GeoIP2 MaxMind CNAME . IPv6 edns-client-subnet . edns-client-subnet edns-client-subnet IP (IP ) . GeoIP2 .mmdb . GeoIP1 ( .dat ) . GeoIP "nets" "nets" . ( ) . . . "map" ( ) GeoIP (supernets) . edns-client-subnet GeoIP . (PLUGIN_METAFO) gdnsd-plugin-metafo(8) geoip . geoip metafo metafo . metafo (failover) . plugin_geoip metafo . (FILE LOCATIONS) / . geoip ( /etc/gdnsd) . . - (CONFIGURATION - TOP-LEVEL) geoip ( "plugins => { geoip => { ... } }") . "undefined_datacenters_ok" . : "maps" "resources". "maps" GeoIP . "resources" CNAME . "resources" . "undefined_datacenters_ok = false" false. true geoip "map" "dcmap" . M A B C M B C "dcmap" . . !!! !!! - true << >> (City Auto Mode) . . ( ). << >> "auto_dc_limit" . - (CONFIGURATION - MAPS) "maps" . / . : "geoip2_db = GeoIP2-City.mmdb" . GeoIP2 . City Country . IP IPv4 IPv6 . . "datacenters = [ one, two, three, ... ]" . . ( ). . ( ). "ignore_ecs = true" false. "true" EDNS ( ECS) IP DNS . ECS ECS ECS ECS . IP (recursor) IP ECS ECS edns_client_subnet . "nets = { ... }" - ( ). - "network/netmask" ( ) . GeoIP (override) . IPv4- IPv6 v4compat IPv4 ( v4compat ) . IPv4 . . nets => { 10.0.0.0/8 => [ dc1, dc2 ], 192.0.2.128/25 => dc3 2001:DB8::/32 => [ dc4, dc5, dc6 ], } . ( ) . nets / . "nets = nets_file_name" . - . nets ( BGP) . GeoIP . "map = { ... }" - . GeoIP : . "geoip2_db" . - . ( / ) ( "[ dc03, dc01, dc04 ]") - . "default" . "datacenters" . "map" "default" . ( NXDOMAIN NODATA/NOERROR ). GeoIP2 : "AF" "AS" "NA" "SA" "EU" "OC" "AN" . ISO 3166-1 . (Subdivision) . . : . ISO 3166-2 . (City) . UTF-8 . . . . : { OC => { NZ => { OTA => [...] } } } FR : { EU => { FR => { Paris => [...] } } } - - (CONFIGURATION - MAPS - CITY AUTO MODE) << >> (City-auto-mode) "map" . "map" ( ). "auto_dc_coords" . GeoIP2 City Country . "auto_dc_coords = { ... }" - . <> . "datacenters" "[lat, lon]" . : () GeoIP2 City "auto" << >> "map" . "default" "auto" . "auto" "auto_dc_coords" () City . "auto_dc_coords" "map" / "nets" . "auto_dc_limit = N" . . . edns-client-subnet . . ( ). ( ) "auto" "datacenters" "default" . ( IPv6 GeoIP IPv4 ). (MAP TESTING) "gdnsd_geoip_test" . gdnsd geoip IP . IP . gdnsd_geoip_test(1) . - (CONFIGURATION - RESOURCES) "resources" metafo . "datacenters" metafo "map => mapname" "maps" . "dcmap" "undefined_datacenters_ok" "true" ( ). "skip_first" geoip metafo . << >> . ** ( ) . / . (META-PLUGIN INTERACTION) ("metafo" "geoip") "dcmap" . geoip -> metafo -> weighted metafo -> geoip -> multifo metafo -> metafo -> simplefo . . gdnsd (recursion) . "geoip" "metafo" "metafo" "geoip" . IPv4 (IPv4 Compatible Addresses) IPv4 IPv6 . IPv4 "NNNN:NNNN" : ::0000:NNNN:NNNN/96 # RFC 4291 - v4compat () ::ffff:NNNN:NNNN/96 # RFC 4291 - v4mapped ::ffff:0000:NNNN:NNNN/96 # RFC 2765 - SIIT ( ) 64:ff9b::NNNN:NNNN/96 # RFC 6052 - Well-Known Prefix 2001:0000:X:NNNN:NNNN/32 # RFC 4380 - Teredo ( IPv4 ) 2002:NNNN:NNNN::/16 # RFC 3056 - 6to4 ( Teredo "X" ). IPv6 IPv4 v4compat . -v4 ( IPv4 v4mapped SIIT WKP Teredo 6to4) v4compat IPv6 . (v4mapped SIIT WKP Teredo 6to4) v4compat . "nets" -v4 IPv6 ( v4compat) . IPv4 v4compat . IPv6 "nets" -v4 -v4 ** . v4compat v4 "nets" "192.0.2.0/24" "::C000:0200/120" . GeoIP IPv4 v4compat . IPv6 GeoIP v4compat ( MaxMind IPv4 IPv6 ) v4mapped/SIIT/Teredo/6to4 ( MaxMind v4compat ). (ANOTHER CONFIG EXAMPLE) "maps" "resources" : service_types => { xmpp_svc => { plugin => "tcp_connect", ... } www_svc => { plugin => "http_status", ... } } plugins => { geoip => { maps => { my_prod_map => { geoip2_db => GeoIP2-City.mmdb, datacenters => [us-01, de-01, sg-01], map => { # : Continent -> Country -> Region -> City NA => { US => { Dallas => [sg-01], } } SA => [us-01, sg-01, de-01], EU => { default => [de-01, us-01, sg-01], CH => { Geneve => { Geneva => [sg-01], } } } AF => [de-01, us-01, sg-01], AS => [sg-01, de-01, us-01], OC => [sg-01, us-01, de-01], } nets => { 10.0.0.0/8 => [ de-01 ], 2001:DB8::/32 => [ us-01 ], } } my_auto_map => { geoip2_db => GeoIP2-City.mmdb, datacenters => [us-01, de-01, sg-01], auto_dc_coords => { us-01 => [ 38.9, -77 ], de-01 => [ 50.1, 8.7 ], sg-01 => [ 1.3, 103.9 ], } } } resources => { prod_app => { map => my_auto_map # multifo # dcmap : service_types => [www_svc, xmpp_svc], up_thresh => 0.4, dcmap => { us-01 => { lb01 => 192.0.2.1, lb02 => 192.0.2.2, lb03 => 192.0.2.3, lb01.v6 => 2001:DB8::1, lb02.v6 => 2001:DB8::2, lb03.v6 => 2001:DB8::3, }, sg-01 => { lb01 => 192.0.2.4, lb02 => 192.0.2.5, lb03 => 192.0.2.6, lb01.v6 => 2001:DB8::4, lb02.v6 => 2001:DB8::5, lb03.v6 => 2001:DB8::6, }, de-01 => { lb01 => 192.0.2.7, lb02 => 192.0.2.8, lb03 => 192.0.2.9, lb01.v6 => 2001:DB8::7, lb02.v6 => 2001:DB8::8, lb03.v6 => 2001:DB8::9, }, } }, prod_cdn => { map => my_prod_map, dcmap => { us-01 => us-cdn-provider.example.net. sg-01 => asia-cdn-provider.example.net. de-01 => europe-cdn-provider.example.net. } } } } } (RR) example.com: app 600 DYNA geoip!prod_app app.us 600 DYNA geoip!prod_app/us-01 app.sg 600 DYNA geoip!prod_app/sg-01 app.de 600 DYNA geoip!prod_app/de-01 content 600 DYNC geoip!prod_cdn METAFO->GEOIP CNAME plugins => { geoip => { maps => { auto_map => { geoip2_db => GeoIP2-City.mmdb, datacenters => [dc1, dc2, dc3, dc4], auto_dc_coords => { dc1 => [ 38.9, -77 ], dc2 => [ 50.1, 8.7 ], dc3 => [ 20.2, 88.9 ], dc4 => [ 39.0, -20 ], }, # : auto_dc_limit => 2, } }, resources => { www_real => { map => my_auto_map, service_types => [ http, xmpp ], dcmap => { dc1 => 192.0.2.100, dc2 => 192.0.2.101, dc3 => 192.0.2.102, dc4 => 192.0.2.103 } } } }, metafo => { resources => { www => { datacenters => [ real, backup ], dcmap => { real => %geoip!www_real, backup => backup-host.example.net. } } } } } example.com: ; ; geoip ; CNAME backup-host.example.net ; : www DYNC metafo!www (SEE ALSO) gdnsd-plugin-metafo(8), gdnsd_geoip_test(1), gdnsd.config(5), gdnsd.zonefile(5), gdnsd(8) gdnsd. (COPYRIGHT AND LICENSE) (c) Brandon L Black gdnsd . gdnsd : (GNU GPL) ( ) / . gdnsd . . gdnsd . . gdnsd 3.8.3 2026-04-04 GDNSD-PLUGIN-GEOIP(8)