DNS 이름 확인은 원칙적으로 어떻게 작동합니까?


10

지금 저는 Linux sysadmin을위한 온라인 과정을 수강하고 있으며 일반적으로 이해하지 못하는 질문을 받았습니다. 이름 서버를 검색하는 방법을 알고 있습니다. 적어도 적어도 dig 명령을 사용하여 추가 섹션 명령에서 주소를 찾은 것이지만 다음 질문을 할 때 약간 손실되었습니다.

구성된 네임 서버에 캐시 된 결과가 없다고 가정하면 maps.google.com을 해결하기 위해 네임 서버에서 몇 개의 네임 서버를 쿼리해야합니까? 이 네임 서버를 모두 찾으려면 어떤 명령을 사용 하시겠습니까? 각 레벨에서 하나씩 나열하고이 레벨이 필요한 이유를 설명하십시오.

나는 대답을 원하지 않는다. 나는 내가 정확히 무엇을 요구 받았는지 알고 싶다.


나는 생각 dig +trace하고 있었지만 레벨의 의미가 확실하지 않습니다. 서버 결함에 대한 질문 일 수 있습니다.
Big McLargeHuge

안녕하세요 linux8807. 더 명확하게하기 위해 귀하의 질문을 편집했습니다. 특히, 나는 그것에 더 나은 제목을 넣어 보았습니다. 내가 의도를 변경했다고 생각되면 편집을 되 돌리십시오 ( "편집 된"링크를 클릭 한 다음 원본 개정판 위의 "롤백"을 클릭하십시오).
CVn

나는이 비디오가 그것을 설명한다고 생각한다 : youtube.com/watch?v=2ZUxoi7YNgs

답변:


13

구성된 네임 서버에 캐시 된 결과가 없다고 가정하면 maps.google.com을 해결하기 위해 네임 서버에서 몇 개의 네임 서버를 쿼리해야합니까? 이 네임 서버를 모두 찾으려면 어떤 명령을 사용 하시겠습니까? 각 레벨에서 하나씩 나열하고이 레벨이 필요한 이유를 설명하십시오.

자, 이것을 골라 봅시다.

"구성된 네임 서버에 캐시 된 결과가 없다고 가정" -먼저 캐시 된 데이터 가 없으면 아무것도 해결할 수 없습니다. 리졸버 캐시를 프라이밍하려면 .(AKA 루트) 영역에 대한 NS 및 주소 (A, AAAA) 레코드가 있어야합니다 . 그것은 영역에있는 루트 이름 서버 root-servers.net.입니다. 해당 영역이나 해당 DNS 서버에는 마법이 없습니다. 그러나이 데이터는 종종 리졸버의 캐시를 프라이밍하기 위해 DNS 리졸버에 "대역 외"로 제공됩니다. 신뢰할 수있는 이름 서버에는이 데이터가 필요하지 않지만 이름 서버 확인에 필요합니다.

또한 무엇을 "해결"합니까? 그 이름의 RRtype이 있습니까? ARR? 또는 다른 것? 어떤 클래스 ( CH/ Chaosnet, IN/ Internet, ...)? 정확한 과정은 다르지만 일반적인 생각은 동일합니다.

루트 이름 서버를 찾는 방법을 알고 있지만 더 이상 아무것도 없다고 가정 할 수 있고 "해결"이란 IN A이름과 관련된 모든 RR 의 내용을 얻는 것을 의미 하므로 훨씬 더 실용적입니다.

DNS 이름을 확인하려면 기본적으로 이름을 레이블로 나누고 오른쪽에서 왼쪽으로 작업하십시오. .마지막을 잊지 마십시오 . 당신은 정말로 maps.google.com.보다는 오히려 해결하고있을 것 maps.google.com입니다. 따라서 해결해야 할 필요가 있습니다 (우리는 이것을 알고 있지만 DNS 확인자 구현은 아마 그렇지 않습니다).

  • .
  • com.
  • google.com.
  • maps.google.com.

