DNS + GeoIP настройка

Исходные данные

Делегирован поддомен prom.education-in-russia.com для geo-dns-m.education-in-russia.com и geo-dns-s.education-in-russia.com

Данные зоны:

Public IP Internal IP DNS name Roles Ports Notes
193.35.96.145 10.10.111.10 geo-dns-m.education-in-russia.com DNS master TCP, UDP 53
193.35.96.146 10.10.111.11 geo-dns-s.education-in-russia.com DNS slave TCP, UDP 53
193.35.96.143 10.10.11.2 balancers-m.main.prom.lan balancer master TCP 80, 443 Сюда дальше перенаправлять (Москва)
193.35.96.144 10.10.11.3 balancers-s.main.prom.lan balancer slave TCP 80, 443

Установка

Набор для сборки:

sudo apt-get install -y gcc4.9 automake_1.14 autoconf_2.60 libtool_2.4
sudo apt-get install -y libuv libucl-devel uncrustify libcap-devel 
sudo apt-get install perl-Regexp-Parser perl-doc

Ставим libmaxminddb из исходников

Линкуем библиотеку

ln -s /usr/lib/libmaxminddb.so.0.0.7 /{lib,lib64}/libmaxminddb.so
ln -s /usr/lib/libmaxminddb.so.0.0.7 /{lib,lib64}/libmaxminddb.so.0

Проверяем, что работает утилита mmdblookup

Компилируем bind-9.16.8 - с поддержкой GeoIP

Установка переменных:

export PKG_CONFIG_PATH=/usr/lib64/pkgconfig
#export PKG_CONFIG_PATH=/lib/pkgconfig
#или глобально:
echo -e "PKG_CONFIG_PATH=/usr/lib64/pkgconfig" >> /etc/environment

Команда конфигурирования:

#ERR./configure --prefix='' --exec-prefix=/usr --with-python=python3 --with-openssl=/usr/lib -with maxminddb=/usr/local/share/geoip
#ERR./configure --prefix='' --exec-prefix=/usr --with-python=python3 --with-openssl=/usr/lib -with-maxminddb=/usr/lib64
#ERR./configure --prefix='' --exec-prefix=/usr --with-python=python3 --with-openssl=/usr/lib -with-maxminddb=auto
## надо для maxminddb указать каталог, где лежит maxminddb.h
#ERR./configure --prefix='' --exec-prefix=/usr --with-python=python3 --with-openssl=/usr -with-maxminddb=/usr/local/include/

./configure --prefix='' --exec-prefix=/usr --with-python=python3 --with-openssl=/usr/lib -with-maxminddb=yes

# 210505: для версии Linux geo-dns-s2.control.prom.lan 5.4.107-std-def-alt0.c9f #1 SMP Fri Mar 26 16:19:01 UTC 2021 x86_64 GNU/Linux
./configure --prefix='' --exec-prefix=/usr --with-python=python3 --with-openssl=/usr/lib -with-maxminddb=/opt/libmaxminddb-master

Сборка:

make -j2
make install

Ручной запуск bind:

/usr/sbin/named -f -t /var/lib/bind -c /etc/bind/named.conf -u named -n 2

Файл переменных окружения bind /etc/sysconfig/bind

# ISC named startup options
# Use -4 for ipv4 only behaviour. See named(8) for details.
# Starting with bind 9.10, chrooted mode is under control(1).
CHROOT="-t /var/lib/bind"
EXTRAOPTIONS="-g -c /etc/bind/named.conf -u named -n 2"

Юнит сервиса /lib/systemd/system/bind.service

[Unit]
Description=Berkeley Internet Name Domain (DNS)
Wants=nss-lookup.target
Before=nss-lookup.target
After=network.target

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/bind
#Environment=KRB5_KTNAME=/etc/named.keytab
#PIDFile=/var/run/named.pid

ExecStartPre=/etc/init.d/bind rndc_keygen
ExecStartPre=/usr/sbin/named-checkconf $CHROOT -z /etc/bind/named.conf
ExecStart=/usr/sbin/named $EXTRAOPTIONS $CHROOT

ExecReload=/bin/sh -c '/usr/sbin/rndc reload > /dev/null 2>&1 || /bin/kill -HUP $MAINPID'

ExecStop=/bin/sh -c '/usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID'

#PrivateTmp=true
TimeoutSec=15

[Install]
WantedBy=multi-user.target

Запрос информации по IP-адресу

mmdblookup --file /usr/share/GeoIP/GeoIP2-City.mmdb  --ip 85.143.203.34 {city,continent,country,postal,location,registered_country,subdivisions}

Если не запускается, может понадобиться слинковать библиотеки libmaxminddb.so в каталоги /usr/lib, /lib и т.п.

Тестирование

dig +short -t A @193.35.96.145 aizaro.education-in-russia.com
dig +short -t A @geo-dns-s.education-in-russia.com  auth.education-in-russia.com
nslookup aizaro.education-in-russia.com 193.35.96.145
nslookup gl.education-in-russia.com geo-dns-s.education-in-russia.com
dig -p 6236 +short -t A @193.35.96.146 aizaro.education-in-russia.com

Источники

  1. https://kb.isc.org/docs/aa-01149
  2. https://bind9.readthedocs.io/en/v9_16_8/index.html оригинал документации
  3. https://geoip.site/ ACL версия GeoIP
  4. https://voja.org/2017/05/05/bind-9-10-with-geoip-on-ubuntu-17-04-zesty-zapus/ пример настройки