BIND9: DNS 확인이 가끔(!) 오래 걸리거나 전혀 작동하지 않는 경우가 있습니다.

BIND9: DNS 확인이 가끔(!) 오래 걸리거나 전혀 작동하지 않는 경우가 있습니다.

내 네트워크의 RPi3에서 실행되는 BIND 9.9.5-9+deb8u8-Raspbian DNS 서버가 있습니다. 내 홈 영역이 아닌 모든 항목에 대해 전달자 "{ 8.8.8.8; 8.8.4.4; 208.67.222.222; 208.67.220.220; };"를 사용하여 "전달 전용"으로 구성됩니다.

가) 정상적인 상황

일반적으로 DNS 확인은 정상적으로 작동합니다. 결과가 캐시에 없더라도 전달 서버에서 가져와서 일반적으로 100밀리초 이내에 클라이언트로 다시 전달됩니다. 예는 다음과 같습니다.

client:~ $ time nslookup faz.net
Server:     [my_server]
Address:    [my_server]#53

Non-authoritative answer:
Name:   faz.net
Address: 40.118.6.229

real    0m0.095s […]

이것이 tcpdump의 트래픽 모습입니다. 제가 알 수 있는 한 모든 것이 완벽하며, DNSSEC 검증이 제대로 작동하는 것 같습니다.

06:48:21.880240 IP [my_client].59563 > [my_server].domain: 614+ A? faz.net. (25)
06:48:21.881246 IP [my_server].28766 > google-public-dns-a.google.com.domain: 30021+% [1au] A? faz.net. (36)
06:48:21.916031 IP google-public-dns-a.google.com.domain > [my_server].28766: 30021 1/0/1 A 40.118.6.229 (52)
06:48:21.917093 IP [my_server].44792 > google-public-dns-a.google.com.domain: 10551+% [1au] DS? faz.net. (36)
06:48:21.952356 IP google-public-dns-a.google.com.domain > [my_server].44792: 10551 0/6/1 (757)
06:48:21.956635 IP [my_server].domain > [my_client].59563: 614 1/0/0 A 40.118.6.229 (41)

b) 문제가 있는 상황

그러나 경우에 따라 결과를 제공하는 데 오랜 시간(최대 14초)이 소요됩니다. 또는 전혀 얻지 못합니다(dig @8.8.4.4 도메인이 약 50밀리초 내에 올바른 주소를 제공하더라도). 예는 다음과 같습니다.

client:~ $ time nslookup sueddeutsche.net
Server:     [my_server]
Address:    [my_server]#53

Non-authoritative answer:
Name:   sueddeutsche.net
Address: 213.61.179.40
Name:   sueddeutsche.net
Address: 213.61.179.41

real    0m4.994s […]

이는 tcpdump를 통한 4.9초의 트래픽에서 일어나는 일입니다.

