Skip Navigation Links
Проект "Real Time Systems DD"
Система подмены пакетов 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)

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