Система подмены пакетов DNS-сервера «публичный DNS WS»
В серверных операционных системах Windows Server XXXX есть хорошо реализованная,
легко конфигурируемая служба DNS-сервера (Domain Name System).
Эта служба предоставляет ряд замечательных возможностей, таких как:
-
Развитые средства настройки и управления (графические и консольные);
-
Поддержка службы AD (Active Directory);
-
Поддержка связи со службой DHCP-сервера (Dynamic Host Configuration Protocol) для
автоматической регистрации подключения клиентов;
-
Поддержка связи со службой WINS-сервера (Windows Internet Name System) для
разрешения локальных имён;
-
Возможность динамической автоматической регистрации подключения клиентов;
Всё это очень хорошо, но если необходимо делегировать DNS-сервер в глобальную сеть, чтобы имена публичных сетевых
сервисов локальной сети были видны из глобальной сети, то возникнет много проблем.
Дело в том, что DNS-сервер в стандартной настойке, и особенно в режиме поддержки AD, предоставит в глобальную
сеть слишком много информации, публикация которой или нежелательна, или нарушит правильное разрешение имён публичных
сетевых сервисов. Например, публикация всех записей DNS-сервера в режиме поддержки AD сделает доступной из глобальной
сети информацию о структуре локальной сети, что может представлять коммерческую тайну. Или же, например, если некоторые
публичные сервера имеют как публичные, так и приватные IP-адреса, то сетевые сервисы на этих серверах станут недоступны
из глобальной сети, так как DNS-сервер по запросам будет выдавать или публичные, или приватные IP-адреса случайным образом,
то есть правильное разрешение публичных имён из глобальной сети будет нарушено.
Чтобы обойти указанные выше проблемы, нужно выделить две отдельные DNS-зоны для публичных и приватных адресов и
расположить эти зоны на различных серверах, или же на одном сервере, но отказаться от поддержки AD и настраивать
обе зоны целиком вручную. В обоих случаях теряется возможность автоматического конфигурирования DNS-сервера.
Для решения указанных выше проблем, я разработал систему подмены пакетов DNS-сервера, назвав её —
«публичный DNS». Система перехватывает входящие и исходящие IP-пакеты DNS-сервера,
анализирует их и делает необходимые подмены. Для перехваченных входящих сообщений система анализирует источник их
поступлений. Если DNS-запрос пришёл из локальной сети, то система никак не вмешивается в обработку этого запроса
DNS-сервером,
то есть для локальных запросов система является прозрачной. Если запрос пришёл из внешней сети, то система
анализирует тип запроса и, если запрос является нормальным запросом разрешения имён, то система передаёт его без
изменений DNS-серверу. Если запрос не является нормальным запросом разрешения имён, например это запрос на вставку
новой записи в DNS-зону (регистрация клиента), то система заменит его нормальным запросом SOA-записи и в
перехваченном ответе DNS-сервера сформирует из SOA-записи сообщение об ошибке и передаст его внешнему клиенту.
Таким образом, система является защитником DNS-сервера от атак из глобальной сети. Так как DNS-сервер защищён от атак
из глобальной сети, то можно, со спокойной душой, разрешить «небезопасное» обновление DNS-зоны и производить обновления
с локальных компьютеров, которые работают под управлением операционной системы отличной от WINDOWS, не заморачиваясь с
сертификатами и правами доступа. Если перехваченное ответное сообщение не является шаблоном сообщения об ошибке
(смотри выше), то система распаковывает ответное сообщение и, путем трехкратного прохода, удаляет из распакованного
сообщения записи, соответствующие локальным адресам и ссылкам на них. Система так же удаляет записи WINS и WINSR,
так как эти записи имеют смысл только в локальной сети.
Далее система упаковывает изменённое сообщение и передаёт его внешнему клиенту. Таким образом, внешние клиенты видят
только публичную часть DNS-зоны.
Пример изображения зоны из локальной сети:
> ls -d rtsdd.ru
[test2k12vm.rtsdd.ru]
rtsdd.ru. SOA win2k12vm.rtsdd.ru dukov.rtsdd.ru. (68570 900 600 86400 3600)
rtsdd.ru. A 192.168.0.12
rtsdd.ru. A 192.168.0.17
rtsdd.ru. A 78.107.191.82
rtsdd.ru. A 78.107.191.80
rtsdd.ru. NS ns4-l2.nic.ru
rtsdd.ru. NS ns8-l2.nic.ru
rtsdd.ru. NS rtsdd-server.rtsdd.ru
rtsdd.ru. NS win2k12vm.rtsdd.ru
rtsdd.ru. NS test2k12vm.rtsdd.ru
rtsdd.ru. AAAA 2001:470:522f:252::12
rtsdd.ru. AAAA 2002:4e6b:bf52::4e6b:bf52
rtsdd.ru. AAAA 2002:4e6b:bf50::4e6b:bf50
rtsdd.ru. AAAA 2001:470:522f:252::10
rtsdd.ru. AAAA 2001:470:522f:252:3577:285c:fa10:74c7
rtsdd.ru. AAAA 2001:470:522f:252:5058:c537:df4a:81e1
ns4-l2.nic.ru. A 91.217.20.1
ns8-l2.nic.ru. A 91.217.21.1
31da3b54-b966-4cda-9d43-97e7e81dacca._msdcs CNAME rtsdd-server.rtsdd.ru
77258968-7ac3-46d5-b936-e4982a000d74._msdcs CNAME win2k12vm.rtsdd.ru
_kerberos._tcp.Default-First-Site-Name._sites.dc._msdcs SRV priority=0, weight=100, port=88, win2k12vm.rtsdd.ru
_kerberos._tcp.Default-First-Site-Name._sites.dc._msdcs SRV priority=0, weight=100, port=88, rtsdd-server.rtsdd.ru
_ldap._tcp.Default-First-Site-Name._sites.dc._msdcs SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp.Default-First-Site-Name._sites.dc._msdcs SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
_kerberos._tcp.dc._msdcs SRV priority=0, weight=100, port=88, win2k12vm.rtsdd.ru
_kerberos._tcp.dc._msdcs SRV priority=0, weight=100, port=88, rtsdd-server.rtsdd.ru
_ldap._tcp.dc._msdcs SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
_ldap._tcp.dc._msdcs SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp.c8520fbf-de44-4b70-9830-e6885aa33573.domains._msdcs SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp.c8520fbf-de44-4b70-9830-e6885aa33573.domains._msdcs SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
gc._msdcs A 78.107.191.82
gc._msdcs A 192.168.0.17
gc._msdcs A 192.168.0.12
gc._msdcs A 78.107.191.80
gc._msdcs AAAA 2002:4e6b:bf52::4e6b:bf52
gc._msdcs AAAA 2001:470:522f:252:3577:285c:fa10:74c7
gc._msdcs AAAA 2001:470:522f:252::10
gc._msdcs AAAA 2001:470:522f:252:5058:c537:df4a:81e1
gc._msdcs AAAA 2001:470:522f:252::12
gc._msdcs AAAA 2002:4e6b:bf50::4e6b:bf50
_ldap._tcp.Default-First-Site-Name._sites.gc._msdcs SRV priority=0, weight=100, port=3268, win2k12vm.rtsdd.ru
_ldap._tcp.Default-First-Site-Name._sites.gc._msdcs SRV priority=0, weight=100, port=3268, rtsdd-server.rtsdd.ru
_ldap._tcp.gc._msdcs SRV priority=0, weight=100, port=3268, rtsdd-server.rtsdd.ru
_ldap._tcp.gc._msdcs SRV priority=0, weight=100, port=3268, win2k12vm.rtsdd.ru
_ldap._tcp.pdc._msdcs SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_gc._tcp.Default-First-Site-Name._sites SRV priority=0, weight=100, port=3268, win2k12vm.rtsdd.ru
_gc._tcp.Default-First-Site-Name._sites SRV priority=0, weight=100, port=3268, rtsdd-server.rtsdd.ru
_kerberos._tcp.Default-First-Site-Name._sites SRV priority=0, weight=100, port=88, win2k12vm.rtsdd.ru
_kerberos._tcp.Default-First-Site-Name._sites SRV priority=0, weight=100, port=88, rtsdd-server.rtsdd.ru
_ldap._tcp.Default-First-Site-Name._sites SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
_ldap._tcp.Default-First-Site-Name._sites SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_gc._tcp SRV priority=0, weight=100, port=3268, rtsdd-server.rtsdd.ru
_gc._tcp SRV priority=0, weight=100, port=3268, win2k12vm.rtsdd.ru
_kerberos._tcp SRV priority=0, weight=100, port=88, win2k12vm.rtsdd.ru
_kerberos._tcp SRV priority=0, weight=100, port=88, rtsdd-server.rtsdd.ru
_kpasswd._tcp SRV priority=0, weight=100, port=464, win2k12vm.rtsdd.ru
_kpasswd._tcp SRV priority=0, weight=100, port=464, rtsdd-server.rtsdd.ru
_ldap._tcp SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
_kerberos._udp SRV priority=0, weight=100, port=88, win2k12vm.rtsdd.ru
_kerberos._udp SRV priority=0, weight=100, port=88, rtsdd-server.rtsdd.ru
_kpasswd._udp SRV priority=0, weight=100, port=464, win2k12vm.rtsdd.ru
_kpasswd._udp SRV priority=0, weight=100, port=464, rtsdd-server.rtsdd.ru
acer-tab AAAA 2001:470:522f:252:4427:457f:54af:7c58
acer-tab AAAA 2001:470:522f:1000:5dbf:fc44:2c15:aaf8
DACCESS-VM A 192.168.0.13
DACCESS-VM A 78.107.191.83
DACCESS-VM AAAA 2001:470:522f:252:2876:274c:3e72:a142
DACCESS-VM AAAA 2001:470:522f:252::13
DACCESS-VM AAAA 2002:4e6b:bf53::4e6b:bf53
DACCESS-VM AAAA 2001:470:6c:7b5::2
directaccess-corpConnectivityHost AAAA ::1
DirectAccess-NLS AAAA 2001:470:522f:252::13
DirectAccess-NLS AAAA 2001:470:522f:252:2876:274c:3e72:a142
directaccess-WebProbeHost AAAA 2001:470:522f:252::13
directaccess-WebProbeHost AAAA 2001:470:522f:252:2876:274c:3e72:a142
DomainDnsZones A 78.107.191.82
DomainDnsZones A 192.168.0.17
DomainDnsZones A 192.168.0.12
DomainDnsZones A 78.107.191.80
DomainDnsZones AAAA 2002:4e6b:bf52::4e6b:bf52
DomainDnsZones AAAA 2001:470:522f:252::12
DomainDnsZones AAAA 2001:470:522f:252::10
DomainDnsZones AAAA 2001:470:522f:252:5058:c537:df4a:81e1
DomainDnsZones AAAA 2001:470:522f:252:3577:285c:fa10:74c7
DomainDnsZones AAAA 2002:4e6b:bf50::4e6b:bf50
_ldap._tcp.Default-First-Site-Name._sites.DomainDnsZones SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
_ldap._tcp.Default-First-Site-Name._sites.DomainDnsZones SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp.DomainDnsZones SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp.DomainDnsZones SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
dukov-NL800 A 192.168.0.33
dukov-xp AAAA 2001:470:522f:252:210:5cff:feab:27e5
ForestDnsZones A 78.107.191.82
ForestDnsZones A 192.168.0.17
ForestDnsZones A 192.168.0.12
ForestDnsZones A 78.107.191.80
ForestDnsZones AAAA 2002:4e6b:bf52::4e6b:bf52
ForestDnsZones AAAA 2001:470:522f:252::10
ForestDnsZones AAAA 2001:470:522f:252::12
ForestDnsZones AAAA 2001:470:522f:252:5058:c537:df4a:81e1
ForestDnsZones AAAA 2001:470:522f:252:3577:285c:fa10:74c7
ForestDnsZones AAAA 2002:4e6b:bf50::4e6b:bf50
_ldap._tcp.Default-First-Site-Name._sites.ForestDnsZones SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp.Default-First-Site-Name._sites.ForestDnsZones SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
_ldap._tcp.ForestDnsZones SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp.ForestDnsZones SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
pop3 CNAME server1.rtsdd.ru
rtsdd-server A 78.107.191.80
rtsdd-server A 192.168.0.17
rtsdd-server A 10.20.9.195
rtsdd-server A 192.168.0.44
rtsdd-server AAAA 2001:470:522f:252:3577:285c:fa10:74c7
rtsdd-server AAAA 2001:470:522f:252::10
rtsdd-server AAAA 2002:4e6b:bf50::4e6b:bf50
server-ae A 95.56.226.82
server1 A 192.168.0.18
server1 AAAA 2001:470:522f:252::18
server1 AAAA 2001:470:522f:252:210:5cff:feab:27e5
smtp CNAME server1.rtsdd.ru
TEST2K12VM A 192.168.0.14
TEST2K12VM A 78.107.191.81
TEST2K12VM AAAA 2002:4e6b:bf51::4e6b:bf51
TEST2K12VM AAAA 2001:470:522f:252:171:b068:31ae:95af
TEST2K12VM AAAA 2001:470:522f:252::14
win2k12vm A 10.20.9.58
win2k12vm A 192.168.0.48
win2k12vm A 78.107.191.82
win2k12vm A 192.168.0.12
win2k12vm AAAA 2001:470:522f:252::12
win2k12vm AAAA 2002:4e6b:bf52::4e6b:bf52
win2k12vm AAAA 2001:470:522f:252:5058:c537:df4a:81e1
WIN2K8R2VM A 192.168.0.23
WIN2K8R2VM AAAA 2001:470:522f:252::11
WIN2K8R2VM AAAA 2001:470:522f:252:77:afe:3f06:113d
WIN8EE-VM A 192.168.0.55
WIN8EE-VM AAAA 2001:470:522f:252:94fe:1e59:8ae4:31b2
WIN8PW-PC A 192.168.0.8
WIN8PW-PC AAAA 2001:470:522f:252:58ad:a955:ae09:f36e
www CNAME rtsdd-server.rtsdd.ru
www1 CNAME server1.rtsdd.ru
www2 CNAME rtsdd-server.rtsdd.ru
rtsdd.ru. SOA win2k12vm.rtsdd.ru dukov.rtsdd.ru. (68570 900 600 86400 3600)
> exit
То же самое из внешней сети:
> ls -d rtsdd.ru
[UnKnown]
rtsdd.ru. SOA win2k12vm.rtsdd.ru dukov.rtsdd.ru. (68570 900 600 86400 3600)
ns4-l2.nic.ru. A 91.217.20.1
ns8-l2.nic.ru. A 91.217.21.1
rtsdd.ru. AAAA 2001:470:522f:252::10
rtsdd.ru. AAAA 2001:470:522f:252::12
rtsdd.ru. AAAA 2002:4e6b:bf50::4e6b:bf50
rtsdd.ru. AAAA 2002:4e6b:bf52::4e6b:bf52
rtsdd.ru. NS ns4-l2.nic.ru
rtsdd.ru. NS ns8-l2.nic.ru
rtsdd.ru. NS win2k12vm.rtsdd.ru
rtsdd.ru. NS test2k12vm.rtsdd.ru
rtsdd.ru. NS rtsdd-server.rtsdd.ru
rtsdd.ru. A 78.107.191.80
rtsdd.ru. A 78.107.191.82
31da3b54-b966-4cda-9d43-97e7e81dacca._msdcs CNAME rtsdd-server.rtsdd.ru
77258968-7ac3-46d5-b936-e4982a000d74._msdcs CNAME win2k12vm.rtsdd.ru
_kerberos._tcp.Default-First-Site-Name._sites.dc._msdcs SRV priority=0, weight=100, port=88, win2k12vm.rtsdd.ru
_kerberos._tcp.Default-First-Site-Name._sites.dc._msdcs SRV priority=0, weight=100, port=88, rtsdd-server.rtsdd.ru
_ldap._tcp.Default-First-Site-Name._sites.dc._msdcs SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp.Default-First-Site-Name._sites.dc._msdcs SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
_kerberos._tcp.dc._msdcs SRV priority=0, weight=100, port=88, win2k12vm.rtsdd.ru
_kerberos._tcp.dc._msdcs SRV priority=0, weight=100, port=88, rtsdd-server.rtsdd.ru
_ldap._tcp.dc._msdcs SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp.dc._msdcs SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
_ldap._tcp.c8520fbf-de44-4b70-9830-e6885aa33573.domains._msdcs SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp.c8520fbf-de44-4b70-9830-e6885aa33573.domains._msdcs SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
gc._msdcs AAAA 2001:470:522f:252::10
gc._msdcs AAAA 2001:470:522f:252::12
gc._msdcs AAAA 2002:4e6b:bf50::4e6b:bf50
gc._msdcs AAAA 2002:4e6b:bf52::4e6b:bf52
gc._msdcs A 78.107.191.80
gc._msdcs A 78.107.191.82
_ldap._tcp.Default-First-Site-Name._sites.gc._msdcs SRV priority=0, weight=100, port=3268, win2k12vm.rtsdd.ru
_ldap._tcp.Default-First-Site-Name._sites.gc._msdcs SRV priority=0, weight=100, port=3268, rtsdd-server.rtsdd.ru
_ldap._tcp.gc._msdcs SRV priority=0, weight=100, port=3268, win2k12vm.rtsdd.ru
_ldap._tcp.gc._msdcs SRV priority=0, weight=100, port=3268, rtsdd-server.rtsdd.ru
_ldap._tcp.pdc._msdcs SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_gc._tcp.Default-First-Site-Name._sites SRV priority=0, weight=100, port=3268, win2k12vm.rtsdd.ru
_gc._tcp.Default-First-Site-Name._sites SRV priority=0, weight=100, port=3268, rtsdd-server.rtsdd.ru
_kerberos._tcp.Default-First-Site-Name._sites SRV priority=0, weight=100, port=88, win2k12vm.rtsdd.ru
_kerberos._tcp.Default-First-Site-Name._sites SRV priority=0, weight=100, port=88, rtsdd-server.rtsdd.ru
_ldap._tcp.Default-First-Site-Name._sites SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp.Default-First-Site-Name._sites SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
_gc._tcp SRV priority=0, weight=100, port=3268, win2k12vm.rtsdd.ru
_gc._tcp SRV priority=0, weight=100, port=3268, rtsdd-server.rtsdd.ru
_kerberos._tcp SRV priority=0, weight=100, port=88, win2k12vm.rtsdd.ru
_kerberos._tcp SRV priority=0, weight=100, port=88, rtsdd-server.rtsdd.ru
_kpasswd._tcp SRV priority=0, weight=100, port=464, win2k12vm.rtsdd.ru
_kpasswd._tcp SRV priority=0, weight=100, port=464, rtsdd-server.rtsdd.ru
_ldap._tcp SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
_kerberos._udp SRV priority=0, weight=100, port=88, win2k12vm.rtsdd.ru
_kerberos._udp SRV priority=0, weight=100, port=88, rtsdd-server.rtsdd.ru
_kpasswd._udp SRV priority=0, weight=100, port=464, win2k12vm.rtsdd.ru
_kpasswd._udp SRV priority=0, weight=100, port=464, rtsdd-server.rtsdd.ru
DACCESS-VM AAAA 2001:470:6c:7b5::2
DACCESS-VM AAAA 2001:470:522f:252::13
DACCESS-VM AAAA 2002:4e6b:bf53::4e6b:bf53
DACCESS-VM A 78.107.191.83
DirectAccess-NLS AAAA 2001:470:522f:252::13
directaccess-WebProbeHost AAAA 2001:470:522f:252::13
DomainDnsZones AAAA 2001:470:522f:252::10
DomainDnsZones AAAA 2001:470:522f:252::12
DomainDnsZones AAAA 2002:4e6b:bf50::4e6b:bf50
DomainDnsZones AAAA 2002:4e6b:bf52::4e6b:bf52
DomainDnsZones A 78.107.191.80
DomainDnsZones A 78.107.191.82
_ldap._tcp.Default-First-Site-Name._sites.DomainDnsZones SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp.Default-First-Site-Name._sites.DomainDnsZones SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
_ldap._tcp.DomainDnsZones SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp.DomainDnsZones SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
ForestDnsZones AAAA 2001:470:522f:252::10
ForestDnsZones AAAA 2001:470:522f:252::12
ForestDnsZones AAAA 2002:4e6b:bf50::4e6b:bf50
ForestDnsZones AAAA 2002:4e6b:bf52::4e6b:bf52
ForestDnsZones A 78.107.191.80
ForestDnsZones A 78.107.191.82
_ldap._tcp.Default-First-Site-Name._sites.ForestDnsZones SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp.Default-First-Site-Name._sites.ForestDnsZones SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
_ldap._tcp.ForestDnsZones SRV priority=0, weight=100, port=389, win2k12vm.rtsdd.ru
_ldap._tcp.ForestDnsZones SRV priority=0, weight=100, port=389, rtsdd-server.rtsdd.ru
pop3 CNAME server1.rtsdd.ru
rtsdd-server AAAA 2001:470:522f:252::10
rtsdd-server AAAA 2002:4e6b:bf50::4e6b:bf50
rtsdd-server A 78.107.191.80
server-ae A 95.56.226.82
server1 AAAA 2001:470:522f:252::18
smtp CNAME server1.rtsdd.ru
TEST2K12VM AAAA 2001:470:522f:252::14
TEST2K12VM AAAA 2002:4e6b:bf51::4e6b:bf51
TEST2K12VM A 78.107.191.81
win2k12vm AAAA 2001:470:522f:252::12
win2k12vm AAAA 2002:4e6b:bf52::4e6b:bf52
win2k12vm A 78.107.191.82
WIN2K8R2VM AAAA 2001:470:522f:252::11
www CNAME rtsdd-server.rtsdd.ru
www1 CNAME server1.rtsdd.ru
www2 CNAME rtsdd-server.rtsdd.ru
rtsdd.ru. SOA win2k12vm.rtsdd.ru dukov.rtsdd.ru. (68570 900 600 86400 3600)
> exit
Основными компонентами предыдущей версии системы (PublicDNS) были:
драйвер фильтрации пакетов DNS-сервера «dnsfilter.sys» и
системный сервис анализа и подмены пакетов DNS-сервера «PublicDNSPluginService.exe».
Драйвер фильтрации пакетов DNS-сервера «dnsfilter.sys» являлся драйвером
сетевой службы режима ядра, служил для перехвата входящих и исходящих пакетов DNS-сервера и направления их
на анализ и модификацию сервису «PublicDNSPluginService.exe». Драйвер являлся
сложным много-потоковым драйвером режима ядра, построен с использованием технологии WFP
(Windows Filtering Platform) и содержал в себе набор
«callout» WFP-фильтров, служащих для перехвата и обработки пакетов DNS-сервера.
Системный сервис «PublicDNSPluginService.exe» анализировал и модифицировал входящие и
исходящие пакеты DNS-сервера, полученные с помощью драйвера «dnsfilter.sys».
Алгоритм работы системы был расчитан на то, что всё происходило бы по чесному, т.е.:
авторизация запроса; приём запроса из авторизованного канала; передача ответа через авторизованный канал. Но, даже
при честной игре, если исходящий маршрут отличается от входящего, то авторизованный канал закрывается (хотя стек
WFP получает уведомление об этом событии) и, в следствии этого, подмена исходящего пакета становится невозможной.
Ну а Dos-атаки на UDP-порт 53 вообще нарушают всякие правила.
Разработанная система была крайне неустойчивой и при Dos-атаках почти всегда терпела полный крах.
Новая система построена по несколько другому принципу. Перехват, анализ и подмена UDP-пакетов просходит внутри
процесса системного сервиса «DNS» (dns.exe), а перехват,
анализ и подмена TCP-пакетов внутри WFP-драйвера режима ядра «dnsfirewall.sys».
Этот же драйвер осуществляет защиту системы от Dos-атак (отсюда и название драйвера). Стандартно, процесс
dns.exe при обнаружении Dos-атаки блокирует на время прохождение всех UDP-запросов
с сетевого интерфейса, через который просходит Dos-атака. Если DNS-сервер работает через механизм DMZ или механизм
подмены адресов IP-сервисов сетевого экрана IP-маршрутизатора, это недопустимо, так как локальные клиенты так же
перестают получать ответы на UDP-запросы.
Мой же драйвер блокирует UDP-запросы с конкретных адресов источников Dos-атак. К сожалению, я не сумел разгадать
алгоритм обнаружения Dos-атаки и механизм блокировки сетевого интерфейса процессом dns.exe
и иногда блокировка интерфейса происходит раньше блокировки адреса источника атаки.
Дополнительный функционал сервиса «DNS» достигается инжекцией в сервисный процесс
динамической библиотеки WS2InterceptDLL.dll и перехватом вызовов функций
Windows Socket API. Способ инжекции DLL подобен способу описанному в знаменитой
книге Джеффри Рихтера «Windows для профессионалов». Только в моём способе вместо вызовов
функций Win32 API используются вызозвы функций
Native API из библиотеки ntdll.lib,
что позволило инжектировать DLL в ещё не запущенный процесс и перехватывать инициализационные коды сервисного
процесса. Функции «Нативного АПИ» наиболле полно описаны в книге
«А.В. Коберниченко. Недокументированные возможности Windows NT ». Описание этих
функций на сайтах посвященных Native API
НЕПРАВИЛЬНОЕ!!! Так что у меня в исходниках ntdll.h
правильный и наиболее полный.
Преимуществом обработки UDP-пакетов через перехват вызовов функций WSA перед
обработкой через драйвер WFP является то, что
WSA работает только с данными UDP-пакетов, оставляя обработку IP-закголовков и
контрольных сумм стеку TCPIP, а в случае обработки через драйвер
WFP нужно производить и обработку заголовков, и посчёт контрольных сумм.
Обработка TCP-пакетов через перехват вызовов WSA практически невозможна,
потому что данные TCP-пакетов передаются и принимаются по частям, а WFP имеет
возможность накапливать данные TCP-потоков. А так как WFP работает только с данными
TCP-потоков, то обработка TCP-пакетов через драйвер WFP не вызывает
затруднений.
Описанная выше разработка может оказаться полезной в системах малого и среднего бизнеса. Но, как указывалось в статье
«Служба обхода NAT (Network Address Translation)», лучше бы
компания Microsoft улучшила возможности конфигурирования стандартных служб, и в частности службы DNS-сервера,
стандартных редакций ОС Windows Server, а не распространяла неуправляемые ОС
Small Business Server. Неуправляемость ОС Small Business Server
не означает решения проблемы администрирования системы. Для установки ОС Small Business Server
всё равно необходим достаточно опытный, очень внимательный, обладающий сверх устойчивой нервной системой и поднаторевший
в установке операционных систем данного типа системный администратор. Это происходит потому, что ОС
Small Business Server нельзя реконфигурировать, а можно только снести и установить заново.
Всё сказанное выше относится так же и к операционной системе Windows Home Server.
А идея выделять отдельный компьютер для домашнего сервера является форменным издевательством над потребителем.
Поэтому ОС Windows Home Server должна основываться на ОС
Windows 7, а не на ОС Windows Server 2008 R2.
Сергей Дюков
Таблица загрузок проекта:
| Ссылка |
Описание |
|
PublicDnsSetup.msi
|
Бинарный инсталляционный пакет для 64-разрядных ОС Windows.
|
|
PublicDnsWSA.zip
|
Упакованная папка проекта «Visual Studio 2013»
|
|
PublicDnsWSA
|
Папка проекта «Visual Studio 2013»
Для правильной компиляции проекта необходим установленный
пакет WDK (Windows Driver Kit)
|