Как настроить 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»;
};
};