BIND/명명: 재귀 비활성화, 클라이언트는 대체 서버 사용

BIND/명명: 재귀 비활성화, 클라이언트는 대체 서버 사용

저는 OSX 노트북에서 로컬로 실행되는 간단한 DNS 서버(BIND/Named)를 설정하고 있습니다.

그 목적은 "*.laptop.example.com"에 대한 모든 요청을 가상 네트워크 인터페이스의 수동으로 할당된 IP 주소(DHCP 아님)인 "192.168.2.2"로 확인하는 것입니다.

IP 주소가 항상 동일하게 유지되도록 하고(eth0은 다른 네트워크에 연결될 때 IP 주소를 변경함) 항상 사용 가능하도록(eth0은 비활성화/사용할 수 없음) 가상 네트워크 인터페이스(Parallels에서 제공)를 사용하고 있습니다. 네트워크 케이블이 연결되어 있지 않은 경우).

나는 다음 설정을 사용하고 있습니다 :

options {

  ...

  forwarders {
    192.168.1.1;
  };
  forward only;

};

그러나 이렇게 하려면 랩톱이 네트워크를 변경할 때마다 구성을 업데이트해야 합니다(대부분의 네트워크에는 사용할 DNS 주소가 다르기 때문).

BIND/Named가 도메인 이름을 인식하지 못하는 경우(예: "laptop.example.com"의 하위 도메인이 아닌 경우) 오류를 반환하여 랩톱이 두 번째 도메인 이름을 시도할 수 있도록 이 요구 사항을 삭제하고 싶습니다. 기록에 있는 DNS 주소(DHCP에서 가져온 주소)

한 가지 가능성은 다음을 사용하는 것입니다.

options {

  ...

  forwarders {
  };
  forward only;

  recursion no;

};

ROOT 서버를 쿼리하는 데 3초 이상 소요되지 않습니다. 그러나 클라이언트는 해당 응답을 다음 서버를 시도하여 해결할 수 있는 오류가 아니라 "도메인이 존재하지 않습니다"로 해석합니다.

답변1

Alnitak, duffbeer703, John Gardeniers에게 감사드립니다. 모두 좋은 피드백을 받았습니다.

내 문제에 대해 내가 사용한 해결책은 launchd를 사용하여 /etc/resolv.conf의 변경 사항을 감지한 다음 전달자 목록을 업데이트하는 것입니다.

파일을 생성하면:

/Library/LaunchDaemons/myname.update.plist

내용:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
   "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>Label</key>
    <string>myname.update</string>
    <key>ProgramArguments</key>
    <array>
        <string>[PATH]/update.sh</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/var/run/resolv.conf</string>
    </array>
</dict>
</plist>

그리고 이것을 다음과 같이 로드합니다:

launchctl load /Library/LaunchDaemons/myname.update.plist
launchctl start myname.update

스크립트:

[PATH]/update.sh

다음과 같이 실행할 수 있습니다.

DST="/var/named/forwarders.conf";

echo "forwarders {" > $DST

cat /etc/resolv.conf | \
    grep -v -E "(127.0.0.1|localhost)" | \
    awk '{ sub("^nameserver ", "\t"); sub("$", ";"); print }' >> $DST

echo "};" >> $DST

그런 다음 명명된 구성에서 다음과 함께 사용할 수 있습니다.

options {
    directory "[PATH]/conf/";
    listen-on { 127.0.0.1; [IP_ADDRESS_HOST]; };
    include "/var/named/forwarders.conf";
    forward only;
};

전체 구현을 보거나 사용하려면 다음으로 이동하세요.내 BIND 설정 페이지다운로드 양식을 사용하세요... 단일 설치 스크립트로 ZIP 패키지를 생성하므로 설정 및 사용이 매우 간단할 것으로 예상됩니다.

답변2

호스트 파일에 항목을 추가하고 귀찮은 모든 것을 저장하면 어떨까요?

답변3

수행하려는 작업에 대해 좀 더 자세히 설명하고 싶을 수도 있습니다. 이는 별로 의미가 없습니다. 내 조언은 DNS 기본 사항을 조정하지 말라는 것입니다. 제대로 작동하는 것을 깨뜨리는 것입니다.

기본 및 보조 DNS 서버는 가용성을 위해 네트워크 구성에 있습니다. DNS 서버가 응답을 제공할 수 없으면 클라이언트는 보조 서버로 이동하지 않습니다. DNS를 발명한 사람들은 이 문제를 해결하기 위해 "재귀" 개념을 구현했습니다.

Mac을 사용하는 경우 Bonjour/mDNS를 사용하는 것이 더 생산적인 방법이라는 것을 알 수 있습니다.

답변4

사용해 보세요unbound대신에.

기본적으로 재귀 서버이지만 필요한 와일드카드 재정의를 제공하고 다른 모든 것을 서버로 전달할 수 있는 능력이 있다고 생각합니다.현재의에서 자동으로 학습된 업스트림 DNS 서버입니다 /etc/resolv.conf.

관련 정보