Параметры машины:
KVM-guest, 1000MHz CPU, 2Gb RAM, 8Gb Hdd, 2 сетевухи (1 смотрит в локалку, 2-я в сеть). ОС - FreeBSD 7.4-amd64
Unbound
Unbound - это кеширующий DNS сервер который обслуживает исключительно рекурсивные запросы. Во время работы сервера кеш целиком распологается в памяти, а его размер ограничен указанным объемом. Unbound поддерживает расширения DNSSEC и может работать как "validator" . В качестве плюсов Unbound по сравнению с BIND надо отметить все те же скромные размеры и скорость.Решено - ставлю!
Надеюсь не нужно рассказывать о необходимости обновления портов
Код: Выделить всё
cd /usr/ports/dns/unbound
make install cleanКод: Выделить всё
┌────────────────────────────────────────────────────────────────────┐
│                    Options for unbound 1.4.13                       │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ [X] LIBEVENT  is useful when using many (10000) outgoing ports   │ │
│ │ [X] THREADS   build with threads support                        │ │
│ │ [ ] PYTHON    build python bindings                             │ │
│ │ [ ] GOST      build GOST support (requires OpenSSL from ports)   │ │
│ │                                                                │ │
├─└────────────────────────────────────────────────────────────────┘─┤
│                       [  OK  ]       Cancel                        │
└────────────────────────────────────────────────────────────────────┘
Едем дальше - сервер собран, ничто не мешает нам его настроить.terminus писал(а):При проведении разрешения имен которых еще нет в кеше сервера, а значит при необходимости обращаться к внешним авторитарным DNS серверам, Unbound отсылает исходящие запросы используя множество UDP портов из разрешенного диапазона. Это сделано для обеспечения дополнительной безопасности чтобы было труднее угадать с какого порта был отправлен запрос и затруднить возможность атак с целью отравления записей в кеше. Позже, в примере файла конфигурации это будет отражено - опция outgoing-range: 512 указывает, сколько UDP портов для этой цели разрешено использовать одному потоку (thread) сервера.
Каждый открытый сервером UDP или TCP порт, потребляет один файловый дескриптор. Серверу Unbound необходимо иметь возможность работать со всеми открытыми дескрипторами. Сам Unbound содержит в себе некий builtinmini-event обработчик, который и используется для этого. Встроенный обработчик способен обслуживать максимум 1024 открытых файловый дескрипторов на один процесс сервера.
Предлагаемая по умолчанию опция конфигурации THREADS указывает, что необходимо скомпилировать Unbound с поддержкой потоков. При этой конфигурации запускается один материнский процесс у которого рождаются подпроцессы-потомки. Плюс данной конфигурации в том, что все дочерние потоки имеют возможность использовать общий кеш материнского процесса - снижаются требования к памяти выделяемой серверу Unbound.
Если же отказаться от опции THREADS, то сервер будет собран без потоков (фактически с одним потоком на процесс) и будет происходить форканье процессов, что есть практически параллельный запуск нового сервера со своим собственным кешем. Минус такого подхода - это увеличение требований к памяти. Плюс этого метода работы - увеличение скорости на 10-20 %.
Таким образом, если наш сервер будет собран с поддержкой потоков THREADS, и мы захотим использовать восемь потоков (опция конфигурации num-threads: 8), то при установленных outgoing-range: 512, в сумме это даст 512*8=4096 одновременно открытых файловых дескрипторов, что превышает возможности встроенного обработчика. Unbound не захочет стартовать и выведет сообщение об ошибке. Проблема. (Кривое решение проблемы - это снизить значение outgoing-range, но делать этого не стоит так как это уменьшает секюрность). Для правильного решения этой проблемы, разработчики Unbound предлагают использовать специальные сторонние обработчики, такие как например libevent или libev. Выбор опции LIBEVENT приведет к установке дополнительного порта libevent 1.4.8 и линковке с ним Unbound.
Если же мы откажемся от использования потоков и соберем Unbound без THREADS, и без ненужного теперь LIBEVENT, то при использовании той же опции конфигурации num-threads: 8, мы получим восемь процессов Unbound каждый из которых будет иметь свой кеш и использовать только 512 файловых дескрипторов управляемых встроенным обработчиком.
Для начала нужен chroot - запускать DNS-серверы в основной среде вообще признак дурного тона. Я для себя выбрал директорию /srv/unbound (у меня в /usr/local заканчивается место)
Код: Выделить всё
mkdir /srv
mkdir /srv/unbound
mv /usr/local/etc/unbound/unbound.conf.sample /srv/unbound/unbound.conf
ln -sf /srv/unbound/unbound.conf /usr/local/etc/unbound/unbound.conf #Симлинк назад, ибо лень мне править стартовые скрипты
mkdir /srv/unbound/dev
Код: Выделить всё
[unbound_ruleset=20]
add hide
add path null unhide
add path zero unhide
add path crypto unhide
add path random unhide
add path urandom unhideКод: Выделить всё
devfs  /srv/unbound/dev        devfs   rw      0       0Код: Выделить всё
devfs_set_rulesets="/srv/unbound/dev=unbound_ruleset"Код: Выделить всё
mount /srv/unbound/dev
/etc/rc.d/devfs restartКод: Выделить всё
ls -la /srv/unbound/dev
total 0
crw-rw-rw-  1 root  wheel    0,  19 15 дек 16:33 null
crw-rw-rw-  1 root  wheel    0,  23 15 дек 10:39 random
lrwxr-xr-x  1 root  wheel         6 15 дек 16:43 urandom -> random
crw-rw-rw-  1 root  wheel    0,  20 15 дек 10:39 zero
Код: Выделить всё
cd /srv/unbound
fetch -o root.zone ftp://FTP.INTERNIC.NET/domain/named.cacheКод: Выделить всё
unbound-control-setup -d /srv/unbound
setup in directory /srv/unbound
generating unbound_server.key
Generating RSA private key, 1536 bit long modulus
............++++
............................++++
e is 65537 (0x10001)
generating unbound_control.key
Generating RSA private key, 1536 bit long modulus
...................................................................++++
.................++++
e is 65537 (0x10001)
create unbound_server.pem (self signed certificate)
create unbound_control.pem (signed client certificate)
Signature ok
subject=/CN=unbound-control
Getting CA Private Key
Setup success. Certificates created. Enable in unbound.conf file to use
Код: Выделить всё
chown unbound:wheel ./unbound_*
chmod 440 ./unbound_*Код: Выделить всё
cat unbound.conf 
server:          
         verbosity: 2 # Степень вывода логов (1-4, при уровне 4 в логи будет попадать вся отладочная информация, при уровне 1 - только сообщения об ошибках)
         statistics-interval: 0 # Я не собираю статистику, поэтому эти 3 строки мне в принципе не нужны
         statistics-cumulative: no
         extended-statistics: no  
         num-threads: 1 # Количество потоков. Рекомендуется ставить равным числу ядер процессора
         interface: 192.168.50.32 # Интерфейс на котором будем слушать
         interface-automatic: no  # Определять интерфейсы автоматически мне не нужно
         port: 53  
         outgoing-interface: <внешний_IP> # Интерфейс для связи с внешним миром
         outgoing-range: 8192 # Диапазон портов для связи с миром. При использовании libevent рекомендуется использовать данное значение.
         outgoing-port-permit: 32768     
         outgoing-port-avoid: "3200-3208"
         outgoing-num-tcp: 10            
         incoming-num-tcp: 10            
         so-rcvbuf: 4m  # Зарезервированный обьем буфра для приема UDP пакетов (рекомендованное стартовое значение)
         so-sndbuf: 4m  # Зарезервированный обьем буфера для отправки UDP пакетов (рекомендованное стартовое значение)
         edns-buffer-size: 4096          
         msg-buffer-size: 65552          
         msg-cache-size: 32m             
         msg-cache-slabs: 4              
         num-queries-per-thread: 4096    
         rrset-cache-size: 64m           
         rrset-cache-slabs: 4            
         cache-min-ttl: 86400            
         cache-max-ttl: 864000           
         infra-host-ttl: 900             
         infra-lame-ttl: 900             
         infra-cache-slabs: 4            
         infra-cache-numhosts: 10000     
         infra-cache-lame-size: 10k      
         do-ip4: yes                     
         do-ip6: no                      
         do-udp: yes                     
         do-tcp: yes                     
         do-daemonize: yes               
         access-control: 0.0.0.0/0 allow 
         access-control: ::0/0 refuse         
         access-control: ::1 allow            
         access-control: ::ffff:127.0.0.1 allow
         chroot: "/srv/unbound"                
         username: "unbound"                   
         directory: "/srv/unbound"             
         logfile: "/srv/unbound/log/unbound.log"
         use-syslog: no                         
         log-time-ascii: no                     
         log-queries: yes                       
         pidfile: "/srv/unbound/unbound.pid"    
         root-hints: "/srv/unbound/named.cache" 
         hide-identity: yes                     
         hide-version: yes                      
         identity: "MySuper-Puper DNS"          
         version: "100.500"                         
         harden-glue: yes                       
         do-not-query-address: 127.0.0.1/8
         do-not-query-address: ::1
         do-not-query-localhost: yes
         module-config: "iterator"
remote-control:
         control-enable: yes
         control-interface: 127.0.0.1
         control-port: 8953
         server-key-file: "/srv/unbound/unbound_server.key"
         server-cert-file: "/srv/unbound/unbound_server.pem"
         control-key-file: "/srv/unbound/unbound_control.key"
         control-cert-file: "/srv/unbound/unbound_control.pem"Код: Выделить всё
sysctl -a | grep kern.maxfiles
sysctl -a | grep kern.ipc.maxsockets
sysctl -a | kern.ipc.maxsockbufКод: Выделить всё
kern.maxfiles: 90000
kern.maxfilesperproc: 230400
kern.ipc.maxsockets: 204800
kern.ipc.maxsockbuf: 16777216
Код: Выделить всё
unbound_enable="YES"Код: Выделить всё
/usr/local/etc/rc.d/unbound startКод: Выделить всё
nslookup mail.ru 192.168.50.32
Server:         192.168.50.32
Address:        192.168.50.32#53
Non-authoritative answer:
Name:   mail.ru
Address: 94.100.191.203
Name:   mail.ru
Address: 94.100.191.204
Name:   mail.ru
Address: 94.100.191.201
Name:   mail.ru
Address: 94.100.191.202





