BIND/DNSMASQ 쿼리가 우분투 서버 14.04.1에서 중단됩니다.

BIND/DNSMASQ 쿼리가 우분투 서버 14.04.1에서 중단됩니다.

내 VPS에서 BIND 및 DNSMASQ 구성을 테스트하고 있습니다. 많은 수의 쿼리(초당 약 10-20개)를 제출하는 프로그램을 실행하면 DNS 응답이 무작위로 더 이상 돌아오지 않습니다. 초당 3개의 쿼리가 전송되면 쿼리가 잠기지 않습니다.

예를 들어:

  • 45초 동안 쿼리하고 응답을 받을 수 있습니다. 그런데 갑자기 5초 동안 답장이 오지 않더군요.
  • 15초 동안 질문하고 답변을 받을 수 있습니다. 그러다가 갑자기 10초 동안 답장을 볼 수 없었습니다.

나는 다음을 보고 무슨 일이 일어나고 있는지 알아내려고 노력하고 있습니다.

  • 메모리 사용량
  • CPU 사용량
  • 바인드 디버깅의 시스템 로그 항목
  • IPTABLES 패킷 스트림을 관찰하여 iptables가 너무 많은 패킷을 동시에 처리할 수 없는지 확인하십시오. (DNS 요청이 내 IP에서만 나오도록 제한하고 모든 포트의 다른 모든 IP 요청을 차단하는 iptables 규칙이 있습니다)
  • BIND 및 DNSMASQ를 테스트했습니다.

내가 보는 것:

  • BIND와 DNSMASQ에는 동일한 문제가 있습니다.
  • 메모리 사용량이 정상으로 표시되고 서버가 프로세스를 종료하고 다시 시작하지 않습니다.
  • 전체 시스템 CPU 사용량은 0.7%를 초과하지 않습니다.
  • 바인딩 캐시 크기를 제한해도 눈에 띄는 차이가 발생하지 않습니다.
  • 적절한 규칙으로 IPTABLES를 관찰할 때 DNS 쿼리가 응답을 중지하고 DNS 로그 롤링이 중지되면 IPTABLES 수신 패킷이 정상적으로 스트리밍되는 것을 발견했습니다. 그러나 DNS 로그가 중지되는 동안 IPTABLES에서 볼 수 있는 것은 IPTABLES 규칙의 특정 IP로 전송된 패킷이 고정되고 전체 수신 패킷이 계속 롤링되고 SSH 터미널 창이 분명히 계속 업데이트된다는 것입니다. 전체적으로 들어오는 패킷의 수가 증가하는 것을 볼 수 있습니다.
  • 그런 다음 모든 IPTABLES 규칙 새로 고침을 테스트하고 iptables 규칙을 새로 고친 후에도 문제가 여전히 존재하는지 확인했습니다. 그런데 들어오는 패킷의 개수를 보면 규칙이 있을 때와 마찬가지로 전체 개수가 계속해서 늘어나는 것을 볼 수 있습니다.

iptables가 들어오는 패킷을 충분히 빠르게 처리하지 못하는지 여전히 100% 알 수 없습니까? (규칙이 모두 플러시되더라도?) (초당 20개 정도의 DNS 쿼리로 인해 패킷을 처리하는 동안 iptables가 중단될 가능성은 거의 없다고 생각합니다)

이 정지의 원인은 정확히 무엇입니까? 다음은 나를 매우 혼란스럽게 만듭니다.

  • SSH 터미널은 쿼리가 중단되는 동안 콘솔 화면 새로 고침/명령 실행에 문제가 없습니다.
  • 쿼리가 일시 중단되는 동안 다른 프로그램(예: top/htop)도 계속 업데이트됩니다.
  • IP 카운터에 대한 독립 규칙이 커지지 않는 동안 iptables 전체 수신 패킷 카운터가 계속 롤링됩니다.

동시에 두 IP에서 쿼리 전송을 시도하고 테스트할 수 없었습니다(이 모든 문제가 내가 보내는 DNS 트래픽을 중단시키는 ISP/라우터 때문일 수 있다는 것을 알고 있습니까?). 그러나 공용 IP를 통해 라우팅되는 네트워크의 서로 다른 두 클라이언트 컴퓨터에서 데이터를 보내고 있습니다. 나는 이것이 가능한 문제라고 생각하지 않습니다.

BIND와 DNSMASQ는 동일한 유형의 구성 설정에서 동일한 문제를 갖고 있기 때문에 문제가 어디에 있는지 파악하기 어렵습니다. 바인딩/dnsmasq 문제인가요 아니면 일종의 시스템 패킷 처리 문제인가요?

또한 Google DNS 8.8.8.8을 가리키는 테스트를 했는데 동일한 문제가 발생했습니다. 이로 인해 내 ISP/라우터와 관련이 있을 수 있다고 생각됩니다. 궁금한 점은 이렇게 적은 양의 트래픽으로 인해 라우터/ISP가 다운될 수 있습니까? 요청이 너무 빨리 들어오면 Google DNS가 요청을 차단하고 있는 것일까요?

어떤 아이디어가 있나요?

내 VPS는 CPU 코어 1개, 256MB RAM, 10GB SSD입니다. 시스템 사용량은 일반적으로 약 130-160MB입니다.

답변1

선택한 DNS 전달자(ISP 및 Google)의 속도 제한일 수 있습니다.

라우터(상태 저장 방화벽)의 연결 추적으로 인해 테이블이 가득 차고 새 DNS 요청이 NAT 테이블의 항목에 할당되지 않아 전달되지 않을 수도 있습니다. 그런데 VPS가 있으면 NAT를 사용하지 않는 것 같죠?

iptables매우 많은 수의 패킷에는 문제가 없습니다. 초당 수천 개의 요청이 있는 4Gbit/s 이상의 트래픽을 갖춘 비대칭 라우팅 설정에 사용되는 것을 보았습니다. conntrack테이블이 충분히 큰지 확인 net/nf_conntrack_max = 524288하세요 sysctl.conf.

외부 전달자에 의존하지 않도록 BIND를 자체 IP에 대한 재귀 전달자로 구성하는 것이 도움이 될 수 있습니다. 그런 다음 NAT에 도움이 될 수 있는 2~3개가 아닌 다양한 DNS 서버에 DNS 요청을 보냅니다.

관련 정보