06:48:47.608104 IP [my_client].53592 > [my_server].domain: 51417+ A? sueddeutsche.net. (34)
06:48:47.609158 IP [my_server].1507 > google-public-dns-a.google.com.domain: 56678+% [1au] A? sueddeutsche.net. (45)
06:48:48.809517 IP [my_server].27279 > google-public-dns-b.google.com.domain: 22525+% [1au] A? sueddeutsche.net. (45)
06:48:50.009592 IP [my_server].37926 > resolver2.opendns.com.domain: 41597+% [1au] A? sueddeutsche.net. (45)
06:48:50.081468 IP resolver2.opendns.com.domain > [my_server].37926: 41597 2/0/1 A 213.61.179.41, A 213.61.179.40 (77)
06:48:50.082768 IP [my_server].1301 > resolver2.opendns.com.domain: 24793+% [1au] DS? sueddeutsche.net. (45)
06:48:50.233748 IP resolver2.opendns.com.domain > [my_server].1301: 24793 0/1/1 (121)
06:48:50.235373 IP [my_server].57628 > resolver1.opendns.com.domain: 8635+% [1au] DS? sueddeutsche.net. (45)
06:48:50.282862 IP resolver1.opendns.com.domain > [my_server].57628: 8635 0/1/1 (121)
06:48:50.287796 IP [my_server].32127 > google-public-dns-a.google.com.domain: 924+% [1au] DS? sueddeutsche.net. (45)
06:48:51.487853 IP [my_server].61208 > google-public-dns-b.google.com.domain: 39031+% [1au] DS? sueddeutsche.net. (45)
06:48:51.547262 IP google-public-dns-b.google.com.domain > [my_server].61208: 39031 0/6/1 (766)
06:48:51.551509 IP [my_server].52786 > resolver2.opendns.com.domain: 28853+% [1au] Type32769? sueddeutsche.net.dlv.isc.org. (57)
06:48:51.589595 IP resolver2.opendns.com.domain > [my_server].52786: 28853 NXDomain 0/1/1 (125)
06:48:51.592942 IP [my_server].30477 > resolver2.opendns.com.domain: 17693+% [1au] DS? sueddeutsche.net.dlv.isc.org. (57)
06:48:51.790903 IP resolver2.opendns.com.domain > [my_server].30477: 17693 NXDomain 0/1/1 (125)
06:48:51.792342 IP [my_server].6503 > resolver1.opendns.com.domain: 17946+% [1au] DS? sueddeutsche.net.dlv.isc.org. (57)
06:48:52.005244 IP resolver1.opendns.com.domain > [my_server].6503: 17946 NXDomain 0/1/1 (125)
06:48:52.006662 IP [my_server].52356 > google-public-dns-b.google.com.domain: 39821+% [1au] DS? sueddeutsche.net.dlv.isc.org. (57)
06:48:52.334093 IP google-public-dns-b.google.com.domain > [my_server].52356: 39821 NXDomain 0/6/1 (748)
06:48:52.342161 IP [my_server].56473 > resolver1.opendns.com.domain: 17279+% [1au] Type32769? sueddeutsche.net.dlv.isc.org. (57)
06:48:52.382211 IP resolver1.opendns.com.domain > [my_server].56473: 17279 NXDomain 0/1/1 (125)
06:48:52.383674 IP [my_server].52741 > google-public-dns-b.google.com.domain: 65018+% [1au] Type32769? sueddeutsche.net.dlv.isc.org. (57)
06:48:52.424757 IP google-public-dns-b.google.com.domain > [my_server].52741: 65018 NXDomain$ 0/6/1 (748)
06:48:52.430544 IP [my_server].domain > [my_client].53592: 51417 2/0/0 A 213.61.179.40, A 213.61.179.41 (66)

이제 내가 알 수 있는 바에 따르면 06:48:50.081468에 my_server가 resolver2.opendns.com에서 올바른 응답을 받는 반면 Google은 아무 것도 제공하지 않는 것 같습니다. 그런 다음 My_server가 DNSSEC 확인을 요청했고, resolver2.opendns.com이 응답했습니다. 이것이 my_server가 결과를 my_client로 다시 전달하는 시점이 아니겠습니까? 왜 이렇게 되지 않나요?

이는 dasoertliche.de 도메인의 두 번째 경우로, 문제 없이 작동합니다.

