본문 바로가기

리눅스

[draft] CentOS 7에서 BIND에 GeoIP 기능을 설정하여 사용하는 방법

728x90

CentOS 7에서 BIND(named)에 GeoIP 기능을 설정하여 사용하는 방법

1. BIND 설치 확인 및 GeoIP 패키지 설치

sudo yum install -y epel-release
sudo yum install -y zlib-devel openssl-devel

BIND 설치

  • BIND와 관련된 패키지를 설치해야 합니다.
sudo yum install -y install bind bind-utils

GeoIP 라이브러리 설치

  • GeoIP 데이터베이스를 사용하려면 MaxMind의 GeoIP 라이브러리를 설치해야 합니다.
sudo yum install -y GeoIP GeoIP-devel

2. MaxMind GeoIP 데이터베이스 다운로드

MaxMind에서 제공하는 GeoIP Legacy 데이터베이스를 사용하여 지역별로 DNS 요청을 처리할 수 있습니다.

sudo yum install -y geoipupdate

소스 파일을 사용하여 컴파일하고 설치하기

더보기

---

필요한 패키지 설치

sudo yum groupinstall "Development Tools"
sudo yum install -y openssl-devel libcap-devel libxml2-devel json-c-devel libuv-devel

bind download site : http://ftp.isc.org/isc/bind9/9.10.4-P6/

cd /usr/local/src/

BIND 소스 코드 다운로드

wget http://ftp.isc.org/isc/bind9/9.10.4-P6/bind-9.10.4-P6.tar.gz

소스 파일 압축 해제

tar xfz bind-9.10.4-P6.tar.gz
cd bind-9.10.4-P6

Configure

./configure --prefix=/usr/local/bind-9.10.4-P6 --sysconfdir=/etc --localstatedir=/var --enable-threads --without-openssl --with-geoip=/usr/share/GeoIP

컴파일 및 설치

make && make install
cd /usr/local/bind-9.10.4-P6/sbin

 

./named -V | sed -r 's/ +/\n/g' | grep geoip
$ ./named -V | sed -r 's/ +/\n/g'|grep geoip
'--with-geoip=/usr/share/GeoIP'

환경 변수 설정

ldd ./named | grep libGeoIP
$ ldd ./named | grep libGeoIP
        libGeoIP.so.1 => /usr/lib64/libGeoIP.so.1 (0x00007f3284d00000)

파일 복사

cp /usr/local/bind-9.10.4-P6/sbin/named /usr/sbin/named
cp /usr/local/bind-9.10.4-P6/sbin/named-checkconf /usr/sbin/named-checkconf
cp /usr/local/bind-9.10.4-P6/sbin/named-checkzone /usr/sbin/named-checkzone

---

3. BIND 설정 파일 수정

BIND(named)에서 GeoIP 기능을 활성화하려면 named.conf 파일을 수정하여 GeoIP 데이터베이스가 저장된 디렉터리와 지역별 설정을 추가해야 합니다.

 

GeoIP 데이터베이스 디렉터리 설정

vim /etc/named.conf
acl "country_KR" {
        geoip country KR;
        #geoip region CA;
        #geoip city "Redwood City"; 
        /* names, etc., must be quoted if they contain spaces */
};

options {
#       listen-on port 53 { 127.0.0.1; };
#       listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;

	# GeoIP 데이터베이스가 있는 디렉터리 설정
        geoip-directory "/usr/share/GeoIP";

        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};

include "/etc/named.logging.conf";
#include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
728x90

GeoIP에 따른 view 설정

  • 이제 국가별로 다른 DNS 응답을 설정할 수 있는 view를 정의합니다. view는 특정 지역에 따라 서로 다른 존 파일을 사용할 수 있게 해 줍니다.
view "ACL_KR" {
      match-clients { country_KR; }; # 한국 IP 대역에만 해당
      recursion yes;

             zone "." IN {
                                        type hint;
                                        file "named.ca";
                                        };

             zone "localhost" IN {
                                        type master;
                                        file "named.localhost";
                                        allow-update { none; };
                                        };
 

             zone "1.0.0.127.in-addr.arpa" IN {
                                        type master;
                                        file "named.loopback";
                                        allow-update { none; };
                                        };

             zone "example.com" IN {
                                        type master;
                                        file "example.com-KR.zone";
                                        allow-update { none; };
                                        };
};

view "OTHER" {
      match-clients { any; }; # 기타 모든 지역
      recursion yes;

             zone "." IN {
                                        type hint;
                                        file "named.ca";
                                        };

             zone "localhost" IN {
                                        type master;
                                        file "named.localhost";
                                        allow-update { none; };
                                        };

             zone "1.0.0.127.in-addr.arpa" IN {
                                        type master;
                                        file "named.loopback";
                                        allow-update { none; };
                                        };

             zone "example.com" IN {
                                        type master;
                                        file "example.com-ETC.zone";
                                        allow-update { none; };
                                        };
};

4. GeoIP 관련 존 파일 설정

각 국가별로 zone 파일을 생성합니다.

 

example.com-KR.zone (한국 사용자용)

vim /var/named/example.com-KR.zone
$TTL 60
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum

                        IN      NS      ns1.example.com.

                        IN      A       1.1.1.1
www                     IN      A       1.1.1.1

ns1                     IN      A       192.168.56.101

example.com-ETC.zone (기타 사용자용)

vim /var/named/example.com-ETC.zone
$TTL 60
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum

                        IN      NS      ns1.example.com.

                        IN      A       2.2.2.2
www                     IN      A       2.2.2.2

ns1                     IN      A       192.168.56.101

BIND(named) 서비스 재시작

BIND(named)를 재시작하여 변경사항을 적용합니다.

sudo systemctl restart named

GeoIP 기능 테스트

GeoIP 기능이 올바르게 작동하는지 확인하기 위해 다양한 국가에서 DNS 질의를 테스트합니다.

 

한국에서 example.com 요청

dig @<BIND 서버 IP> example.com

기타 지역에서 example.com 요청

dig @<BIND 서버 IP> example.com

 

CentOS 7에서 BIND(named)로 GeoIP 기능을 사용하여 각기 다른 지역의 사용자에게 맞춤형 DNS 응답을 제공할 수 있습니다.

 

728x90