Добрый день!
Вот такая ситуация.
Школа.
Задача: Нелья пускать учеников на злосайты и тп. Учителям можно всё.Решил ограничивать ресурсы интернет с помощью skydns (https://www.skydns.ru/).
Есть сервер SRV на FreeBSD9.3. Он шлюз для школьной сети в интернет. На нём настроены dhcp, кэширующий dns, vpn, nat (isc-dhcp43-server-4.3.0_2, mpd5-5.7_1, BIND 9.9.5, pf).
Локальный адрес SRV 192.168.1.100.
Все школьные ПК получают адреса от dhcp:
#/usr/local/etc/dhcpd.conf
option domain-name "school.local";
default-lease-time 600;
max-lease-time 7200;
authoritative;
ddns-update-style none;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.60;
option domain-name "school.local";
option domain-name-servers 192.168.1.100;
option broadcast-address 192.168.1.255;
option routers 192.168.1.100;
option subnet-mask 255.255.255.0;
}
Настройки dns:
#/etc/resolv.conf
search school.local
nameserver 127.0.0.1
#/etc/namedb/named.conf
...
listen-on { 127.0.0.1; 192.168.1.100; };
...
forwarders {
193.58.251.251; //SKYDNS
};
...
Использую пакетный фильтр PF, NAT в нём:
#/etc/pf.conf
#MACROS
ext_if="sis0" #WAN (default)
int_if="em0" #LAN
vpn_net="172.16.2.0/24"
local_net="192.168.1/24"
icmp_types = "echoreq"
#TABLE
table <private> const {10/8, 172.16/12, 192.168/16}
table <trust_host> {1.1.1.1}
table <sshguard> persist
table <badhost> persist file "/etc/pf.badhost"
#SETS
set block-policy drop
set skip on lo
scrub in all
#NAT RDR
nat on $ext_if from $local_net to !$local_net -> $ext_if:0
nat on $ext_if from $vpn_net to !$local_net -> $ext_if:0
#RULES
antispoof quick for $ext_if
block inet6
block in quick on {$ext_if} from <sshguard> to any label "Ssh bruteforce"
block from <badhost> label "Block badhost"
block in on {$ext_if}
block out on {$ext_if} from <private> to any label "Block out private addr"
pass in on {$ext_if} from <trust_host> label "Trust hosts"
pass in on {$ext_if} proto tcp to port ssh
pass in on {$ext_if} inet proto icmp from any to any icmp-type $icmp_types keep state
pass out on {$ext_if}
Всё работает, ресурсы запрещённые skydns блокируются.
Для тех, кому нужно посещать все ресурсы интрернета сделал vpn сервер, в настройках которого задаём для vpn-клиентов другой днс (от Яндекса http://dns.yandex.ru):
#/usr/local/etc/mpd5/mpd.conf
startup:
default:
load pptp_server
pptp_server:
set ippool add poolsat 172.16.2.5 172.16.2.20
create bundle template B
set iface enable proxy-arp
set iface idle 0
set iface enable tcpmssfix
set ipcp yes vjcomp
set ipcp ranges 172.16.2.1/32 ippool poolsat
set ipcp dns 77.88.8.88 #Яндекс днс
set bundle enable compression
set ccp yes mppc
set mppc yes compress e40 e56 e128 stateless
create link template L pptp
set link enable multilink
set link yes acfcomp protocomp
set link action bundle B
set link no pap chap
set link enable chap
set link enable chap-msv1
set link enable chap-msv2
set link mtu 1460
set link keep-alive 10 75
set pptp self 0.0.0.0
set link enable incoming
ВПН работает, пользователи выходят в интернет. Но несмотря на то что для них установлени днс от яндекса, днс-запросы всё равно приходят от skydns. Т.е. ресурсы блокируются.
В тоже время утилита nslookup при запуске сообщает, что использует адрес от яндекса (задаётся при подключении к впн серверу).
Создаётся впечатление, что windows запомнила/предпочитает днс сервер полученный при получении динамического адреса, а днс сервер задаваемый при подключении к впн использовать не хочет.
Надеюсь не запутал вас.
Вопросы:
Почему ПК не используют днс прописанный в конфигурации впн сервера и что сделать что бы заработало?
Может есть другие не сложные решения подобной задачи?