특정 DNS 서버로 쿼리를 보내려면 어떻게해야합니까?


154

IP 주소를 알고있는 특정 DNS 서버에 쿼리를 실행하고 싶습니다. Windows 또는 * nix에 있는지 여부는 실제로 중요하지 않습니다.

Windows에서는 다음과 같은 작업을 수행 할 수 있습니다.

C:\Documents and Settings\Anton Daneyko>nslookup superuser.com
Server:  DNSs2.Uni-Marburg.DE
Address:  137.248.21.22

Non-authoritative answer:
Name:    superuser.com
Address:  64.34.119.12

그러나 이것은 로컬 컴퓨터의 DNS 설정을 사용합니다. 대신 특정 DNS 서버를 쿼리하여 쿼리에 올바르게 응답하는지 전혀 응답하지 않는지 테스트하고 싶습니다.

따라서 다음과 같아야합니다.

nslookup --dns-ip=8.8.8.8 superuser.com

답변:


200

기본 A 및 CNAME 레코드의 경우 간단하게 수행 할 수 있습니다.

nslookup somewhere.com some.dns.server

Usage: 
   nslookup [-opt ...]             # interactive mode using default server
   nslookup [-opt ...] - server    # interactive mode using 'server'
   nslookup [-opt ...] host        # just look up 'host' using default server
   nslookup [-opt ...] host server # just look up 'host' using 'server'

또는 매개 변수없이 nslookup을 입력하면 더 많은 옵션을 수행 할 수 있습니다 ...

Commands:   (identifiers are shown in uppercase, [] means optional)
NAME            - print info about the host/domain NAME using default server
NAME1 NAME2     - as above, but use NAME2 as server
help or ?       - print info on common commands
set OPTION      - set an option
    all                 - print options, current server and host
    [no]debug           - print debugging information
    [no]d2              - print exhaustive debugging information
    [no]defname         - append domain name to each query
    [no]recurse         - ask for recursive answer to query
    [no]search          - use domain search list
    [no]vc              - always use a virtual circuit
    domain=NAME         - set default domain name to NAME
    srchlist=N1[/N2/.../N6] - set domain to N1 and search list to N1,N2, etc.
    root=NAME           - set root server to NAME
    retry=X             - set number of retries to X
    timeout=X           - set initial time-out interval to X seconds
    type=X              - set query type (ex. A,AAAA,A+AAAA,ANY,CNAME,MX,NS,PTR,SOA,SRV)
    querytype=X         - same as type
    class=X             - set query class (ex. IN (Internet), ANY)
    [no]msxfr           - use MS fast zone transfer
    ixfrver=X           - current version to use in IXFR transfer request
server NAME     - set default server to NAME, using current default server
lserver NAME    - set default server to NAME, using initial server
root            - set current default server to the root
ls [opt] DOMAIN [> FILE] - list addresses in DOMAIN (optional: output to FILE)
    -a          -  list canonical names and aliases
    -d          -  list all records
    -t TYPE     -  list records of the given RFC record type (ex. A,CNAME,MX,NS,PTR etc.)
view FILE           - sort an 'ls' output file and view it with pg
exit            - exit the program

7
불행히도 매뉴얼은 'domain-name'및 'dns-server'와 같은 명확한 용어 대신 'host'및 'server'라는 용어를 사용합니다.
ClearCrescendo

1
완전히 잘못된 것은 아닙니다. "도메인 이름"은 호스트 이름의 일부일뿐입니다. 실제로 도메인 접미사를 생략하고 FQDN의 "호스트"부분 만 조회 할 수 있습니다. NSLOOKUP일치하도록 시스템에 구성된 검색 접미사를 자동으로 사용합니다.
TheCompWiz

1
NSLOOKUP옵션을 사용 하기 위해 완전히 액세스 할 필요는 없습니다 . 구문은 약간 이상합니다. :nslookup -all -debug -type=ANY -class=ANY servertolookup.com someDNSserver.com
Coruscate5

11

nslookup 옵션을 파고 들면 nslookup 대화식 모드 를 호출 nslookup하고 입력 하면 표시 할 수 있습니다 help.

C:\Documents and Settings\Anton Daneyko>nslookup help
Server:  DNSs2.Uni-Marburg.DE
Address:  137.248.21.22

