이 사례 시나리오는 Linux가 내장된 라우터에 대한 것이지만 대답은 아마도 모든 Linux 시스템에서 동일할 것이라고 생각합니다.
이 내 꺼야DNS 확인:
~ $ cat /etc/resolv.conf
nameserver 80.58.61.250
nameserver 80.58.61.254
~ $ ping 80.58.61.250
PING 80.58.61.250 (80.58.61.250): 56 data bytes
64 bytes from 80.58.61.250: seq=0 ttl=250 time=50.0 ms
64 bytes from 80.58.61.250: seq=1 ttl=250 time=40.0 ms
^C
--- 80.58.61.250 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 40.0/45.0/50.0 ms
~ $ ping www.google.es
PING www.google.es (2a00:1450:4007:808::101f): 56 data bytes
ping: sendto: Network is unreachable
~ $ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=57 time=50.0 ms
64 bytes from 8.8.8.8: seq=1 ttl=57 time=40.0 ms
64 bytes from 8.8.8.8: seq=2 ttl=57 time=40.0 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 40.0/43.3/50.0 ms
보시다시피 8.8.8.8
인터넷( )에서는 응답이 있지만 도메인 이름( www.google.es
, 마찬가지로 )에서는 www.google.com
응답이 없습니다.
DNS 서버( 80.58.61.250
)가 ping에 응답합니다.
그렇다면 DNS 서버에 문제가 있는 것인지 궁금합니다.
텔넷이나 그런 방법이 있나요?지정된 DNS가 있는지 확인합니다.IP가 제대로 작동합니까(예: 도메인 이름이 요청될 때 IP 주소로 응답)?
예를 들어 SSH 서버를 테스트할 때 가능한 기술 중 하나는 다음과 같습니다.
C:\Users\Luis>telnet Midnighter- 22
SSH-2.0-OpenSSH_6.7p1 Debian-5
타사 도구를 수락합니다. 명령줄과 오픈 소스가 선호됩니다.
답변1
ICMP 핑은 작동 중인 DNS 서버가 이러한 요청에 방화벽을 걸 수 있기 때문에 좋지 않은 테스트입니다. DNS-over-UDP에는 SSH-over-TCP와 같은 "연결" 핸드셰이크(SYN/SYN+ACK/ACK)가 없으므로 가장 좋은 방법은 가상의 DNS 서버에 DNS 쿼리를 실행하고 무슨 일이 일어나는지 확인하는 것입니다. . 방화벽이 있거나 쿼리가 DNS 속도 제한에 대해 실행되는 경우(방화벽 수준 또는 DNS 서버 자체에서 이러한 쿼리는 현재 DNS 증폭 공격으로 인해 더 일반적임) 쿼리 또는 DNS 서버에 따라 다릅니다. (예를 들어, 비재귀적 쿼리에 대한 것입니다. 쿼리가 재귀적입니까 NS
? 아니면 DNS 서버가 로컬이 아닌 보기로 간주하는 클라이언트입니까? 등)
나는 보통 dig
(또는Net::DNS
Perl 프로그램에서) DNS 확인을 위해. 또한 보기모니터링 소프트웨어, DNS에 대한 모니터링, 그래프 작성 및 보고를 지원해야 하지만 내장 라우터에서 사용하기에는 너무 무거울 수 있습니다. 몇 가지 dig
예:
# possibly get server version info (unreliable)
$ dig +short @128.95.120.1 TXT CHAOS version.bind
"UW 3A7_3"
$ dig +short @8.8.8.8 TXT CHAOS version.bind
$
$ dig +short @8.8.8.8 NS example.org
b.iana-servers.net.
a.iana-servers.net.
$ dig +short @8.8.8.8 SOA example.org
sns.dns.icann.org. noc.dns.icann.org. 2015082419 7200 3600 1209600 3600
$
$ dig +short @8.8.4.4 A www.example.org
93.184.216.34
$ dig +short @8.8.4.4 CNAME www.example.org
$
# checking via TCP and via IPv6 might also be useful
$ dig +tcp +short @2001:4860:4860::8888 A www.example.org
93.184.216.34
$
BIND 유틸리티를 설치하지 않으려면 nslookup
및 명령도 있습니다. getent hosts
이는 강력하거나 매우 약하지 dig
는 않지만 특정 호스트에 대한 조회가 특정 IP를 반환하는지 확인해야 하는 경우에는 충분할 수 있습니다.
답변2
오늘 저는 매우 이상한 문제에 직면했습니다. 실제로 내 DNS 서버는 하나의 도메인을 제외한 모든 도메인에서 작동합니다. 다른 모든 도메인에서 작동하므로 분명히 방화벽 문제는 아닙니다. 뿐만 아니라 한동안 방화벽을 변경하지 않았습니다.
좀 더 자세히 살펴보니 해당 지역의 캐시된 버전이 언급된 페이지를 마침내 발견했습니다. 그 캐시가 범인입니다. 삭제하고 서버를 다시 시작했더니 다시 작동하더군요. 도메인이 실패하기 전에 도메인을 변경했지만 여전히 그렇습니다. 이는 예상된 동작이 아닙니다.
$ dig NS www.example.com
; <<>> DiG 9.11.3-1ubuntu1.12-Ubuntu <<>> NS www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62918
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;www.example.com. IN NS
;; Query time: 605 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Fri Jun 05 13:20:25 PDT 2020
;; MSG SIZE rcvd: 42
파일을 재설정하는 명령:
$ sudo rm /var/lib/bind/example.com.zone.jnl
$ sudo systemctl restart bind9
그 후에는 예상대로 작동했습니다.
흥미로운 점은 named-checkzone
소스 파일이 괜찮기 때문에 도구가 오류를 반환하지 않는다는 것입니다...
$ sudo named-checkzone example.com /etc/lib/bind/example.com.zone
위에서 언급했듯이 문서는 괜찮습니다. 일기가 때때로 우리를 속이는 것뿐입니다.