23:39:01.569234 IP [my_client].52174 > [my_server].domain: 57873+ A? dasoertliche.de. (33)
23:39:01.570413 IP [my_server].60368 > resolver2.opendns.com.domain: 39796+% [1au] A? dasoertliche.de. (44)
23:39:01.617721 IP resolver2.opendns.com.domain > [my_server].60368: 39796 1/0/1 A 82.98.79.52 (60)
23:39:01.618712 IP [my_server].41112 > resolver2.opendns.com.domain: 47487+% [1au] DS? dasoertliche.de. (44)
23:39:01.667144 IP resolver2.opendns.com.domain > [my_server].41112: 47487 0/1/1 (100)
23:39:01.668616 IP [my_server].24077 > resolver1.opendns.com.domain: 13310+% [1au] DS? dasoertliche.de. (44)
23:39:01.854327 IP resolver1.opendns.com.domain > [my_server].24077: 13310 0/1/1 (100)
23:39:01.856006 IP [my_server].38412 > google-public-dns-a.google.com.domain: 56597+% [1au] DS? dasoertliche.de. (44)
23:39:03.056263 IP [my_server].35182 > google-public-dns-b.google.com.domain: 45370+% [1au] DS? dasoertliche.de. (44)
23:39:04.256333 IP [my_server].47744 > google-public-dns-a.google.com.domain: 50222+% [1au] DS? dasoertliche.de. (44)
23:39:04.305620 IP google-public-dns-a.google.com.domain > [my_server].47744: 50222| 0/0/1 (44)
23:39:04.306296 IP [my_server].45040 > google-public-dns-a.google.com.domain: Flags [S], seq 3961861791, win 29200, options [mss 1460,sackOK,TS val 11766745 ecr 0,nop,wscale 7], length 0
23:39:04.345835 IP google-public-dns-a.google.com.domain > [my_server].45040: Flags [S.], seq 2448404480, ack 3961861792, win 42408, options [mss 1380,sackOK,TS val 4100658423 ecr 11766745,nop,wscale 7], length 0
23:39:04.345899 IP [my_server].45040 > google-public-dns-a.google.com.domain: Flags [.], ack 1, win 229, options [nop,nop,TS val 11766749 ecr 4100658423], length 0
23:39:04.346167 IP [my_server].45040 > google-public-dns-a.google.com.domain: Flags [P.], seq 1:47, ack 1, win 229, options [nop,nop,TS val 11766749 ecr 4100658423], length 4662876+% [1au] DS? dasoertliche.de. (44)
23:39:04.385803 IP google-public-dns-a.google.com.domain > [my_server].45040: Flags [.], ack 47, win 332, options [nop,nop,TS val 4100658463 ecr 11766749], length 0
23:39:04.394945 IP google-public-dns-a.google.com.domain > [my_server].45040: Flags [P.], seq 1:752, ack 47, win 332, options [nop,nop,TS val 4100658472 ecr 11766749], length 75162876 0/6/1 (749)
23:39:04.394975 IP [my_server].45040 > google-public-dns-a.google.com.domain: Flags [.], ack 752, win 240, options [nop,nop,TS val 11766753 ecr 4100658472], length 0
23:39:04.398143 IP [my_server].45040 > google-public-dns-a.google.com.domain: Flags [F.], seq 47, ack 752, win 240, options [nop,nop,TS val 11766754 ecr 4100658472], length 0
23:39:04.401876 IP [my_server].37878 > resolver2.opendns.com.domain: 50849+% [1au] Type32769? dasoertliche.de.dlv.isc.org. (56)
23:39:04.437774 IP google-public-dns-a.google.com.domain > [my_server].45040: Flags [F.], seq 752, ack 48, win 332, options [nop,nop,TS val 4100658515 ecr 11766754], length 0
23:39:04.437858 IP [my_server].45040 > google-public-dns-a.google.com.domain: Flags [.], ack 753, win 240, options [nop,nop,TS val 11766758 ecr 4100658515], length 0
23:39:04.456088 IP resolver2.opendns.com.domain > [my_server].37878: 50849 NXDomain 0/1/1 (124)
23:39:04.457411 IP [my_server].38743 > resolver2.opendns.com.domain: 45844+% [1au] DS? dasoertliche.de.dlv.isc.org. (56)
23:39:04.658497 IP resolver2.opendns.com.domain > [my_server].38743: 45844 NXDomain 0/1/1 (124)
23:39:04.659855 IP [my_server].39296 > resolver1.opendns.com.domain: 17204+% [1au] DS? dasoertliche.de.dlv.isc.org. (56)
23:39:04.708134 IP resolver1.opendns.com.domain > [my_server].39296: 17204 NXDomain 0/1/1 (124)
23:39:04.713195 IP [my_server].55899 > google-public-dns-a.google.com.domain: 5854+% [1au] DS? dasoertliche.de.dlv.isc.org. (56)
23:39:04.780837 IP google-public-dns-a.google.com.domain > [my_server].55899: 5854 NXDomain 0/6/1 (736)
23:39:04.786940 IP [my_server].27908 > resolver1.opendns.com.domain: 4148+% [1au] Type32769? dasoertliche.de.dlv.isc.org. (56)
23:39:05.267688 IP resolver1.opendns.com.domain > [my_server].27908: 4148 NXDomain 0/1/1 (124)
23:39:05.269026 IP [my_server].38523 > google-public-dns-a.google.com.domain: 60609+% [1au] Type32769? dasoertliche.de.dlv.isc.org. (56)
23:39:06.469277 IP [my_server].58501 > google-public-dns-b.google.com.domain: 5485+% [1au] Type32769? dasoertliche.de.dlv.isc.org. (56)
23:39:06.572296 IP [my_client].52174 > [my_server].domain: 57873+ A? dasoertliche.de. (33)
23:39:07.669762 IP [my_server].52520 > google-public-dns-a.google.com.domain: 43149+% [1au] Type32769? dasoertliche.de.dlv.isc.org. (56)
23:39:07.706440 IP google-public-dns-a.google.com.domain > [my_server].52520: 43149| 0/0/1 (56)
23:39:07.706903 IP [my_server].59047 > google-public-dns-a.google.com.domain: Flags [S], seq 4227748459, win 29200, options [mss 1460,sackOK,TS val 11767085 ecr 0,nop,wscale 7], length 0
23:39:07.747595 IP google-public-dns-a.google.com.domain > [my_server].59047: Flags [S.], seq 719567413, ack 4227748460, win 42408, options [mss 1380,sackOK,TS val 3894129283 ecr 11767085,nop,wscale 7], length 0
23:39:07.747657 IP [my_server].59047 > google-public-dns-a.google.com.domain: Flags [.], ack 1, win 229, options [nop,nop,TS val 11767089 ecr 3894129283], length 0
23:39:07.747982 IP [my_server].59047 > google-public-dns-a.google.com.domain: Flags [P.], seq 1:59, ack 1, win 229, options [nop,nop,TS val 11767089 ecr 3894129283], length 5821405+% [1au] Type32769? dasoertliche.de.dlv.isc.org. (56)
23:39:07.788998 IP google-public-dns-a.google.com.domain > [my_server].59047: Flags [.], ack 59, win 332, options [nop,nop,TS val 3894129324 ecr 11767089], length 0
23:39:07.789344 IP google-public-dns-a.google.com.domain > [my_server].59047: Flags [P.], seq 1:739, ack 59, win 332, options [nop,nop,TS val 3894129325 ecr 11767089], length 73821405 NXDomain$ 0/6/1 (736)
23:39:07.789372 IP [my_server].59047 > google-public-dns-a.google.com.domain: Flags [.], ack 739, win 240, options [nop,nop,TS val 11767093 ecr 3894129325], length 0
23:39:07.790414 IP [my_server].59047 > google-public-dns-a.google.com.domain: Flags [F.], seq 59, ack 739, win 240, options [nop,nop,TS val 11767093 ecr 3894129325], length 0
23:39:07.796565 IP [my_server].domain > [my_client].52174: 57873 1/0/0 A 82.98.79.52 (49)
23:39:07.831137 IP google-public-dns-a.google.com.domain > [my_server].59047: Flags [F.], seq 739, ack 60, win 332, options [nop,nop,TS val 3894129366 ecr 11767093], length 0
23:39:07.831221 IP [my_server].59047 > google-public-dns-a.google.com.domain: Flags [.], ack 740, win 240, options [nop,nop,TS val 11767097 ecr 3894129366], length 0

