나는 다음과 같은 설정을 가지고 있습니다 :
- DNS 서버는 인터넷에서 액세스할 수 있으며 영역에 대한 권한이 있습니다.
foo.com
- DNS 서버는 로컬에서만 액세스할 수 있으며 해당 영역에 대한 권한이 있어야 합니다.
test.lab.foo.com
내가 달성하려는 것 :
외부 세계의 DNS 쿼리가 첫 번째 DNS 서버에 도달하여 해당 영역에 속한 레코드를 가져오면 test.lab.foo.com
두 번째 DNS 서버에 재귀 요청을 한 다음 레코드를 전달하기를 원합니다.
특히 영역 전송을 수행하거나 인터넷에서 두 번째 DNS 서버에 액세스할 수 있도록 만들고 싶지 않습니다.
내 구성은 다음과 같습니다. (여기에는 중요하다고 생각되는 부분만 복사했습니다.)
첫 번째 DNS 서버에서
options {
allow-recursion {
localnets;
localhost;
internal;
my-datacenter;
mc-office;
};
};
zone "test.lab.foo.com" {
forward only;
forwarders {
<private IP of second DNS server>;
};
type forward;
};
zone "foo.com" {
file "/etc/bind/zones/foo.com.zone";
type master;
};
내 질문:
allow-recursion
블록에 허용된 로컬 네트워크에 있으면 예상대로 작동합니다. 인터넷에서 DNS 조회를 시도하면 NOERROR가 발생하고 빈 응답이 표시됩니다.
allow-recursion
디버깅하는 동안 목록을 조정 하고 추가했습니다 any
. 그런 다음 작동하기 시작했습니다. 하지만 내 DNS 서버가 어떤 종류의 재귀도 허용하는 것을 원하지 않습니다. 사실 저는 "외부" 조회가 이 특정 영역에 대해서만 재귀적으로 이루어지기를 원합니다.
allow-recursion
한 지역만 설정하는 방법은 무엇인가요 ?
답변1
이 문제는 2a0a:e5c0:2:f::a에서 호스팅되는 예제 도메인으로 c1.k8s.ooo를 사용하여 다음 구성으로 해결될 수 있습니다.
options {
...
allow-recursion { ::/0; 0.0.0.0/0; };
};
zone "c1.k8s.ooo" {
type forward;
forward only;
forwarders { 2a0a:e5c0:2:f::a; };
};
zone "." {
type hint;
file "/dev/null";
};
그 기능은 다음과 같습니다:
- 먼저 바인딩을 개방형 리졸버로 바꿉니다(나쁜 일입니다).
- 목적지가 있는 지역을 정의합니다.
- 이를 사용하면
zone "."
기본 제공 루트 힌트 지원이 제거되어 바인딩이 필수 도메인 외에는 아무것도 확인할 수 없게 됩니다.
다음과 같은 것을 사용하는 것에 유의하십시오.
zone "." {
type forward;
forward only;
forwarders { };
};
바인드에는 루트 영역이 내장되어 있으므로 외부로부터의 재귀는 중단되지 않습니다.