djbdns обладает прекрасным, легким, простым механизмом DNS "split-horizon". Я опишу как его запустить. Чтобы сделать пример более реальным, я буду использовать воображаемый firewall. Внешний адрес этого firewall'а будет 1.2.3.4, это будет общедоступный IP-адрес, и это будет общедоступный сервер имен. Внутренний адрес будет 192.168.0.1, сеть 192.168.0/8, используется за firewall. Firewall будет доступен снаружи по имени gateway.example.dom, и будет иметь альтернативные имена ns1.example.dom и smtp.example.dom. Также, он будет обслуживать приватные имена, включая dreamwvr.example.dom и filesrv.example.dom, только для внутренней сети, также как и firewall.example.dom для своего внутреннего интерфейса. NB: this is untested, off the top of my head, but I'm pretty sure it's pretty close. I do love djbdns; I've never met anyone who could do the equivalent to this off the top of their head for BIND:-). (1) Настроим tinydns для работы снаружи для обслуживания общедоступных записей из data tinydns-conf tinydns dnslog /etc/tinydns-public 1.2.3.4 cd /etc/tinydns-public/root cat <<-Eof >data .example.dom::ns1.example.dom @example.dom::smtp.example.dom =gateway.example.dom:1.2.3.4 +ns1.example.dom:1.2.3.4 +smtp.example.dom:1.2.3.4 Eof make ln -s /etc/tinydns-public /service (2) Настроим приватную версию tinydns на localhost как с общедоступными данными, так и с дополнительными, для приватной сети. Помните, что мы хотим иметь другие NS-записи для example.dom в приватной зоне, так что мы проведем управляемое слияние, отфильтровав "." записи из общедоступной версии data перед присоединением её к приватной версии. Также вставим туда комментарии. tinydns-conf tinydns dnslog /etc/tinydns-private 127.0.0.1 cd /etc/tinydns-private/root cat <<-Eof >data-private .example.dom::localhost. .0.168.192.in-addr.arpa::localhost. =firewall.example.dom::192.168.0.1 =dreamwvr.example.dom:192.168.0.2 =filesrv.example.dom:192.168.0.3 Eof cat <<-Eof >hdr1 # Do __NOT__ edit this file. For the records # in this section, edit the file # data-private Eof cat <<-Eof >hdr2 # For the records in this section, edit the file # /etc/tinydns/root/data Eof cat <<'Eof' >Makefile prv=data-private pub=/etc/tinydns/root/data data: $(prv) $(pub) (cat hdr1 $(prv) hdr2;grep -v '^\.' $(pub))>data data.cdb: data /usr/bin/tinydns-data Eof make ln -s /etc/tinydns-private /service (3) Настроим dnscache на использование внутри вашей приватной сети, он будет пересылать запросы для вашего внутреннего домена на приватную копию tinydns dnscache-conf dnscache dnslog /etc/dnscache 192.168.0.1 touch /etc/dnscache/root/ip/192.168.0 cd /etc/dnscache/root/servers echo 127.0.0.1 >example.dom ln example.dom 0.168.192.in-addr.arpa ln -s /etc/dnscache /service (4) Если вам необходимо поддерживать внешний вторичный сервер имен, и там запущен tinydns, настройте ваш скрипт таким образом, чтобы каждый раз при перестройке вами файла data.cdb, он синхронизировался с версией на вторичном сервере имен с помощью rsync-over-ssh. Если на вторичном сервере работает не tinydns, просто установите axfrdns: axfrdns-conf tinydns dnslog /etc/axfrdns /etc/tinydns-public 1.2.3.4 cd /etc/axfrdns echo ':allow' >tcp make ln -s /etc/axfrdns /service (5) Теперь убедитесь, что все могут использовать ваши новые серверы. Скажите вашему регистратору об использовании ns1.example.dom с адресом 1.2.3.4в качестве сервера имен для вашей зоны, и о вторичном сервере, если он используется. Регистратор создаст NS-запись(и) в своей зоне, чтобы другие сервера имен могли узнать, к кому обращаться за записями из вашей зоны. Настройте ваши внутренние файлы resolv.conf примерно так search example.dom nameserver 192.168.0.1 BTW, this is how I document when I setup a firewall for someone; this style of docs, together with the briefest of intros to the online docs for the software in use, seems to be very nice for letting people see what I've done, when they need to re-do it, or make changes. And to make sure my docs are accurate, I prepare 'em in advance, then do the work by cutting-n-pasting from them, fixing the docs if I have to fix any typos to make the cut-n-paste work. -Bennett