Active Directory를 지원하는 BIND 구성
처음으로 Active Directory를 지원하게끔 BIND 서버를 구성하던 때의 기억을 되살리면서 몇 자 적어보기로 합니다.
한참 Active Directory에 대하여 공부를 할 때 인 것 같습니다. 이젠 Active directory에 대해서 주위의 다른 사람들에 비해서 많은 지식을 습득하였다고 자만하고 있을 때 입니다. Active Directory를 공부하다 보니 BIND에 대한 이야기가 나오고 그 것에 대해서는 얕은 지식만을 습득한 상태에서 아는 분의 부탁으로 Active Directory를 지원하게끔 BIND 서버를 구성하는 작업을 하게 되었습니다. 아는 분이라는 것과 그 분이 BIND 서버 쪽은 담당하겠다는 말에 얕은 지식만을 가지고 구성 작업에 들어가게 되었습니다.
그 때에는 BIND 서버가 Active Directory를 지원하기 위해 어떤 요구사항을 만족해야 하는지 잘 알지 못하고 있었기에 수 차례의 반복적인 착오와 technet 기술 자료를 검색하면서 통해서 어렵게 구성을 하였습니다. 구성을 하면서 저와 그 분은 몰랐던 많은 부분들을 알게 되었으나, 구성을 마치고도 아직 이해가 가지 않는 부분이 있었고, 그 후로 그날 작업을 하였던 부분에 대하여 BIND 서버를 Active Directory를 구성하는 것과 관련된 자료들을 연구하면서 이해하게 되었습니다. 지금 생각해보면 조금의 준비만 있었어도 그 많은 시간과 노력을 들이지 않고도 작업 할 수 있었던 것을 헛고생을 하였다는 후회가 듭니다.
Technet column을 기재하기 위해 무엇을 써야 할지에 대해 고민하면서 이 글을 읽는 독자에게 조금의 시간을 내 주어 읽어주신 것에 대한 보답으로 저와 같은 경험을 하지 않게 도움을 주고자 Active Directory를 지원하는 BIND 서버를 지원하게끔 구성하는데 도움이 될만한 것들을 몇 자 적을까 합니다. 아래의 내용은 Windows 2000 백서의 내용을 재구성한 것입니다.
Windows 2000 Server의 Domain Name System (DNS) Server는 Active Directory를 완전히 지원하고, 다른 DNS Server들의 표준 기반의 구현과의 완전한 호환성을 제공하며, 그래픽 환경으로 쉬운 설치 및 구성 기능을 제공할 뿐만 아니라 스크립팅 할 수 있는 옵션도 제공합니다. 이런 이유로, Windows 2000 Network과 Active Directory를 지원하는데 Windows 2000 DNS Server가 추천되는 것입니다. 많은 환경에서 Microsoft DNS가 아닌 다른 DNS 구현 환경을 가지고 있으며, Berkeley Internet Name Domain (BIND) DNS Server의 Active Directory를 지원하기 위한 구성을 위한 요구사항들을 명시하겠습니다.
이 문서의 목적은 관리자들이 기존의 Berkeley Internet Name Domain (BIND) Server를 사용해서 Active Directory를 지원하게 하는데 도움을 주는데 있습니다
Host Name Resolution
다른 Internet Protocol(IP) host들 같이, Windows 2000은 Internet 이름을 IP Address로 이름 풀이 (host name resolution)하고, IP Address를 Fully Qualified Domain Name (FQDN)으로 이름 풀이 (reverse lookup) 하는데 DNS를 주로 사용합니다.
Service Location
DNS는 Windows 2000 컴퓨터들이 로그인하기 위해 domain controller들을 찾는 것을 포함한 네트워크에서 서비스들의 위치를 찾는데 사용하는 주된 이름풀이 방법입니다. Windows 2000에서 DNS는 Microsoft의 Windows NT 전 버전에서 domain controller를 찾거나 다른 네트워크 서비스들을 찾는 NetBIOS Name Service의 구현인 WINS 서비스로 제공하던 service location 기능을 대체하였습니다. Network Service들과 domain controller들은 Service Locator (SRV) record들을 사용하는 DNS에 위해 그 위치를 알리어집니다.
Service Locator (SRV) Records
Service Locator (SRV) Record (RFC 2782에 정의된) 들은 서버들이 단일 DNS query 기능을 사용해서 단순한 TCP/IP 기반 서비스들의 위치를 알 수 있게 도와줍니다. 이런 record들은 DNS 도메인 이름에 대해 자주 사용되는, 잘 알려진 서버의 port와 전송 protocol type의 서버 리스트들을 유지할 수 있게 합니다. 예를 들어, SRV record들은 Windows 2000 client들에게 Lightweight Directory Access Protocol (LDAP) service가 TCP 389 port를 통해서 서비스 하는 domain controller들을 찾을 수 있게 도와준다.
SRV resource record에서 사용하는 지정된 항목들의 목적은 다음과 같습니다:
- Service 요구되는 서비스의 상징적인 이름. RFC 1700에 정의된 "_telnet" 또는 "_smtp" 같은 잘 알려진 서비스에 대하여 예약된 전세계적인 상징적인 이름입니다.
- Protocol transport protocol 의 type을 지정합니다. 일반적으로, 이것은 TCP 또는 UDP 중에 하나입니다.
- Name DNS 도메인 이름은 이 resource record에 위해 참조됩니다. 이 SRV resource record는 다른 DNS record type 중에 유일하며, search 또는 query하는데 사용되지는 않습니다.
- Priority target 항목에 지정된 host에 대한 우선 순위를 지정합니다. 우선순위 값의 범위는 0부터 65535까지 이다.
- Weight 여러 서버가 target 항목에 지정되고, 모두 같은 우선순위를 가지는 load-balancing 메커니즘을 제공하기 위한 우선순위로 추가적으로 사용됩니다. 같은 우선순위를 가지는 target 서버들 중에 선택을 할 때, SRV query에 응답된 target hosts 선택의 정확한 순서나 balance를 결정하는데 사용될 수 있습니다.
- Port 이것은 서비스 항목에 지정된 서비스를 제공하는 target host의 server port입니다
- Target 요청된 서비스의 type을 제공하는 host의 DNS 도메인 이름을 지정하며, 각 host들을 위해 DNS 이름 공간에 있는 host address (A) resource record와 일치될 것이 요구됩니다.
DNS Server가 Active Directory를 지원하기 위해서는 domain controller들의 위치를 인증과 용도를 query하기 위해 SRV record들을 지원해야 합니다.
하나의 Windows 2000 domain은 DNS 도메인 이름이 존재하며,(예를 들어 nt.microsoft.com) 각 domain controller는 자신의 address를 표준 DNS 동적 업데이트를 사용하는 DNS에 등록합니다.(이런 record들은 DNS server가 동적 업데이트를 지원하지 않는다면 수동으로 추가될 수 있습니다.) 각 domain controller는 하나의 host record (A record)와, 여러 개의 SRV record들을 등록한다.
예를 들어, ad.mydom.com domain안에 4.2.2.3의 IP Address를 가지는 dc1이라는 이름의 domain controller는 다음과 같은 DNS record들을 등록합니다:
dc1.ad.mydom.com | A | 4.2.2.3 |
_ldap._tcp.ad.mydom.com | SRV | 0 0 389 dc1.ad.mydom.com |
_kerberos._tcp.ad.mydom.com | SRV | 0 0 88 dc1.ad.mydom.com |
_ldap._tcp.dc._msdcs.ad.mydom.com | SRV | 0 0 389 dcq.ad.mydom.com |
_kerberos._tcp.dc._msdcs.ad.mydom.com | SRV | 0 0 88 dc1.ad.mydom.com |
같은 도메인에 있는 다른 domain controller들도 DNS에 비슷한 record들을 등록한다.
Microsoft는 Active Directory를 지원하기 위해 DNS server가 RFC 2136에 설명되어 있는 동적 업데이트 역시 지원하기를 권장한다. 동적 업데이트의 지원은 Active Directory를 운영하기 위한 정확한 요구사항은 아닙니다. Active Directory와 관련된 record들은 각 domain controller에 대한 record들의 수로 인해 시간을 소모하더라도 Active Directory를 지원하는 영역 data에 수동으로 추가될 수 있는데, 하나의 domain controller가 승격되면 NETLOGON.DNS라는 파일이 %systemroot%\system32\config 폴더에 생성됩니다. 이 파일은 그 domain controller가 등록해야 할 모든 DNS 항목을 포함하고 있어서, Active Directory DNS record들을 수동으로 추가하는 것을 도와주는데 사용될 수 있습니다.
버전 8.2.2 patch 7 또는 그 이후 버전이 SRV record (RFC 1700)들과 동적 업데이트 (RFC 2136)을 완전히 지원한다.
BIND를 구현하는 것에 대해서는 http://www.isc.org/ 를 참조하세요.
앞에서 보여진 것처럼, Active Directory record들은 도메인의 이름에 underscores (_)가 있습니다. Hostnames(RFC 952/1123)과 mail domains(RFC821)의 도메인 이름에 underscores(_)가 사용되는 것은 금지되어 있지만, domain 이름에 underscores(_)를 사용하지 못하는 것은 아닙니다. Active Directory에 의해 요구되는 records의 복잡성이나 숫자로 인해, Microsoft는 도메인 이름에 underscores(_)를 사용하게 허용함으로써 기존에 존재하는 DNS data와 Active Directory data의 충돌 가능성을 줄이기 위해 도메인 이름에 underscores (_)를 사용하는 것을 선택한 것입니다.
기본적으로 BIND 8은 도메인 이름에 underscores(_)가 있는 records가 사용되는 것을 고려하지 않습니다. BIND 8.x는 network으로 받는 DNS 응답이나 master file에 있는 domain name의 문자열을 직접 제한하기 위해 check-names 옵션을 사용하는데, BIND 8.x가 Active Directory를 지원하기 위해서는 check-names 옵션을 사용하지 않게 설정해야 한다.
BIND 9는 domain 이름의 문자열을 제한하거나 check-names 옵션을 사용하지 않습니다.
Active Directory를 지원하게끔 BIND 구성하기 위해서는 named.conf(구성) 파일에 Active Directory를 지원하겠다는 정보를 설정하고, 도메인의 zone 파일을 생성하고, NameD daemon을 재 시작해야 합니다.
Named.conf파일은 일반적으로 /etc 디렉터리 안에 존재하며, BIND daemon의 구성 인자들과 BIND가 서비스하고 지원해야 할 DNS zones에 대한 정보의 구성을 포함하고 있습니다. 이 column에는 Active Directory를 지원과 관련된 여러 개의 BIND의 지시어를 다르고 있으며, 그것은 다음과 같습니다:
- Options global 서버 option들과 다른 문들의 기본 값을 지정한다.
- Directory 서버의 작업 디렉터리를 지정합니다
- Zone zone의 이름을 지정하며, IN 다음에는 주소의 Internet type이 지정됍니다.
- Type zone에 대한 주/보조 DNS 서버를 지정합니다.
- File zone database 파일의 이름을 지정한다.
- Allow-update 그 zone에 동적 업데이트를 허용하는 host가 지정됩니다. 이 옵션에는 IP address나 hostname으로 지정된 host, 전제 subnet 항목이 지정되며, 항목들은 semicolon (;)으로 구분됩니다. Active Directory를 지원하기 위해 SRV record들이 등록되기 위해서는 모든 domain controller들이 zone에 대한 동적 업데이트가 지원 되야 합니다. 지정 되지 않으면, 기본으로 업데이트는 거부됩니다.
- Check-namesBIND 8의 특징인 check-names 옵션의 사용 여부를 설정합니다. BIND DNS server는 Active Directory에서 사용되는 domain 이름의 underscores (_)를 사용하는 것을 허용해야 합니다. 이 설정에는 세가지 설정 warn, fail과 ignore가 있으며, Check-names 옵션이 지정되지 않으면, 기본값은 warn입니다. warn이나 fail 중 하나가 설정되면 업데이트와 query는 거부되기에, BIND8에서는 이 설정은 꼭 ignore로 설정되어야 Active Directory를 지원하게 됩니다.
이 외에 많은 BIND 설정에 사용되는 설정에 대해서는 http://www.isc.org/products/BIND/ 를 참조하세요.
다음은 named.conf 파일에 개괄적인 예입니다.
Options {
directory "<working directory name>";
};
zone "<DNS Name for the Active Directory Domain>" IN {
type master;
file "<file for this zone>";
allow-update { <address_match_list>; };
check-names ignore;
};
다음은 "ad.mydom.com"이름의 Active Directory Domain을 지원하는 Zone entry이며, zone의 type은 master(primary)이며 zone data는 "/etc/namedb" 디렉터리 안에 "db.ad.mydom.com" 파일에 저장되어 있고, 4.2.2.3 IP address를 가지는 host와 dc2라는 hostname을 가지는 컴퓨터가 zone에 업데이트하는 것은 허용합니다. Check-names 옵션은 ignore로 설정되어 있습니다.
Note "//"로 시작되는 라인은 주석이며, 서버가 인식하지 않습니다.
Options {
directory "/etc/namedb"; //Working directory
};
// Zone entry for my Active Directory domain ad.mydom.com
Zone "ad.mydom.com" IN {
type master;
file "db.mydom.com";
allow-update { 4.2.2.3; dc2.; };
check-names ignore;
};
이 파일은 BIND 8의 예제 파일에서 check-names 옵션을 제외하고는 같습니다.
Options {
Directory "/etc/namedb"; //Working directory
};
// Zone entry for my Active Directory domain ad.mydom.com
Zone "ad.mydom.com" IN {
type master;
file "db.mydom.com";
allow-update { 4.2.2.3; dc2.; };
};
지정된 디렉터리 안에 Active Directory zone을 지원하는 zone 파일을 생성하고, NameD daemon을 재 시작 해야 합니다. Active Directory의 업데이트를 지원할 준비가 되었을 때, domain controller들은 그들의 primary DNS server를 BIND server로 이용하게 구성을 하면 됍니다.
Domain controllers 또는 다른 Windows 2000이나 이후 버전의 client가 BIND server를 사용하게 구성하려면, 활성화된 네트워크 연결의 TCP/IP 등록정보에 있는 주(preferred) DNS server로써 BIND server의 IP Address로 구성해야 합니다.
Preferred DNS Server를 구성하였으며, 두 가지 방법으로 DNS Server에게 모든 DNS records을 강제적으로 등록시킬 수 있습니다:
- Netlogon service를 재 시작.
- 명령프롬프트에서 IPCONFIG /REGISTERDNS 실행.
NSLookup 유틸리티를 사용해서, BIND server가 올바르게 구성되었는지, 업데이트가 허용되는지를, 그리고 Active directory domain에 대한 query에 응답함을 다음 nslookup 명령을 사용해서 확인할 수 있다:
- interactive mode로 nslookup 유틸리티를 시작.
- set type=all로 설정.
- _ldap._tcp.dc._msdcs.domainname을 입력하고 enter.
NSLookup은 아래의 형식으로 하나 이상의 SRV service location records을 반환합니다.
Hostname.domainname internet address = ipaddressb
Hostname이 domain controller의 host name이며, domain controller가 위치하는 domain name에 있으며, ipaddress가 domain controller의 IP Address임을 확인 할 수 있습니다.
Zone data가 추가되면 BIND server에 있는 zone database가 수정될 수 있으며, Directory 지시자가 지정한 작업 디렉터리에 zone과 관련된 모든 파일들이 저장됩니다. Zone 파일에 동적 DNS 에 대한 항목이 즉시 나타나지 않을 수 있으며, 몇 분 안에 zone 파일에 업데이트 될 것입니다.
끝까지 읽어주신 것에 대하여 감사 드리며, 위 내용에 대하여 모르시던 독자들에게는 많은 도움을 줄 수 있기를, 이미 접하고 알고 있으시는 독자에게는 다시 정리하는 기회가 되었으면 하는 작은 바람으로 글을 마칩니다.
최종 수정일 : 2003년 3월 5일