Ubuntu에서 BIND를 사용하여 재귀 로컬 이름 서버를 실행하고 있습니다. 현재 IPv4 네트워크가 있습니다. BIND는 기본적으로 쿼리를 수신하고 IPv4와 IPv6 모두에서 이름을 재귀적으로 확인하는 것으로 보입니다.
다음과 같은 시스템 로그에 오류가 많이 발생합니다.
이름 지정[1907]: 'DELETED.FOR.PRIVACY.in-addr.arpa/PTR/IN' 구문 분석 오류(네트워크에 연결할 수 없음): 2001:503:ba3e::2:30#53
이 경우 2001:503:ba3e::2:30
재귀 프로세스의 첫 번째 서버(a.root-servers.net)에도 연결할 수 없습니다.
때때로(실제로는 항상 그럴 수도 있지만 확실하지는 않습니다.) 이런 일이 발생하면 dig는 SERVFAIL을 반환합니다. BIND가 연결 가능한 서버를 찾을 때까지 장애 조치를 수행하는 한 이러한 오류 메시지가 표시되더라도 상관하지 않지만 그렇지 않은 것 같습니다. 내 질문은 현재 IPv6 네트워크에 연결할 수 없기 때문에 BIND가 찾을 수 있는 다른 이름 서버로 되돌리지 않는 이유는 무엇입니까? 이것이 바로 네임서버를 여러 개 갖는 것의 핵심이라고 생각합니다. 쿼리를 해결할 때 BIND가 시도할 이름 서버 수입니다.
BIND에서 IPv6를 비활성화할 수 있다는 것을 알고 있지만 그렇게 하면 로컬 네트워크가 더 이상 자동으로 IPv6으로 업그레이드할 준비가 되지 않기 때문에 이는 나쁜 습관처럼 보입니다.
답변1
IPv6 경로가 있는지 모르는 경우 이를 필요로 하는 모든 데몬에서 이를 비활성화하는 것이 현명할 것입니다. 부분적으로는 IPv4 및 IPv6 표현이 모두 있는 DNS 이름의 경우 문제가 발생하는 것이 일반적이기 때문입니다. , IPv6은 IPv4보다 우선순위가 높습니다.
공용 IP 주소가 없더라도 데몬이 IPv6 링크 로컬 주소를 소스로 사용하여 IPv6 연결을 시도하는 것은 드문 일이 아니며 적어도 이메일과 DNS에서 이런 일이 수년 동안 발생하는 것을 보았습니다. 서비스.
IPv6에서 볼 수 있는 오류 유형에 대해 더욱 걱정스러운 점은 시간 초과가 자주 발생하고 IPv4 트랜잭션이 불가능하다는 것입니다.
또한 가까운 미래에 IPv6 지원을 다시 활성화하는 것을 막을 수는 없습니다. IPv4 전용 DNS를 사용한다고 해서 가까운 미래에 네트워크 어딘가에서 IPv6 주소를 확인하는 것을 막을 수는 없습니다. 멀티 스택 IPv4/IPv6 시스템이 나타납니다.
따라서 최선을 다해 BIND를 IPv4로만 설정하세요. 데비안에서는 -4로 실행하겠습니다. 다음과 같이 편집 /etc/default/bind9
하고 변경할 수 있습니다.
OPTIONS="-u bind -4"
또한 다음과 같이 db.root에서 모든 AAAA 주소를 추출하겠습니다.
grep -v "AAAA" /etc/bind/db.root > /tmp/a
mv /tmp/a /etc/bind/db.root
/etc/gai.conf
또한 IPv6보다 IPv4에 우선순위를 부여하기 위해 다음 줄을 편집하고 추가하겠습니다 .
precedence ::ffff:0:0/96 100
여기에서도 내 답변을 읽는 것이 좋습니다.
첫 번째 이메일은 반송되고 두 번째 이후 이메일은 반송됩니다.
시간 초과의 경우 TCP DNS 요청 시간이 초과되면 x번 시도 후 DNS RFC는 UDP n번 시도를 사용하여 동일한 요청이 재시도되도록 정의합니다.
IPv6 요청은 여전히 수행을 시도하고 있기 때문에 분명히 시간 초과되었지만 경로는 아무데도 가지 않습니다.
IPv6 요청당 약 6번의 시도 및 시간 초과 외에도 다음 IPv6 루트로 넘어갈 수 있습니다. 루트 이름 서버 목록에 시도할 루트 이름 서버가 너무 많아서 실패한 IPv6 주소를 가정하는 것이 불가능합니다. IPv4 주소를 자동으로 다시 시도합니다. - 따라서 전체 요청을 받을 때 시간의 큰 변화는 이 경우 거의 예상되는 동작이라고 감히 말하고 싶습니다.
면책 조항: 이것은 총체적인 동작입니다. 저는 BIND 코드의 더러운 세부 사항이 아니라 파서의 동작을 잘 알고 있습니다.
그것을 사용해야만 무슨 일이 일어나고 있는지 더 잘 이해할 tcdump
수 있습니다 . dnstracer
을 살펴보는 것도 도움이 될 수 있습니다 named.stats
.
바쁜 프로덕션 서버에서는 이러한 시간 초과/요청이 추가될 수 있다는 점도 주목할 가치가 있습니다.
하지만 제가 보기엔 당신은 단지 지나치게 생각하고 많은 가정을 하고 있는 것 같습니다.
권장되는 접근 방식은 구현하지 않은 서비스를 사용하려고 시도하지 않는 것입니다.
IPv4 모드에서만 BIND를 실행하는 것이 좋습니다.