Настройка Bind + GeoIP

Как настроить NS сервер с привязкой GeoIP

Для настройки NS сервера с выдачей по запросу ip адреса сервера ближайшего к клиенту воспользуемся Bind и базой ip адресов от Maxmind.

Есть несколько способов настроить связку Bind + GeoIP. Один из способов предполагает внесение изменений в код сервера Bind. Мне такой вариант не подходит по причине того, что я люблю держать сервера обновлёнными и у меня нет времени каждый раз патчить Bind после обновления.

Идея состояла в том, что в Bind есть механизм Views и Access Control Lists (ACL), который идеально подходит для реализации моей задачи. Проблема состояла только в том, что файл от MaxMind содержит информацию по диапазонам IP адресов, а Bind работает только с понятием сети.

Поиск в гугле натолкнул меня на скрипт от парня с ником phix.
Скрипт можно скачать по ссылке.

Скрипт сам скачивает файл с MaxMind и преобразует его в вид понятный для Bind, а именно в файл ACL!

После запуска скрипта в текущем каталоге появится файл: GeoIP.acl

Теперь по шагам опишу что делать дальше:

1. В файл named.conf (в CentOS, Fedora и других RedHat based Linux находится в /etc/named.conf) добавляем строку:
include «/путь-до/GeoIP.acl»;

2. Используем Views для настройки привязки IP к стране клиента.
3. Перегружаем Bind командой: service named reload

Пример файла named.conf:

acl «trusted» {
localhost;
8.8.8.8;
};

options {
allow-transfer {trusted;};
allow-query {any;};
notify yes;
};

include «/var/named/data/GeoIP.acl»;

#############################ZONE########################

view «Europa» {
match-clients { BE; DE; NL; GB; PL; SL;};
recursion no;
zone «example.ru» {
type master;
file «/var/named/data/master/example.ru.europe»;
};
};

view «RU-UA-BY» {
match-clients { RU; UA; BY; KZ;};
recursion no;
zone «example.ru» {
type master;
file «/var/named/data/master/example.ru.sng»;
};
};

view «NotMatched» {
match-clients { any; };
recursion no;
zone «example.ru» {
type master;
file «/var/named/data/master/example.ru.other»;
};
};