Skip Navigation Links
Проект "Real Time Systems DD"
Система подмены пакетов DNS-сервера «публичный DNS»

В серверных операционных системах Windows Server 2008 и Windows Server 2008 R2 есть хорошо реализованная, легко конфигурируемая служба 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, так как эти записи имеют смысл только в локальной сети. Удаляются так же записи и ссылки на записи IPv6 (AAAA-записи), так как я пока не знаю, как с ними работать и внешние клиенты будут видеть зону как не поддерживающую протокол IPv6 (новая версия системы содержит полную поддержку протокола IPv6). Далее система упаковывает изменённое сообщение и передаёт его внешнему клиенту. Таким образом, внешние клиенты видят только публичную часть 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

Система «публичный DNS» состоит из трёх основных компонент и одного вспомогательного приложения:

  1. Драйвер фильтрации пакетов DNS-сервера «dnsfilter.sys»;
  2. Системный сервис анализа и подмены пакетов DNS-сервера «PublicDNSPluginService.exe»;
  3. Утилита конфигурирования системы «PublicDNSPluginConfig.exe»;
  4. Вспомогательное приложение «DriversInstall.exe»;

Драйвер фильтрации пакетов DNS-сервера «dnsfilter.sys» является драйвером сетевой службы режима ядра, служит для перехвата входящих и исходящих пакетов DNS-сервера и направления их на анализ и модификацию сервису «PublicDNSPluginService.exe». Драйвер является сложным много-потоковым драйвером режима ядра, построен с использованием технологии WFP (Windows Filtering Platform) и содержит в себе набор «callout» WFP-фильтров, служащих для перехвата и обработки пакетов DNS-сервера.

Системный сервис «PublicDNSPluginService.exe» анализирует и модифицирует входящие и исходящие пакеты DNS-сервера, полученные с помощью драйвера «dnsfilter.sys».

Утилита конфигурирования системы «PublicDNSPluginConfig.exe» служит для сохранения в реестре информации о конфигурации локальной сети, которая далее используется в работе системного сервиса «PublicDNSPluginService.exe».


Вспомогательное приложение «DriversInstall.exe» предназначено для инсталляции или деинсталляции драйвера «dnsfilter.sys».

Новая версия системы содержит так же вспомогательное приложение «ServiceDbgPrompt.exe» предназначеное для ожидания запуска процесса «PublicDNSPluginService.exe», чтобы можно было подключить отладчик к этому процессу и отлаживать процедуры запуска сервиса «PublicDNSPluginService».

На разработку, отладку и тестирование системы «публичный DNS» ушло больше года. Пришлось изучить большинство RFC-документов, связанных с DNS, изучить и освоить технологию разработки «callout» драйверов в системе «Windows Filtering Platform», решить проблемы синхронизации данных потоков много-поточного драйвера (в документации «Windows Driver Kit» этот вопрос освещён слабо).

Первоначально система «публичный DNS» отлаживалась и тестировалась на виртуальной машине. Но, как оказалось, в этом режиме не были найдены все логические ошибки в программном коде системы. После этого, для дальнейшего тестирования, система была инсталлирована на моём главном компьютере. И, вот тут, не найденные на предыдущем этапе логические ошибки в программном коде драйвера «dnsfilter.sys» чуть не угробили операционную систему компьютера. Пришлось нарисовать более мене подробный граф управляющего автомата драйвера и, согласно этому графу, почти полностью переписать программный код драйвера. Только после этого функционирование драйвера «dnsfilter.sys» стало надёжным и устойчивым.

Если вы собираетесь модифицировать код сервиса «PublicDNSPluginService.exe» или код драйвера «dnsfilter.sys», настоятельно рекомендую создать виртуальную машину на одном из ваших компьютеров. Далее установить на ней операционную систему Windows Server 2008 R2, Windows Server 2008 или Windows Server 2012, активировать на созданном виртуальном сервере роль DNS-сервера, создать на виртуальном DNS-сервере вторичную DNS-зону тестируемой DNS-зоны и делегировать на родительском домене виртуальный DNS-сервер как первичный. И, только после этого, инсталлировать изменённую систему «публичный DNS» на виртуальный сервер. Запускать виртуальную машину желательно в режиме отладки. Всё это желательно сделать, потому что неправильные вызовы функций драйвера «dnsfilter.sys» могут привести к краху работы операционной системы.

Описанная выше разработка может оказаться полезной в системах малого и среднего бизнеса. Но, как указывалось в статье «Служба обхода 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.

Сергей Дюков

Таблица загрузок проекта:
Ссылка Описание
PublicDnsX64BN.exe Бинарный инсталляционный пакет для 64-разрядных ОС Windows (пакет скомпилирован для платформы «Windows 8.1», так что установка возможна только на компьютерах с ОС «Windows Server 2012 R2»).
PublicDNS.zip Упакованная папка проекта «Visual Studio 2013»
PublicDNS Папка проекта «Visual Studio 2013»
Для правильной компиляции проекта необходима установленная утилита WiX Toolset (Windows Installer XML Toolset) и установленный пакет WDK (Windows Driver Kit)

Таблица комментариев и пожеланий:
Добавте новый комментарий или пожелание:
Имя создателя комментария:   
Адрес электронной почты создателя комментария:   
Текст комментария:   
   
«RTSDD Web-Site» v 1.0.0000.0001 β Системы Реального Времени DD © 2019
Главный архитектор систем Сергей Дюков
Готово Статус исполнения