다시 말하지만, 23:39:01.617721에서 my_server는 resolver2.opendns.com에서 정답을 받았지만 어떤 이유로 my_server와 Google DNS 서버 사이에 많은 통신이 일어나고 있는지 이해가 되지 않습니다.

여기서 무슨 일이 일어나고 있는지, 그리고 이 상황을 어떻게 개선할 수 있는지에 대한 아이디어가 있습니까?

다) 업데이트

free요청하신 대로 출력 결과는 다음과 같습니다.

[my_server]:~ $ free
             total       used       free     shared    buffers     cached
Mem:        996448     331696     664752      15752      29808     180668
-/+ buffers/cache:     121220     875228
Swap:            0          0          0

... 그리고 vmstat:

[my_server]:~ $ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 664752  29808 180676    0    0     0     1   20   23  0  0 100  0  0

d) 업데이트 2:

/var/log/syslog방금 내 항목이 dasoertliche.de의 해결 문제(두 번째 문제 사례)와 관련되어 있음 을 발견했습니다 . 다음과 같이:

Dec 13 23:39:01 raspi-server named[642]:   validating @0x713c0030: de SOA: got insecure response; parent indicates it should be secure
Dec 13 23:39:01 raspi-server named[642]: error (no valid RRSIG) resolving 'dasoertliche.de/DS/IN': 208.67.220.220#53
Dec 13 23:39:01 raspi-server named[642]:   validating @0x712c0030: de SOA: got insecure response; parent indicates it should be secure
Dec 13 23:39:01 raspi-server named[642]: error (no valid RRSIG) resolving 'dasoertliche.de/DS/IN': 208.67.222.222#53
Dec 13 23:39:04 raspi-server named[642]: success resolving 'dasoertliche.de/DS' (in '.'?) after reducing the advertised EDNS UDP packet size to 512 octets
Dec 13 23:39:04 raspi-server named[642]:   validating @0x711c2040: dlv.isc.org SOA: got insecure response; parent indicates it should be secure
Dec 13 23:39:04 raspi-server named[642]:   validating @0x73401378: dlv.isc.org SOA: got insecure response; parent indicates it should be secure
Dec 13 23:39:04 raspi-server named[642]: error (no valid RRSIG) resolving 'dasoertliche.de.dlv.isc.org/DS/IN': 208.67.220.220#53
Dec 13 23:39:04 raspi-server named[642]:   validating @0x713c0030: dlv.isc.org SOA: got insecure response; parent indicates it should be secure
Dec 13 23:39:04 raspi-server named[642]: error (no valid RRSIG) resolving 'dasoertliche.de.dlv.isc.org/DS/IN': 208.67.222.222#53
Dec 13 23:39:04 raspi-server named[642]: error (insecurity proof failed) resolving 'dasoertliche.de.dlv.isc.org/DLV/IN': 208.67.220.220#53
Dec 13 23:39:05 raspi-server named[642]:   validating @0x712c0030: dlv.isc.org SOA: got insecure response; parent indicates it should be secure
Dec 13 23:39:05 raspi-server named[642]: error (insecurity proof failed) resolving 'dasoertliche.de.dlv.isc.org/DLV/IN': 208.67.222.222#53
Dec 13 23:39:07 raspi-server named[642]: success resolving 'dasoertliche.de.dlv.isc.org/DLV' (in '.'?) after reducing the advertised EDNS UDP packet size to 512 octets

