본문 바로가기

네임서버

BIND9에 뷰를 설정하는 방법

반응형

BIND9에 뷰를 설정하는 방법

BIND9에서 뷰(View) 설정을 사용하면 클라이언트의 소스 IP 주소나 네트워크에 따라 서로 다른 DNS 응답을 제공할 수 있습니다. 이는 내부 네트워크와 외부 네트워크에 대해 다른 존 데이터를 제공하거나, 특정 클라이언트에 대해 제한된 액세스를 구현할 때 유용합니다.

ACL 및 VIEW 설정

named.conf.default-zones 설정

vim /etc/bind/named.conf.default-zones
더보기

---

acl "internal" {
  192.168.1.0/24;  // 내부 네트워크
  localhost;
};

acl "external" {
  any;  // 그 외 모든 클라이언트
};


view "internal" {
  match-clients { internal; };
  allow-query { internal; };
  allow-recursion { internal; };
  recursion yes;

  zone "." {
    type hint;
    file "/usr/share/dns/root.hints";
  };

  zone "localhost" {
    type master;
    file "/etc/bind/db.local";
  };

  zone "127.in-addr.arpa" {
    type master;
    file "/etc/bind/db.127";
  };
};

view "external" {
  match-clients { external; };
  allow-query { external; };
  allow-recursion { none; };
  recursion no;

  zone "." {
    type hint;
    file "/usr/share/dns/root.hints";
  };
};

---

acl(Access Control List)

  • 클라이언트 IP 범위를 정의
    • internal : 192.168.1.0/24 네트워크와 로컬 호스트를 포함.
    • external : 나머지 모든 클라이언트를 포함.
acl "internal" {
  192.168.1.0/24;  // 내부 네트워크
  localhost;
};

acl "external" {
  any;  // 그 외 모든 클라이언트
};

view 블록

  • 각 뷰에 대해 존과 동작 정의
view "internal" {
  match-clients { internal; };
  allow-query { internal; };
  allow-recursion { internal; };
  recursion yes;

  zone "." {
    type hint;
    file "/usr/share/dns/root.hints";
  };

  zone "localhost" {
    type master;
    file "/etc/bind/db.local";
  };

  zone "127.in-addr.arpa" {
    type master;
    file "/etc/bind/db.127";
  };
};

view "external" {
  match-clients { external; };
  allow-query { external; };
  allow-recursion { none; };
  recursion no;

  zone "." {
    type hint;
    file "/usr/share/dns/root.hints";
  };
};
728x90

뷰별 존 파일 생성

디렉토리 생성

sudo mkdir -p /etc/bind/internal

내부 정방향 존 파일

sudo vim /etc/bind/internal/db.example.com
$TTL    86400
@       IN      SOA     ns1.example.com. admin.example.com. (
                              2025050901 ; Serial
                              3600       ; Refresh
                              1800       ; Retry
                              604800     ; Expire
                              86400 )    ; Minimum TTL
;
        IN      NS      ns1.example.com.
        IN      A       192.168.1.100
ns1     IN      A       192.168.1.100
www     IN      A       192.168.1.100

존 파일 복사

sudo cp /etc/bind/internal/db.example.com /etc/bind/db.example.com

외부 정방향 존 파일

sudo vim /etc/bind/db.example.com
$TTL    86400
@       IN      SOA     ns1.example.com. admin.example.com. (
                              2025050901 ; Serial
                              3600       ; Refresh
                              1800       ; Retry
                              604800     ; Expire
                              86400 )    ; Minimum TTL
;
        IN      NS      ns1.example.com.
        IN      A       192.168.200.100
ns1     IN      A       192.168.200.100
www     IN      A       192.168.200.100

파일 권한 설정

sudo chown -R bind:bind /etc/bind/internal
sudo chmod -R 644 /etc/bind/internal/db.example.com
sudo chmod -R 644 /etc/bind/db.example.com

named.conf.default-zones 설정

sudo vim named.conf.default-zones
view "internal" {
  match-clients { internal; };
  allow-query { internal; };
  allow-recursion { internal; };
  recursion yes;
...
  zone "example.com" {
    type master;
    file "/etc/bind/internal/db.example.com";
  };
...
};

view "external" {
  match-clients { external; };
  allow-query { external; };
  allow-recursion { none; };
  recursion no;
...
  zone "example.com" {
    type master;
    file "/etc/bind/db.example.com";
  };
...
};

구문 검사(named.conf)

sudo named-checkconf /etc/bind/named.conf

존 파일 검사

sudo named-checkzone example.com /etc/bind/internal/db.example.com

BIND9 서비스 재시작

sudo systemctl restart named

BIND9 서비스 상태 확인

sudo systemctl status named

뷰 테스트

내부 클라이언트 테스트

$ dig @127.0.0.1 example.com +short
192.168.1.100

외부 클라이언트 테스트

$ dig @172.16.100.200 example.com +short
192.168.200.100

 

BIND9에 내부 및 외부 뷰를 설정하고 클라이언트별로 다른 DNS 응답을 제공할 수 있습니다.

 

"내부"보기 { 성냥개비 {내부; }; 허용 쿼리 {내부; }; 허용 재고 {내부; }; 재귀 예; ... Zone "example.com"{ 유형 마스터; "/etc/bind/internal/db.example.com"파일; }; ... }; "외부"보기 { 성냥개비 {외부; }; 허용 쿼리 {외부; }; 허용 재고 {없음; }; 재귀 번호; ... Zone "example.com"{ 유형 마스터; "/etc/bind/db.example.com"파일; }; ... };
 
반응형