우리가 통제 할 수없는 깨진 DNS 서버를 보완하기 위해.
우리의 문제 : 우리는 다양한 IPv4 전용 사이트에서 센서 데이터를 수집하는 내장 장치를 배포합니다. 일부 사이트는 잘못 구성되었거나 파손 된 DNS 캐시 및 / 또는 AAAA 쿼리를 모두 무시하거나 응답이 깨진 (예 : 잘못된 소스 IP!) 응답하는 방화벽과 같이 네트워크가 제대로 유지되지 않았습니다. 시설 부서의 외부 공급 업체 인 우리는 (때로는 꺼리는) IT 부서에 영향을 미치지 않습니다. 조만간 DNS 서버 / 방화벽을 고칠 가능성은 미미합니다.
장치에 미치는 영향은 각 gethostbyname ()마다 프로세스가 AAAA 쿼리가 시간 초과 될 때까지 기다려야하며,이 시점에서 일부 프로세스는 이미 연결 시도 시간을 모두 초과 한 것입니다.
나는 해결책을 찾고 있습니다 ...
- 시스템 전체. 수십 개의 응용 프로그램을 개별적으로 재구성 할 수 없습니다
- 비 영구적이고 구성 가능합니다. IPv6을 고정 / 롤아웃 할 때 / 재설정해야합니다. 재부팅은 정상입니다.
- 솔루션에 glibc와 같은 핵심 라이브러리를 교체해야하는 경우 교체 라이브러리 패키지는 잘 관리 될 것으로 알려진 리포지토리 (예 : 데비안 테스팅, 우분투 유니버스, EPEL)에서 제공해야합니다. 셀프 빌딩은 여러 가지 이유로 옵션이 아니므로 어디서부터 시작 해야할지조차 모르므로 전혀 나열하지 않습니다 ...
가장 확실한 해결책은 AAAA 레코드를 쿼리하지 않도록 / etc / { resolv , nsswitch , gai } .conf를 통해 확인자 라이브러리를 구성하는 것 입니다. 경우 resolv.conf 옵션 no-inet6
제안으로 여기는 것입니다 정확히 내가 무엇을 찾고. 불행히도 적어도 우리 시스템에는 구현되지 않았습니다 (Debian 7의 libc6-2.13-38 + deb7u4; Ubuntu 14.04의 libc6-2.19-0ubuntu6.3)
그럼 어떻게? SF와 다른 곳에서 제안 된 다음과 같은 방법을 찾았지만 작동하지 않습니다.
- 예를 들어 /etc/modprobe.d/에서 ipv6 LKM을 블랙리스트에 추가하여 IPv6을 모두 비활성화합니다
sysctl -w net.ipv6.conf.all.disable_ipv6=1
. ( 호기심에서 : 리졸버가 IPv6이 비활성화 된 곳에서 AAAA를 요구하는 이유는 무엇입니까? ) options inet6
/etc/resolv.conf에서 제거 처음inet6
에는 없었지만 요즘 기본적으로 단순히 활성화되어 있습니다.options single-request
/etc/resolv.conf에서 설정 이렇게하면 A 및 AAAA 쿼리가 병렬이 아닌 순차적으로 수행됩니다.precedence
/etc/gai.conf에서 변경 DNS 쿼리에는 영향을 미치지 않으며 여러 회신이 처리되는 방식에만 영향을줍니다.- 외부 확인자 (또는 손상된 DNS 서버를 우회하는 로컬 확인자 데몬을 실행)를 사용하면 도움이되지만 일반적으로 회사의 방화벽 정책에서는 허용되지 않습니다. 또한 내부 리소스에 액세스 할 수 없게 만들 수 있습니다.
다른 추악한 아이디어 :
- localhost에서 DNS 캐시를 실행하십시오. AAAA가 아닌 모든 쿼리를 전달하지만 NOERROR 또는 NXDOMAIN (해당 A 쿼리의 결과에 따라)으로 AAAA 쿼리에 응답하도록 구성하십시오. 그래도이 작업을 수행 할 수있는 DNS 캐시를 알지 못합니다.
- 영리한 iptables u32 일치 또는 Ondrej Caletka의 iptables DNS 모듈 을 사용하여 AAAA 쿼리를 일치 시키십시오. 빈 NOERROR를 가진 모든 것.
SE에는 비슷한 관련 질문이 있습니다. 내 질문은 자주 제기되는 비 작동 솔루션을 블랙리스트에 표시하고 단일 응용 프로그램에만 국한되지 않으므로 명시 적 요구 사항을 나열하므로 해결하려는 실제 문제를 구체화하는 한 다릅니다. 이 토론에 이어 질문을 게시했습니다.