Archive

Archive for the ‘dns’ Category

Организация Backup DNS

July 12th, 2010

Отличный бесплатный сервис для организации backup dns – afraid.org. Прописываете домен, мастера откуда будет синхронизироваться и все, он сам будет периодически ходить и тягать зону.

UPD. удобная тулза для разностороннего теста DNS http://www.intodns.com/

dns

Установка Bind (named) на CentOS

September 14th, 2009

В этой заметке рассмотрим установку bind на CentOS в chroot и синхронизацию (в том числе создание/удаление зон на первом и втором ДНС-сервере).
Ставим

yum install bind-chroot

Создаем файл /var/named/chroot/etc/named.conf

options {
        listen-on port 53 { 1.2.3.1; };
        directory       "/var/named";
        allow-query     { any; };
        recursion no;
        allow-transfer { none; };
        version "no version info";
};

include "/var/named/zone.conf";

Создаем файл /var/named/chroot/var/named/zone.conf

zone "domain1.com" IN {
        type master;
        file "domain1.com.conf";
        allow-update { none; };
};

zone "domain2.com" IN {
        type master;
        file "domain2.com.conf";
        allow-update { none; };
};

Ну и файлы зон, например, /var/named/chroot/var/named/domain.com.conf

$TTL 3600
domain.com.    IN    SOA    ns1.dnsdomain.com.    root.domain.com.    (
20010610    ; Serial
10800        ; Refresh
3600        ; Retry
604800        ; Expire
86400    )    ; Minimum TTL

@        IN    NS    ns1.dnsdomain.com.
@        IN    NS    ns2.dnsdomain.com.
@        IN    A  1.2.3.1
www      IN    CNAME  @
@        IN    MX 10  mail.domain.com.
mail     IN    A   1.2.3.1

На втором сервере делаем все точно так же.
Теперь про синхронизацию зон.

На первом сервере:

cd /root/.ssh
ssh-keygen -b 1024 -t dsa

На втором сервере:

/usr/sbin/useradd -s /bin/bash srv-dns-acct
cd /home/srv-dns-acct/
mkdir .ssh
В файл .ssh/authorized_keys копируем id_dsa.pub с первого сервера
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
chown -R srv-dns-acct /var/named/chroot/var/named
chmod +x /var/named/
chmod +x/var/named/chroot/
chmod +x /var/named/chroot/var/

На первом сервере создаем файл /var/named/dnssync.sh:

#!/bin/sh
cd /var/named/chroot/var/named/
tar czvf - *.conf | ssh srv-dns-acct@ns2.domain.com tar xzf - -C /var/named/chroot/var/named/

Для добавления зон на одном сервере можно пользоваться таким скриптом:

#!/bin/sh

# first param - domain, Second - IP

# Domains base
BASE="/var/named/chroot/var/named"

sed -e "s/domain.com/$1/g" "$BASE/sample" > "$BASE/$1.db.tmp"
sed -e "s/1.2.3.4/$2/g" "$BASE/$1.db.tmp" > "$BASE/$1.conf"
echo "zone \"$1\" { type master; file \"$BASE/$1.conf\"; };" >> $BASE/zone.conf
rm "$BASE/$1.db.tmp"

service named reload

dns , ,

Установка Tinydns (djbdns) на linux

September 7th, 2009

Так как нормальных rpm нет придется ставить из исходников.
Сначала ставим daemontools, который будет запускать сервис tinydns, следить за его состоянием и тд.

cd /root
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
tar zxvf ./daemontools-0.76.tar.gz
В src/conf-cc в строку с gcc добавляем -include /usr/include/errno.h
cd ./admin/daemontools-0.76/
./package/install

cd /root
wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
tar zxvf ./ucspi-tcp-0.88.tar.gz
cd ./ucspi-tcp-0.88
В conf-cc в строку с gcc добавляем -include /usr/include/errno.h
make
make setup check

cd /root
wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
tar zxvf ./djbdns-1.05.tar.gz
cd djbdns-1.05
echo gcc -O2 -include /usr/include/errno.h > conf-cc
make
make setup check