의 콘텐츠를 요청할 위치를 파악하는 것으로 시작하십시오 .. 쉽습니다. 루트 이름 서버 이름 및 IP 주소와 같은 정보가 이미 있습니다 . 그래서 우리는 루트 네임 서버를 가지고 있습니다. a.root-servers.net이름 확인을 계속 하기 위해 198.41.0.4 ( , 2001 : 503 : ba3e :: 2 : 30)를 사용하기로 결정했다고 가정 해 보겠습니다 . 실제로, 리졸버가 수행하는 첫 번째 작업 중 하나는 제공된 루트 서버 데이터를 사용하여 루트 영역 서버 중 하나에 루트 영역에 대한 정확한 이름 서버 목록을 요청하여 다음 중 하나가 이름과 IP 주소는 유효하고 연결 가능하며, 분석이 시작될 때 루트 영역에 대한 전체 데이터 세트를 갖습니다.

maps.google.com. IN A198.41.0.4에 대한 DNS 쿼리 를 시작하십시오. "아니요,하지 않겠지 만 여기에 아는 사람이 있습니다"라는 응답으로 알려줄 것입니다. 그것은 추천입니다. 여기에는 NS해당 서버가 알고있는 가장 가까운 영역에 대한 레코드와 서버가 사용할 수있는 글루 레코드가 포함됩니다. 글루 데이터를 사용할 수없는 경우 먼저 선택한 NS 레코드에 이름이 지정된 호스트를 확인해야하므로 IP 주소를 얻기 위해 별도의 이름 확인을 생성합니다. 글루 데이터를 사용할 수있는 경우 답변에 "가까운"네임 서버의 IP 주소를 갖게됩니다. 이 경우 해당 com.영역에 대한 서버 집합이 되고 글루 데이터도 제공됩니다.

com.이름 서버 중 하나에 같은 질문을 하면서 프로세스를 반복하십시오 . 그들은 모르지만 Google의 권위있는 네임 서버를 추천합니다. 일반적인 경우이 시점에서 글루 데이터가 제공되는지 여부에 관계없이 적발되거나 누락됩니다. 예를 들어 gTLD 서버에서 글루 데이터를 사용할 수없는 경우와 같이 com도메인에 이름 서버 만있는 것을 막을 수있는 것은 없습니다 nl. 제공된 접착제 데이터가 불완전하거나 실제로 운이 좋지 않으면 잘못 될 수도 있습니다! 위에서 언급 한 별도의 이름 확인을 생성 하기 위해 항상 준비해야합니다.

기본적으로 aa(정식 답변) 플래그가 설정된 답변 을 얻을 때까지 계속 진행 합니다. 이 답변은 귀하가 요청하는 내용 또는 요청한 RR이 존재하지 않음을 나타냅니다 ( NXDOMAIN또는 NOERROR응답 데이터 레코드가 없음). 같은 응답을 계속 찾아 SERVFAIL보십시오 (한 단계를 취소하고 하나의 서버가 있으면 다른 서버를 사용해보십시오. 모든 명명 된 서버가을 반환 SERVFAIL하면 이름 확인 프로세스에 실패 SERVFAIL하고 클라이언트에게 자신을 반환 하십시오).

각 서버에서 전체 RR 이름을 요청하는 대안 (나쁜 습관으로 간주 될 수 있음)은 이전에 결정한 레이블의 분할 목록을 사용하는 것입니다. 서버가 제공 한 이름 서버에 / IN NS및 RR 의 루트를 향해 추가로 요청하십시오. 해당 레이블을 사용하여 이름 확인 프로세스를 진행시킵니다. 실제로는 약간 차이가 있으며 동일한 프로세스가 여전히 적용됩니다.IN AIN AAAA

당신은 사용하여이 전체 프로세스를 시뮬레이션 할 수 있습니다 +trace받는 옵션이 digBIND의 일환으로, 또는 온다 유틸리티 set debug에를 nslookup.

또한 일부 RR 유형 (특히 NS, MX일부 다른 유형도 A6한동안 합리적으로 잘 사용되었지만 더 이상 사용되지 않음)은 다른 RR을 참조 할 수 있으며 참조 할 수 있음을 기억할 가치가 있습니다. 이 경우 고객 에게 완전하고 유용한 답변을 제공하기 위해 또 다른 이름 확인 프로세스를 생성해야 할 수도 있습니다 .


1
이 답변은 절차가 아니라 개념을 이해하라는 OP의 요청과 매우 일치한다고 생각합니다.
111 ---

그래서 내가하고있는 일은 maps.google.com IN A를 파는 것입니다. 그런 다음 ns1.google.com과 같은 방식으로 파고 싶습니다. 정확하다면, 선생님이 말하는 수준과 그 이유는 무엇입니까? 필요합니까?
linux8807

