Настраиваем DHCP и динамический DNS

Пускай у нас есть сетка 192.168.0.1/24 и мы хотим настроить в ней DHCP+DDNS, домен пусть будет eddnet.org, а сервер называеться gateway.eddnet.org. И начнем мы с настройки DHCP. Нам будет необходим ключь для общения DHCP и DNS. Для того, что бы его сгенерировать:

dnssec-keygen -a HMAC-MD5 -b 128 -n USER DHCP_UPDATER

Копируем ключь из сгенерированого файла и добавляем его в /etc/dhcpd.conf

key DHCP_UPDATER {
algorithm HMAC-MD5.SIG-ALG.REG.INT;
secret 62jNF/GFtlzOMUx1kYCYpw==;
}

где secret это сгенерированый ключь, незабывайте про ; в конце. Далее настраиваем используемый домен:

option domain-name «eddnet.org»;
option domain-name-servers gateway.eddnet.org; zone eddnet.org. {
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 :

ddns-update-style interim;
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-ом:

host comp {
hardware ethernet 00:1E:1C:E3:91:39;
fixed-address 192.168.0.99;
}

Теперь перейдем к настройке DNS. Открываем named.conf добавляем ключь:

key DHCP_UPDATER {
algorithm HMAC-MD5.SIG-ALG.REG.INT;
secret 62jNF/GFtlzOMUx1kYCYpw==;
};

Настраиваем сам DNS

options {
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; };
};

И добавляем описание зон:

view localhost_resolver {
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 «eddnet.org» {
type master;
file «master/db.eddnet.org»;
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.eddnet.org. root.eddnet.org. (
2011022505 ; serial
28800 ; refresh (8 hours)
7200 ; retry (2 hours)
864000 ; expire (1 week 3 days)
86400 ; minimum (1 day)
)
NS gateway.eddnet.org.
$ORIGIN 0.168.192.in-addr.arpa.

А db.eddnet.org :

$ORIGIN .
$TTL 86400 ; 1 day
visum IN SOA gateway.eddnet.org. root.eddnet.org. (
2011022687 ; serial
28800 ; refresh (8 hours)
7200 ; retry (2 hours)
864000 ; expire (1 week 3 days)
86400 ; minimum (1 day)
)
NS gateway.eddnet.org.
$ORIGIN eddnet.org.

Очень важно, что бы у обоих этих файлов поледней была пустая строка.

Вот собственно и все, запускаем DNS и DHCP:

service named start
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

В начале скрипта есть несколько настроек, думаю, что не будет с ними проблем

Случайные Статьи

Loading…


Количество просмотров :10394

Оставьте коментарий