*** DNSs2.Uni-Marburg.DE can't find help: Non-existent domain

C:\Documents and Settings\Anton Daneyko>nslookup
Default Server:  DNSs2.Uni-Marburg.DE
Address:  137.248.21.22

> stackoverflow.com 8.8.8.8
Server:  [8.8.8.8]
Address:  8.8.8.8

Non-authoritative answer:
Name:    stackoverflow.com
Address:  64.34.119.12

16
이 답변이 "Just diging ..."로 시작하는 것을보고 웃었습니다 .
Hossein

7

예, C:\Documents and Settings\Anton Daneyko>nslookup superuser.com superuser.com의 IP 주소를 찾기 위해 자체 DNS 서버를 찾습니다. ip 주소 또는 다른 DNS 서버 이름을 명령 줄에 추가하면 superuser.com의 ip 주소에 대해 주어진 DNS 서버를 찾습니다. 전의:

C:\Documents and Settings\Anton Daneyko>nslookup superuser.com 8.8.4.4
Server:  google-public-dns-b.google.com
Address:  8.8.4.4

Non-authoritative answer:
Name:    superuser.com
Addresses:  190.93.245.58
      190.93.246.58
      141.101.114.59
      190.93.247.58
      190.93.244.58

그런데 8.8.4.4는 Google DNS 서버의 IP 주소입니다.

그러나 위의 두 가지 모두 "비 정식 답변"을 제공합니다. SOA는 superuser.com 도메인에 대한 권한이 없습니다. 둘 다 SOA에서 전파 된 캐시 사본을 가지고 있습니다. 인증 서버에 요청하려면 먼저 다음 명령을 사용하여 인증 서버의 IP 주소 이름을 찾으십시오.

C:\Documents and Settings\Anton Daneyko>nslookup -type=ns superuser.com
Server:  DNSs2.Uni-Marburg.DE
Address:  137.248.21.22

Non-authoritative answer:
superuser.com   nameserver = cf-dns02.superuser.com
superuser.com   nameserver = cf-dns01.superuser.com

cf-dns02.superuser.com  internet address = 173.245.59.4
cf-dns02.superuser.com  AAAA IPv6 address = 2400:cb00:2049:1::adf5:3b04
cf-dns01.superuser.com  AAAA IPv6 address = 2400:cb00:2049:1::adf5:3a35
cf-dns01.superuser.com  internet address = 173.245.58.53

그러면 로컬 DNS 서버, Marburg Uni에서 신뢰할 수없는 답변을 반환하고 superuser.com에 대한 모든 신뢰할 수있는 서버의 이름을 지정합니다. 그런 다음 앞에서 사용한 명령을 사용하여 다음과 같이 4 개의 권한있는 서버 중 하나를 요청할 수 있습니다.

C:\Documents and Settings\Anton Daneyko>nslookup superuser.com 173.245.59.4
Server:  cf-173-245-59-4.cloudflare.com
Address:  173.245.59.4

Name:    superuser.com
Addresses:  141.101.114.59
      190.93.246.58
      190.93.245.58
      190.93.247.58
      190.93.244.58

보시다시피, 이번에는 권위있는 SOA 서버가 IP 주소를 반환했기 때문에 "비 정식 답변"이라는 코멘트는 더 이상 표시되지 않습니다. 이 기능은 새 도메인 이름을 만들거나 호스팅 공급자를 변경하거나 다른 도메인 등록 기관으로 이전 한 경우 새 IP 주소가 24 시간 후에도 전파되지 않아 웹 사이트에 액세스 할 수없는 경우에 특히 유용합니다. 그런 다음 SOA로 시작하여 DNS 서버가 올바른 IP 주소를 제공했는지 확인한 후 트리 아래로 더 내려갑니다. Google DNS 서버가 변경 사항을 받았는지 확인한 다음 로컬 DNS 서버가 도메인 이름을 올바른 IP 주소로 확인할 수 있는지 확인하십시오.


1

nslookup에서 기본 DNS 서버를 변경하려면 NAMEorIPofDNS 서버를 입력하여 서버를 간단히 변경할 수 있습니다. 아래 예에서 기본 DNS 서버 (192.168.50.21)를 새 것으로 변경했습니다 (4.2.2.3).

