서버의 CNAME에 대한 DNS 쿼리 DNS 항목을 쿼리하여 특정 서버를 가리키는

내부 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."."));
}

완전성을위한 몇 가지 사항 :

  • @womble이 언급했듯이 CNAME에 대한 PTR 레코드와 동등한 것은 없습니다. 호스트의 A 레코드에 해당하는 CNAMES에 대한 모든 영역 정보를 정렬하여 상황에 맞는 인식을 사용해야합니다.
  • 이것은 DNS 서버에서만 작동합니다 (영역 정보를 볼 수있는 권한이있는 경우). 다른 영역에 속하는 호스트의 CNAME을 “추적”할 방법이 없습니다.
  • @BillThor가 말했듯이 CNAMES 이외의 호스트 이름을 별칭으로 지정하는 다른 방법이 있습니다. 다시 말하지만, 상황에 대한 인식이 필요합니다.

답변

DNS 구성에 액세스 할 수 있으면이 데이터를 발견하는 것이 쉽지 않습니다. 그러나 누구나 서버를 가리키는 CNAME을 가질 수 있습니다. 이를 추적 할 수 없습니다.

@wombie가 지적했듯이 CNAMES에 대한 역방향 조회를 수행 할 수 없습니다. CNAMES에 해당하는 PTR은 없으며 일부 레코드 만 존재할 가능성이있는 경우에도 마찬가지입니다. 임의의 도메인 선택을 빠르게 확인하면 PTR 레코드가 종종 A 레코드를 가리 키지 않음을 알 수 있습니다. 마찬가지로 임의 주소에 대한 PTR 레코드의 역방향 조회를 수행해도 해당 A 레코드를 찾지 못하는 경우가 많습니다.

편집 : CNAME이 시스템을 별칭으로 만드는 유일한 방법은 아닙니다. DNS를 사용하면 여러 A 레코드가 동일한 주소를 가리킬 수 있습니다. 기능적으로 이것은 CNAME을 추가하는 것과 동일하지만 방법이 다릅니다. 도메인 외부에서도 동일한 문제가 발생합니다. 다양한 A 레코드를 검색하려면 해당 시스템의 IP 주소를 검색하십시오.


답변

DNS 프로토콜을 사용하면 이러한 “역방향”조회를 수행 할 수 없습니다. kce에서 제공하는 grep 제안을 사용하는 등 프로토콜을 벗어나야합니다.


답변

파워 쉘 사용 :

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


답변

  1. 컴퓨터에서 제공하는 모든 영역을 찾으십시오.
  2. 각 영역에 dnscmd대해 영역 데이터를 내보내려면 사용 하십시오.
    dnscmd a.ns.example.com / zoneexport zone.example.com some-filename-for-this-zone
  3. 내 보낸 파일 CNAME에서 대상 도메인 이름을 가리키는 리소스 레코드를 검색하십시오 .

답변