내부 DNS 항목을 쿼리하여 특정 서버를 가리키는 모든 CNAME 항목을 검색하는 방법이 있습니까?
편집 : 우리는 Windows 2003 환경입니다.
내부 DNS 항목을 쿼리하여 특정 서버를 가리키는 모든 CNAME 항목을 검색하는 방법이 있습니까?
편집 : 우리는 Windows 2003 환경입니다.
답변:
환경을 지정하지 않았지만 Unix를 사용하는 경우 발굴과 grep의 조합이 작동해야한다고 생각합니다. ns.example.com
이름 서버의 호스트 이름이어야하고 호스트 example.com
가 속한 도메인이며 HOST는 모든 CNAME 레코드를 찾으려는 호스트입니다. 이것은 실제로 grep 명령의 탭 문자이며 문자 그대로는 아닙니다 <TAB>
(grep 문자열을 조정해야 할 수도 있습니다).
또한 영역 전송을 허용하도록 네임 서버를 구성해야하며, 특정 영역은 구현에 따라 다릅니다.
dig @ns.example.com example.com axfr |grep 'CNAME<tab>HOST$'
또는 Windows를 사용하는 경우 nslookup을 사용할 수 있습니다 .
C:\> nslookup
> name ns.example.com
> ls -a example.com FILE
이것은 "알고 example.com
있는 ns.example.com
" 도메인에 대한 모든 레코드 를 FILE에 출력해야합니다 . 그런 다음 해당 CNAMES를 찾기 위해 텍스트 파일을 정렬하려는 도구를 사용할 수 있습니다.
또는이 테스트되지 않은 (그러나 올바르게 보이는 것처럼 보이는) 펄 스크립트 :
#!/usr/bin/perl
use Net::DNS;
($target, $zone) = @ARGV;
$res = new Net::DNS::Resolver;
foreach $rr ($res->axfr($zone)) {
print $rr->name."\n" if (($rr->type eq "CNAME") && ($rr->rdatastr eq $target."."));
}
완전성을위한 몇 가지 사항 :
DNS 구성에 액세스 할 수 있으면이 데이터를 발견하는 것이 쉽지 않습니다. 그러나 누구나 서버를 가리키는 CNAME을 가질 수 있습니다. 이를 추적 할 수 없습니다.
@wombie가 지적했듯이 CNAMES에 대한 역방향 조회를 수행 할 수 없습니다. CNAMES에 해당하는 PTR은 없으며 일부 레코드 만 존재할 가능성이있는 경우에도 마찬가지입니다. 임의의 도메인 선택을 빠르게 확인하면 PTR 레코드가 종종 A 레코드를 가리 키지 않음을 알 수 있습니다. 마찬가지로 임의 주소에 대한 PTR 레코드의 역방향 조회를 수행해도 해당 A 레코드를 찾지 못하는 경우가 많습니다.
편집 : CNAME이 시스템을 별칭으로 만드는 유일한 방법은 아닙니다. DNS를 사용하면 여러 A 레코드가 동일한 주소를 가리킬 수 있습니다. 기능적으로 이것은 CNAME을 추가하는 것과 동일하지만 방법이 다릅니다. 도메인 외부에서도 동일한 문제가 발생합니다. 다양한 A 레코드를 검색하려면 해당 시스템의 IP 주소를 검색하십시오.
파워 쉘 사용 :
Microsoft DNS 서버에서 기본 이름을 확인하십시오.
Get-WmiObject-네임 스페이스 'root \ MicrosoftDNS'-Class MicrosoftDNS_AType-필터 "IPAddress = 'xx.xx.xx.xx (IP)'"-ComputerName mydnsservername
Microsoft DNS 서버에서 해당 호스트의 모든 cname을 가져옵니다.
Get-WmiObject-네임 스페이스 'root \ MicrosoftDNS'-Class MicrosoftDNS_CNAMEType -Filter "primaryname = '첫 번째 쿼리의 기본 이름은 점으로 종료됩니다.'"-ComputerName mydnsservername | select ownername, primaryname