이제 모든 것이 더 이해가 되기 시작했다고 믿습니다. 무슨 일이 일어나고 있는지 추측하고 있습니다. OpenDNS는 DNSSEC를 지원하지 않는 것 같습니다. 따라서 my_server가 OpenDNS에서 초기(올바른) 확인을 받고 DNSSEC를 요청할 때 올바른 DNSSEC 응답이 없기 때문에 응답이 안전하지 않다고 생각해야 합니다. 따라서 23:39:01.856006부터 Google DNS로부터 확인을 시도합니다. 그러나 다음 줄은 정확히 무엇을 syslog의미 tcpdump합니까? Google이 몇 초 동안 응답하지 않은 이유는 무엇이며 Google과 my_server 간의 응답 및 다음 정보 교환은 무엇을 의미합니까?

답변1

추가 조사 결과 문제는 다음과 같습니다.

초기 설정은 두 개의 리피터로 구성됩니다.DNSSEC- 지원(GoogleDNS 8.8.8.8, 8.8.4.4) 및 일부 지원되지 않음(OpenDNS 208.67.222.222, 208.67.220.220). 다음 구성을 사용하여 DNSSEC가 완전히 활성화된 상태에서 BIND9를 실행하고 있습니다.

dnssec-enable      yes;
dnssec-validation  yes;
dnssec-lookaside   auto;