@ linux8807 dig제공된 글루 레코드에 IP 주소가 포함되지 않은 추천을 받으면 ns1.google.com 이름을 사용하게됩니다. 그런 다음 이전 이름 ​​확인 프로세스를 계속합니다.
CVn

@ MichaelKjörling 모든 ns1-4.google.com 레코드는 글루 레코드의 IP 주소를 갖습니다. i.imgur.com/o79aIGB.png
linux8807

@ linux8807 글루 레코드가 쿼리되는 도메인과 동일한 TLD에있는 경우가 종종 있습니다. 당신은 할 수 없습니다 의존하고 그것에 일반적인 경우에 그러나.
CVn

7

dnstracer이름 확인을 추적 하는 명령이 있습니다 (적어도 데비안에서는 패키지 이름이기도 함). Koveras가 주석에서 지적한대로 사용할 수도 있습니다 dig.

여기에 dnstracer가 있습니다. -s .루트로 시작하는 수단; -4IPv4를 사용하는 것을 의미합니다 (v6이 여기에서 깨졌습니다 ...); -o실제로 마지막에 해결 된 IP 주소를 표시하는 것을 의미합니다 (출력의 해당 부분을 생략했으며 많은 것이 있습니다).

anthony@Zia:~$ dnstracer -s . -4 -o maps.google.com
Tracing to maps.google.com[a] via A.ROOT-SERVERS.NET, maximum of 3 retries
A.ROOT-SERVERS.NET [.] (198.41.0.4) 
 |\___ m.gtld-servers.net [com] (192.55.83.30) 
 |     |\___ ns4.google.com [google.com] (216.239.38.10) Got authoritative answer 
 |     |\___ ns3.google.com [google.com] (216.239.36.10) Got authoritative answer 
 |     |\___ ns1.google.com [google.com] (216.239.32.10) Got authoritative answer 
 |      \___ ns2.google.com [google.com] (216.239.34.10) Got authoritative answer 
⋮

dnstracer가 모든 경로를 추적하므로 출력이 계속됩니다 (예를 들어 일부 네임 서버에 오래된 영역이 있는지 확인할 수 있습니다).

따라서 루트 이름 서버에 대한 쿼리 하나, gtld-servers (.com 영역의 서버)에 대한 쿼리, 마지막으로 Google 네임 서버에 대한 쿼리가 필요하다는 것을 알 수 있습니다.

을 사용 dig하면 출력이 훨씬 더 장황합니다 (따라서 많은 절단 작업을 수행 할 것입니다).

dig -4 maps.google.com. +norecurse +trace
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> maps.google.com. +norecurse +trace
;; global options: +cmd
.                       425379  IN      NS      b.root-servers.net.
⋮
com.                    172800  IN      NS      f.gtld-servers.net.
⋮
google.com.             172800  IN      NS      ns2.google.com.
⋮
maps.google.com.        300     IN      A       74.125.228.70
⋮

dig또한 현재 루트 이름 서버 목록을 얻기 위해 쿼리를 수행했음을 보여줍니다. 이것은 DNS 서버가 일반적으로 매우 드물게하는 일입니다. 따라서 콜드 캐시 케이스에서 계산하는지 확실하지 않습니다.

물론 예를 들어을 사용하여 실제 쿼리를 볼 수도 있습니다 wireshark.


터미널에 설정되어 있기 때문에 아무것도 설치할 수 없지만 직장에서 집에 도착하면 dnstracer를 시도하고 작동하는지 확인하고 * (216.239.38.10) (216.239.36.10)를 요구합니다 ( 216.239.32.10) (216.239.34.10) * 이것? 그렇다면 이미 접근 할 수는 있지만 정식 답변으로는 불가능합니다. 또한, 이것이 그녀가 레벨별로 말하는 것입니까?
linux8807

@ linux8807 dig없는 경우 dnstracer(또는 dig형식 을 좋아 하는 경우) 사용할 수 있습니다 . dnstracer가 출력하는 IP 주소는 네임 서버의 IP 주소입니다. 그들의 이름은 왼쪽에 있습니다. a.root-servers.net은 198.41.0.4 등입니다. 이들은 쿼리되는 서버이며 대괄호 안에있는 영역을 알려줍니다. 첫 번째 수준은 * .root-servers.net (의 경우 .)이고 두 번째 수준은 * .gtld-servers.net (의 경우 ) .com등입니다.
derobert
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.