# aptitude install bind9 vlan
Далее настраиваем сеть. В моей ситуации имеется два VLAN'а: один смотрит во внешку (VLANID 20), второй во внутреннюю сервисную сеть (VLANID 10):
# cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 0.0.0.0
# Managment
auto vlan10
iface vlan10 inet static
address 10.10.0.10
netmask 255.255.0.0
vlan_raw_device eth0
# Link to world
auto vlan20
iface vlan20 inet static
address x.x.x.x
netmask 255.255.255.252
gateway x.x.x.y
dns-nameservers 127.0.0.1
vlan_raw_device eth0
Приступаем к настройке bind'а:
# cat /etc/bind/named.conf.options
acl ournets {
127.0.0.1;
x.x.x.x/24;
y.y.y.y/24;
z.z.z.z/24;
};
options {
directory "/var/cache/bind";
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { none; };
listen-on {127.0.0.1; x.x.x.x;};
allow-query {"ournets";};
};
В acl ournets {} перечислены сети, которым разрешено делать запросы - опция allow-query {"ournets";}. В listen-on {} задаются интерфейсы, на которых нужно слушать запросы. Также проверим что у нас прописаны корневые серверы в файле named.conf.default-zones:
zone "." {
type hint;
file "/etc/bind/db.root";
};
Перечитаем настройки:
# /etc/init.d/bind9 reload
Проверяем:
# nslookup ya.ru localhost
Server: localhost
Address: 127.0.0.1#53
Non-authoritative answer:
Name: ya.ru
Address: 87.250.251.3
Name: ya.ru
Address: 93.158.134.3
Name: ya.ru
Address: 93.158.134.203
Name: ya.ru
Address: 213.180.193.3
Name: ya.ru
Address: 213.180.204.3
Name: ya.ru
Address: 77.88.21.3
Name: ya.ru
Address: 87.250.250.3
Name: ya.ru
Address: 87.250.250.203
Осталось настроить iptables. Я просто разрешаю domain запросы извне и ssh из сервисной сети. Для удобства правила пропишем в init-скрипте:
# cat /etc/init.d/iptables
PATH='/sbin'
case "$1" in
start)
echo "Starting iptables"
iptables -F
iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i vlan10 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i vlan20 -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i vlan20 -p udp --dport 53 -j ACCEPT
;;
stop)
echo "Stopping iptables"
iptables -F
iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
;;
*)
echo "Usage: /etc/init.d/iptables {start|stop}"
exit 1
;;
esac
exit 0
Делаем его исполняемым и запускаем:
# chmod +x /etc/init.d/iptables
# update-rc.d iptables defaults
#
# /etc/init.d/iptables start
Все.
Источники:
http://irternus.blogspot.com/2012/01/bind9-dns.html
http://www.linuxgeek.ru/2011/01/iptables-debian.html
Update: В последних версиях Debian лучше использовать пакет iptables-persistent вместо самописного скрипта