ㅏ)요청(A?)이 다음으로 전달될 때마다구글 DNS서버 my_server는 응답(A)을 수신하고 DNSSEC 쿼리(DS?)를 보내고 정답을 얻습니다. 해결이 완료되고 서명이 확인되며 모든 것이 순조롭게 진행되고 사건이 종료됩니다(위 참조,정상적인 상황).

비)요청(A?)이 다음으로 전달될 때마다오픈 DNS서버 my_server는 응답(A)을 받고 DNSSEC 쿼리(DS?)를 보냈으나 OpenDNS는 DNSSEC를 지원하지 않기 때문에 올바르게 응답하지 못했습니다. 따라서 BIND9는 syslog이를 지적 got insecure response하고 다른 곳에서 DNSSEC 유효성 검사를 받으려고 시도할 때 오류를 발생시킵니다 (위 참조,문제가 있는 사례).

나는 아직도 무슨 일이 일어났는지 완전히 이해하지 못하지만, 딸꾹질은 그때부터 시작된 것 같습니다. 이제 GoogleDNS 서버가 먼저 해당 A? 쿼리를 제공하지 않고 DS에 답변을 제공하는 것을 좋아하지 않는지 궁금합니다. 그러나 문제가 있는 두 가지 경우(sueddeutsche.net, dasoertliche.de)에서도 항목이 올바르게 서명되지 않은 것으로 나타나므로 DNSSEC가 올바른 유효성 검사를 생성할 수 없습니다. 그래서 DNSSEC 대체 유효성 검사(DLV)가 시작되었지만( Type32769?) 모든 것이 다시 중단되었습니다. 왜 그런지 모르겠어.

c) 해결책:결국 저는 다음을 수행했지만 아직 아무런 문제도 발생하지 않았습니다(그래서 문제가 해결된 것 같습니다).

먼저 중계기를 다음으로 전환했습니다.

forwarders         { 8.8.8.8; 8.8.4.4; };

이로 인해 더 이상 DNSSEC 지원이 혼동되지 않습니다. 두 번째로 댓글을 달았습니다.

//dnssec-lookaside   auto;

많은 tcpdump를 조사한 후에는 구문 분석이 느려질 때마다 GoogleDNS가 응답을 반환하는 데 시간이 걸리거나(거의 발생하지 않음) DLV 중에 꽤 자주 발생하여 지연이 발생하는 것으로 보입니다. DLV는 현재 단계적으로 폐지되고 있으므로 2017년에는 더 이상 항목을 사용할 수 없습니다.

https://www.isc.org/blogs/dlv/

나는 이것이 보안 관점에서 허용 가능하다고 생각합니다.

이제 또 다른 해결책은 GoogleDNS 서버를 버리고 OpenDNS를 전달자로 사용하는 것입니다. 그러나 위에서 언급한 모든 dnssec 항목을 주석 처리하여 DNSSEC를 완전히 비활성화해야 했습니다. OpenDNS가 이를 지원하지 않기 때문입니다. 이로 인해 내 DNS 쿼리가 취약해지며, 예를 들어 dnscryptRui F Ribeiro가 언급한 것처럼 대체 보안 계층을 추가해야 합니다 . 이것은 가치 있는 프로젝트처럼 보이지만(DNS 트래픽을 완전히 암호화하여 그대로 유지될 뿐만 아니라 공격자가 읽을 수 없기 때문에) 현재 시간 예산에서 약간 벗어났습니다.

위의 설명이 타당하다면 기꺼이 동참할 DNS 전문가가 있습니까?

관련 정보