groupadd dnsuser
/usr/sbin/useradd -g dnsuser -s /sbin/nologin -d /dev/null tinydns
/usr/sbin/useradd -g dnsuser -s /sbin/nologin -d /dev/null dnslog
/usr/local/bin/tinydns-conf tinydns dnslog /etc/tinydns [ip-сервера]
ln -s /etc/tinydns /service/tinydns #говорим daemontools-у о новом сервисе, он сам его запустит через 5 сек

Заполняем файл зон (/etc/tinydns/root/data) по образцу:

.domain.com::ns1.domain.com.:2500
&domain.com::ns2.domain.com.:2500
@domain.com::mail.domain.com.:10:2500
+domain.com:serverip:2500
+*.domain.com:serverip:2500

Делаем в /etc/tinydns/root чтобы перекинуть данные в бинарную версию data.cdb:

make

Проверить что data.cdb содержит требуемые данные:

cd /etc/tinydns/root
tinydns-get a www.domain.com

Управление сервисами:

svc -d /service/tinydns #остановить сервис
svc -u /service/tinydns #запустить сервис
svc -t /service/tinydns #рестартануть сервис
svstat /service/tinydns #проверяем статус

Синхронизация зон со вторым ДНС-сервером.

Для синхронизации бинарного файла с данными по зонам (с другим сервером) воспользуемся scp.
На втором днс-сервере необходимо установить аналогичный комплект. Затем на первом сервере:

cd /root/.ssh
ssh-keygen -b 1024 -t dsa

На втором сервере:

/usr/sbin/useradd -s /bin/bash srv-dns-acct
cd /home/srv-dns-acct/
mkdir .ssh
В файл .ssh/authorized_keys копируем id_dsa.pub с первого сервера
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

На первом сервере в файл /etc/tinydns/root/Makefile добавляем:

scp data.cdb srv-dns-acct@ns2.domain.com:/etc/tinydns/root/data.cdb

Теперь для синхронизации первого сервера со втором надо на первом сервере:

cd /etc/tinydns/root
make

Смотрите так же Скрипт добавления зон
Для добавления разных экзотических записей есть tinydns Record Builder

Примечание:
Если вдруг была удалена директория /etc/tinydns/supervise то надо сделать ps auxww |grep sup и грохнуть два процесса supervise. Затем сделать ps auxww |grep sv и грохнуть два процесса svscan. Инит перезапустит svscan, а тот перезапустит supervise и он пересоздаст каталоги.

dns ,

Dnsmasq для резолва любой зоны

July 13th, 2009

Понадобился DNS-сервер, который бы мог отвечать одинаковым IP-адресом на запрос о любой зоне.
Просто для того чтобы припарковать несколько доменов. С этим отлично справился dnsmasq.
Ставим:

cd /usr/ports/dns/dnsmasq && make install

или

yum install dnsmasq

В конфиге понадобится всего лишь одна строка:

address=/#/10.10.10.10

Кстати, подобным образом он так же может резолвить MX-запросы.

Если при запуске в OpenVZ-контейнере ругается:
dnsmasq: setting capabilities failed: Operation not permitted
то надо добавить в конфиг:

user=root

Для того чтобы dnsmasq заработал во FreeBSD jail надо добавить в конфиг:

bind-interfaces

dns ,

Скрипт добавления зон для tinydns

June 16th, 2009

Для добавления одной зоны:

#!/bin/bash

DIR="/service/srvdns/root"
cd $DIR

if [ "x$1" = "x" ]; then
    echo "Usage: domain.com owner ip"
    exit
fi
if [ "x$2" = "x" ]; then
    echo "Usage: domain.com owner ip"
    exit
fi
if [ "x$3" = "x" ]; then
    echo "Usage: domain.com owner ip"
    exit
fi

domainexist=`cat $DIR/data | grep -c $1`
if [ $domainexist != "0" ]; then
    echo "$1 already exist. Exit."
    exit
fi

sed -e "s/domain.com/$1/g" "$DIR/domain.com" > "$DIR/tmpfile"
sed -e "s/owner/$2/g" "$DIR/tmpfile" > "$DIR/tmpfile2"
sed -e "s/serverip/$3/g" "$DIR/tmpfile2" >> "$DIR/data"

rm $DIR/tmpfile
rm $DIR/tmpfile2
make

Для добавления нескольких зон из файла-списка:

#!/bin/bash

DIR="/service/srvdns/root"
cd $DIR