C : \ Windows \ system32> nslookup

기본 서버 : 알 수 없음

주소 : 192.168.50.21

서버 4.2.2.3

기본 서버 : c.resolvers.level3.net

주소 : 4.2.2.3

>

이제 4.2.2.3 대 192.168.50.21에 대해 쿼리 할 준비가되었습니다.


이것은 다른 답변을 복제하고 새로운 내용을 추가하지 않습니다. 실제로 새로운 내용이 없다면 답변을 올리지 마십시오.
DavidPostill

새로운 내용은 없지만 가치가 있습니다. 나는 한 번에
걸쳐이

0

연결에 사용할 기본 DNS를 구성 할 수 있습니다.
연결 속성 => 인터넷 프로토콜 (TCP / IP)로 이동하십시오. (정적 IP를 설정할 수있는 위치)
여기서 각 연결에 사용할 DNS를 수동으로 정의 할 수 있습니다.
테스트 후에는 항상 이전 값으로 다시 변경할 수 있습니다.


3
이것이 DNS 서버를 쿼리하는 "직접적인"방법이라고 생각하지 않습니다.
lepe

0

하나의 명령으로 지정된 DNS 서버에서 특정 레코드 유형 가져 오기

지정한 DNS 서버를 사용하여 nslookup에서 반환 한 기본 A 및 AAAA (및 CNAME) 레코드 이외의 레코드 유형을 조회하려면 다음을 수행하십시오.

nslookup -q=<record type> <host> <DNS server>

예를 들어 stackexchange.comDNS 서버를 사용 하여 도메인에 대한 MX 레코드를 반환 8.8.4.4하려면 명령은 다음과 같습니다.

nslookup -q=MX stackexchange.com 8.8.4.4

0

Openwrt 18.06.1 ARMv6 Raspberry pi에서 작업하고 dnscrypt-proxy뿐만 아니라 tor dns도 설정하므로 매우 비슷한 문제가 발생했습니다. 근본 원인은 로컬 isp가 root-servers.net으로부터 안전하지 않은 응답을 가로 채고 사이트를 찾을 수 없다는 응답을 자체 웹 사이트로 리디렉션하기 때문입니다. 큰 보안 결함은 아니지만 특히 유용하지는 않습니다.

특정 주소를 쿼리 할 때 수행 할 첫 번째 테스트는 실제로 유효하지 않은 주소를 시도하는 것입니다. 서버, 포트 및 호스트 매개 변수를 사용할 때 적절한 null 응답을 받는지 확인하십시오. 많은 안내서와 버전이 있으며 생각하기 쉽습니다. 실제로 캐시 된 결과 또는 기본 서버에서 응답 할 때 포트 테스트를 수행하고 있습니다. 널 응답을 얻은 후 활성 서버 주소 및 포트로 작업하십시오. netstat -plnt를 사용하여 openwrt에 활성 포트를 표시 할 수 있지만 일부 라우터 명령을 먼저 설치해야 할 수도 있습니다. 포트 9053에서 설정 한 Tor 서비스는 여기에 표시되지 않지만 torrc 파일에 DNSPort 127.0.0.1:9053을 추가 한 후에도 여전히 작동합니다. 이 플랫폼의 nslookup 형식은 [host] 및 [server] 매개 변수를 허용하며 nslookup cnn.com 127.0.0.1 # 9053으로 tons dns를 테스트 할 수 있습니다. nslookup cnn 명령으로 dnscrypt를 테스트 할 수 있습니다. com 127.0.0.1 # 5353 유효하지 않은 포트 번호 또는 도메인으로 변경하면 응답을받습니다. ; 연결 시간이 초과되었습니다; 서버에 접근 할 수 없음 Dig는 openwrt에서도 작동하지만 bind-dig 패키지에서 설치해야합니다. dig -q 127.0.0.1 -p 9053 www.bbc.com 그리고 유효하지 않은 포트에 대해서는 다시 실패합니다. 필자의 경우 이전에 안전하지 않은 dns 항목을 사용한 네트워크에 대해 / etc / config / network의 항목을 변경하고 옵션 dns '127.0.0.1'을 설정하면 문제가 해결되었습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.