TTL 재정의 및 외부 DNS 레코드 설정

TTL 재정의 및 외부 DNS 레코드 설정

아래와 같이 바인딩된 버전이 있습니다.

9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6.1.2

test.example.com과 Internal-test.example.cloud.com이라는 두 개의 도메인별 전달자가 있습니다.

"test.example.com" 도메인의 특정 cname을 확인해야 하는 로컬 DNS 클라이언트 또는 확인자는 내 로컬 DNS 서버에서 구성된 전달자로 전달되고 해당 응답도 캐시됩니다. 모든 것이 괜찮습니다. 문제 없습니다. 그러나 내 문제는 Fordwared 쿼리의 경우 외부 DNS 서버가 TTL 값 60으로 응답한다는 것입니다. 따라서 내부 DNS 서버는 60초 동안만 응답을 캐시합니다. 내부 DNS 서버의 TTL을 재정의할 수 있는 방법이 있습니까? 특정 도메인에 대해.

/etc/named.conf는 다음과 같습니다

options {
        directory "/var/named";
        allow-transfer{"none";};
        allow-query {localhost; any;};
        dump-file "/var/log/named_dump.db";
        max-cache-ttl 300;
};

zone "test.example.com" IN {
        type forward;
        forwarders {11.1.2.17; 11.1.3.59;};
        forward only;
};

zone "internal-test.example.cloud.com" IN {
        type forward;
        forwarders {11.1.2.17; 11.1.3.59;};
        forward only;
};

zone "domain.local" in {
    type master;
    file "domain.local";
};



[root@dchockal ~]# dig test.example.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6.1.2 <<>> test.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31197
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;test.example.com.   IN      A

;; ANSWER SECTION:
test.example.com. 60 IN      CNAME   internal-test.example.cloud.com.
internal-test.example.cloud.com. 60 IN A 121.1.2.22
internal-test.example.cloud.com. 60 IN A 121.1.2.23
internal-test.example.cloud.com. 60 IN A 121.1.4.24
internal-test.example.cloud.com. 60 IN A 121.1.4.25

;; Query time: 133 msec
;; SERVER: 11.4.152.28#53(11.4.152.28)
;; WHEN: Thu Dec 15 15:31:22 2016
;; MSG SIZE  rcvd: 175

답변1

BIND는 이를 수행할 수 없으며 이는 좋은 습관이 아닙니다. 하지만 BIND 9.10.4로 업데이트할 수 있을까요? 이 경우 prefetch- 옵션을 사용할 수 있습니다. 이렇게 하면 TTL이 만료되기 직전에 BIND가 일반적으로 사용되는 도메인의 캐시된 데이터를 업데이트하게 됩니다(특정 지역에서는 사용할 수 있지만 이 BIND 버전은 아직 Raspbian에서 사용할 수 없기 때문에 테스트할 수 없습니다). 이 옵션에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

https://serverfault.com/questions/536952/bind9-how-to-automatically-refresh-entry-after-entry-expires

예를 들어,

options {
  ...
  prefetch 2 9;
};

캐시 업데이트는 현재 캐시에 있는 모든 도메인에서 강제로 수행되며 TTL의 마지막 2초 이내에 쿼리되고 일반적으로 TTL이 9초를 초과하는 경우 수행됩니다.

참고: 업데이트하는 경우 BIND 9.10.4가 올바른지 확인하세요. - 메커니즘은 prefetch9.10에 도입되었지만 9.10.4부터 수정된 추악한 버그가 있었습니다.

https://kb.isc.org/article/AA-01315/0/prefetch-performance-in-BIND-9.10.html

답변2

나는 BIND에 그런 기능이 있다고 생각하지 않습니다. 단지 TTL( cache-max-ttl)만 감소할 뿐 증가하지는 않습니다( cache-min-ttl제 BIND에서는 작동하지 않는 것 같지만, 시도해 보고 귀하의 버전에서 작동하는지 확인할 수 있습니다). 하지만 우리는 우리 자신만의 권위 있는 도메인을 만들 수 있습니다. 이 작업이 완료되면 이 도메인에 외부 도메인에 대한 CNAME 레코드를 생성할 수 있습니다.

test.mydomain.com CNAME test.example.com.

그런 다음 쿼리는 test.mydomain.comIP 주소로 확인되며 test.example.com필요에 따라 TTL을 구성할 수 있습니다.

이론적으로는 BIND에 의해 캐시된 영역을 덮어쓴 다음 이를 로컬 영역 파일로 생성하고 TTL을 설정한 다음 BIND를 다시 시작할 수 있지만 이는 끔찍한 해킹입니다.

소프트웨어에는 3600초 이하의 옵션 dnsmasq이 있습니다 . 지침에 경고가 있습니다.--min-cache-ttl=<time>time

--min-cache-ttl=<time>

Extend short TTL values to the time given when caching them. Note that
artificially extending TTL values is in general a bad idea, do not do it
unless you have a good reason, and understand what you are doing. Dnsmasq
limits the value of this option to one hour, unless recompiled.

귀하의 질문은 귀하가 무엇을 하고 있는지 아는 것 같습니다. Unbound에도 이 기능이 있습니다.

cache-min-ttl: <seconds>

Time to live minimum for RRsets and messages in the cache. Default is 0.
If the minimum kicks in, the data is cached for longer than the domain owner
intended, and thus less queries are made to look up the data. Zero makes sure the
data in the cache is as the domain owner intended, higher values, especially more
than an hour or so, can lead to trouble as the data in the cache does not match
up with the actual data any more.

BIND를 Unbound 또는 dnsmasq로 바꾸거나 둘 중 하나를 BIND의 전달자로 사용할 수도 있습니다.

관련 정보