if [ "x$1" = "x" ]; then
    echo "Usage: owner ip"
    exit
fi
if [ "x$2" = "x" ]; then
    echo "Usage: owner ip"
    exit
fi

cat $DIR/domainsfile | while read domain; do

    domainexist=`cat $DIR/data | grep -c $domain`
    if [ $domainexist != "0" ]; then
        echo "$domain already exist. Skipped."
        continue
    fi

    sed -e "s/domain.com/$domain/g" "$DIR/domain.com" > "$DIR/tmpfile"
    sed -e "s/owner/$1/g" "$DIR/tmpfile" > "$DIR/tmpfile2"
    sed -e "s/serverip/$2/g" "$DIR/tmpfile2" >> "$DIR/data"

    rm $DIR/tmpfile
    rm $DIR/tmpfile2
done
make

Где файл domain.com такой:

###########################
#owner: domain.com
.domain.com::ns1.domainserver.com.:2500
&domain.com::ns2.domainserver.com.:2500
@domain.com::mail.domain.com.:10:2500
+domain.com:serverip:2500
+*.domain.com:serverip:2500

dns ,

установка tinydns на freebsd

December 25th, 2008

Сразу замечу, что tinydns это днс-сервер для авторитативных запросов. Если надо еще кэширующий днс-резолвер то необходимо настроить dnscache из того же комплекта.
Ставим из портов djbdns, daemontools.
затем:

echo svscan_enable="YES" >> /etc/rc.conf
tinydns-conf bind bind /etc/tinydns 1.2.3.5
mkdir /var/service
ln -s /etc/tinydns /var/service
/usr/local/etc/rc.d/svscan.sh start

создаем файлик /etc/tinydns/root/data с примерно таким содержимым:

#domain.com
.domain.com::ns1.domain.com.:2500
&domain.com::ns2.domain.com.:2500
+ns1.domain.com:192.168.0.1:2500
+ns2.domain.com:192.168.0.1:2500
+domain.com:192.168.0.3:2500
+www.domain.com:192.168.0.3:2500

Находясь в /etc/tinydns/root/ делаем tinydns-data

dns, FreeBSD ,

настройка bind

December 9th, 2008
echo "named_enable="YES"" >> /etc/rc.conf

прописать зону (взять образцовую)

/etc/rc.d/named forcestart

Образцовая зона:

$TTL 3600
domain.com.    IN    SOA    ns1.domain.com.    root.domain.com.    (
20010610    ; Serial
10800        ; Refresh
3600        ; Retry
604800        ; Expire
86400    )    ; Minimum TTL

@       IN      NS      ns1.domain.com.
@       IN      NS      ns2.domain.com.
ns1     IN      A       1.2.3.1
ns2     IN      A       1.2.3.1
@       IN      A       1.2.3.1
*       IN      A       1.2.3.1
@       IN      MX 10 mail.domain.com.

Можно использовать такой скрипт для добавления доменов (create_dns.sh):

#!/bin/sh

# first param - domain, Second - IP

# Domains base
BASE="/etc/namedb"

sed -e "s/domain.com/$1/g" "$BASE/master/sample" > "$BASE/master/$1.db.tmp"
sed -e "s/1.2.3.1/$2/g" "$BASE/master/$1.db.tmp" > "$BASE/master/$1.db"
echo "zone \"$1\" { type master; file \"$BASE/master/$1.db\"; };" >> $BASE/named.conf
rm "$BASE/master/$1.db.tmp"

service named reload
# /etc/rc.d/named forcerestart

Для массового добавления доменов:

#!/bin/sh

# Domains base
BASE="/etc/namedb"
IP="3.3.3.3"

cat /home/adwedes/dnslist| while read domain; do

    sed -e "s/domain.com/$domain/g" "$BASE/master/sample" > "$BASE/master/$domain.db.tmp"
    sed -e "s/1.2.3.1/$IP/g" "$BASE/master/$domain.db.tmp" > "$BASE/master/$domain.db"
    echo "zone \"$domain\" { type master; file \"$BASE/master/$domain.db\"; };" >> $BASE/named.conf
    rm "$BASE/master/$domain.db.tmp"

done

/etc/rc.d/named forcerestart

dns, FreeBSD , ,

суши роллы казань .