Пускай у нас есть сетка 192.168.0.1/24 и мы хотим настроить в ней DHCP+DDNS, домен пусть будет teaseo.ru, а сервер называеться gateway.teaseo.ru. И начнем мы с настройки DHCP. Нам будет необходим ключь для общения DHCP и DNS. Для того, что бы его сгенерировать:
Копируем ключь из сгенерированого файла и добавляем его в /etc/dhcpd.conf
algorithm HMAC-MD5.SIG-ALG.REG.INT;
secret 62jNF/GFtlzOMUx1kYCYpw==;
}
где secret это сгенерированый ключь, незабывайте про ; в конце. Далее настраиваем используемый домен:
option domain-name-servers gateway.teaseo.ru; zone teaseo.ru. {
primary 127.0.0.1;
key DHCP_UPDATER;
} zone 0.168.192.IN-ADDR.ARPA. {
primary 127.0.0.1;
key DHCP_UPDATER;
}
И настраиваем сам DHCP, деапазон выдаваймых адресов пусть будет с 192.168.0.5 по 192.168.0.100 :
default-lease-time 2592000;
max-lease-time 5184000;
ddns-updates on; authoritative;
log-facility local7; subnet 192.168.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option routers 192.168.0.1;
option domain-name-servers 192.168.0.1;
range 192.168.0.5 192.168.0.100;
}
Если вам нужно будет зафиксировать IP за определенным MAC-ом:
hardware ethernet 00:1E:1C:E3:91:39;
fixed-address 192.168.0.99;
}
Теперь перейдем к настройке DNS. Открываем named.conf добавляем ключь:
algorithm HMAC-MD5.SIG-ALG.REG.INT;
secret 62jNF/GFtlzOMUx1kYCYpw==;
};
Настраиваем сам DNS
listen-on port 53 { 192.168.0.1 };
directory «/var/named»;
dump-file «/var/named/data/cache_dump.db»;
statistics-file «/var/named/data/named_stats.txt»;
memstatistics-file «/var/named/data/named_mem_stats.txt»;
forward first;
forwarders { 8.8.8.8; };
allow-query { any; };
allow-query-cache { any; };
};
И добавляем описание зон:
match-clients { any; };
match-destinations { any; }; recursion yes;
include «/etc/named.rfc1912.zones»;
zone «0.168.192.in-addr.arpa» IN {
type master;
file «master/0.168.192.in-addr.arpa»;
allow-update { key DHCP_UPDATER; };
};
zone «teaseo.ru» {
type master;
file «master/db.teaseo.ru»;
allow-update { key DHCP_UPDATER; };
notify no;
};
};
Так, теперь создаем два файла 0.168.192.in-addr.arpa :
$ORIGIN . $TTL 86400 ; 1 day 0.168.192.in-addr.arpa IN SOA gateway.teaseo.ru. root.teaseo.ru. ( 2011022505 ; serial 28800 ; refresh (8 hours) 7200 ; retry (2 hours) 864000 ; expire (1 week 3 days) 86400 ; minimum (1 day) ) NS gateway.teaseo.ru. $ORIGIN 0.168.192.in-addr.arpa.
А db.teaseo.ru :
$ORIGIN . $TTL 86400 ; 1 day visum IN SOA gateway.teaseo.ru. root.teaseo.ru. ( 2011022687 ; serial 28800 ; refresh (8 hours) 7200 ; retry (2 hours) 864000 ; expire (1 week 3 days) 86400 ; minimum (1 day) ) NS gateway.teaseo.ru. $ORIGIN teaseo.ru.
Очень важно, что бы у обоих этих файлов поледней была пустая строка.
Вот собственно и все, запускаем DNS и DHCP:
service dhcpd start
Да совсем забыл, маленький скрипт, что бы получать список имен и IP адресов:
#!/bin/bash # # WORK="/etc/dnshtml" NAMED="/var/named/chroot/var/named/master" ZONE="0.168.192.in-addr.arpa" HTTP="/var/www/html" SPEC='$ORIGIN 0.168.192.in-addr.arpa.' DATE=`date +'%d-%m-%Y %H:%M:%S'` A=0 rm -f $HTTP/dns.html echo '<HTML><HEAD> <Title>Visum DNS</title> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Expires" CONTENT="-1"> <script> <!-- /* Auto Refresh Page with Time script By JavaScript Kit (javascriptkit.com) Over 200+ free scripts here! */ //enter refresh time in "minutes:seconds" Minutes should range from 0 to inifinity. Seconds should range from 0 to 59 var limit="5:01" if (document.images){ var parselimit=limit.split(":") parselimit=parselimit[0]*60+parselimit[1]*1 } function beginrefresh(){ if (!document.images) return if (parselimit==1) window.location.reload() else{ parselimit-=1 curmin=Math.floor(parselimit/60) cursec=parselimit%60 if (curmin!=0) curtime=curmin+" minutes and "+cursec+" seconds left until page refresh!" else curtime=cursec+" seconds left until page refresh!" window.status=curtime setTimeout("beginrefresh()",1000) } } window.onload=beginrefresh //--> </script> </HEAD><BODY><pre>' >> $HTTP/dns.html echo "" >> $HTTP/dns.html echo "" >> $HTTP/dns.html while read LINE do if [ $A -eq 2 ]; then TMP=`echo $LINE | awk '{split($0,a," "); print a[1]}'` TMP2=`echo $LINE | awk '{split($0,a," "); print a[3]}'| cut -f 1 -d '.'` if [ "$TMP" != '$TTL' ]; then echo " 192.168.0."$TMP" "$TMP2".visum" >> $HTTP/dns.html fi fi if [ $A -eq 1 ]; then A=2 fi if [ "$LINE" == '$ORIGIN 0.168.192.in-addr.arpa.' ]; then A=1 echo ' Network 192.168.0.0' >> $HTTP/dns.html echo ' Last update: '$DATE >> $HTTP/dns.html echo "" >> $HTTP/dns.html fi done < $NAMED/$ZONE echo "</pre></BODY></HTML>" >> $HTTP/dns.html
В начале скрипта есть несколько настроек, думаю, что не будет с ними проблем