# Практика №7. Скрытое туннелирование ICMP, DNS # Выполнение практической работы Начиная с практической работы №5 работы, некоторые пользователи и устройства были переименованы, чтобы соотвествовать требованиям преподавателя по идентификации учеников. Выбор пал на имя, которое установлено на родном ноутбуке. В данной работе стандарные имена пользователей оставлены на всех Winodws-серверах и Linux-машины с именем InsiderOlezhaLinux, поскольку эти машины слишком часто падали, чтобы что-то на них было возможно изменить. При выполнении данного пункта было решено модифицировать инфраструктуру из предыдущей практики №4. На устройствах pfSense и Switch сохраняются VLAN 10 и VLAN 20 c сетями 172.16.10.0/24 и 172.16.20.0/24 соотстветсвенно. Появились новые устройства для 1 и 2 части 7 практики. OpenVPN-Olezha-Client - дебиан-машина, на которой проводится вся первая часть практики, относится к устройствам автора, не корпоративной инфраструктуры. EXDNSServerOlezhi, INDNSServerOlezhi, InsiderOlezhaLinux - два сервера DNS, внешний и внутренний, не относящиеся к устройствам автора, и Kali-устройство, которое уже является частью инфрастуктуры без ведома её создателей. ![](https://hackmd.io/_uploads/Hy6oVp1Hh.png) --- ## Первая часть - туннелирование ICMP > **ICMP (Internet Control Message Protocol)** -- протокол сетевого уровня, используемый для диагностики сети. > > Утилиты ping и tracert -- два основных инструмента администратора для диагностики неисправностей в сети. Поэтому трафик ICMP практически никогда не ограничивается. > > > Скрытый канал поверх ICMP (ICMP-туннель) устанавливает скрытое соединение между двумя компьютерами с помощью пакетов эхо-запроса и эхо-ответа протокола ICMP. Пакеты ICMP включают в себя поле Data, содержимое и формат которого строго не определены, что открывает возможность для инкапсуляции любых данных. Технически туннелирование через скрытый канал ICMP происходит посредством внедрения любых нужных данных в эхо-пакет и его пересылки на удаленный компьютер. Удаленный компьютер отвечает подобным образом, внедряя ответ в другой ICMP-пакет и отсылая этот пакет назад. > > > Детектирование и блокировка ICMP-туннелей -- задача нетривиальная, хотя и не очень сложная. Главная проблема заключается в том, что трафик ICMP нельзя блокировать полностью -- это может парализовать инфраструктуру сети. Однако, например, белые списки исходящих ICMP-соединений могут сильно осложнить задачу построения канала наружу. В списке можно оставить лишь известные хосты, необходимые для диагностики соединения. > > Сигнатурами при детектировании туннелей могут служить такие параметры, как сильное отклонение размера пакетов от нормы и слишком плотный и продолжительный поток трафика ICMP от какого‑то одного хоста. Но главный маркер -- это, конечно, поле Data. > > Впрочем, необходимо помнить, что поле Data используют и вполне легитимные утилиты. Например, такая привычная вещь, как утилита ping, в каждом пакете запроса echo заполняет в том числе и поле Data. > > Для борьбы с туннелями ICMP обычно блокируют запросы echo, однако часто не блокируют другие типы ICMP. Например, destination unreachable. Создаём папку для того, чтобы отделить скачивание git-репозитория с ресурса от остальной директории. Это легко делается при помощи команд: ``` mkdir icmp cd icmp ``` ![](https://hackmd.io/_uploads/B1vFLpsV2.png) Далее нам потребуется произвести скачивание с [GitHub](https://github.com/friedrich/hans) инструмента hans, который применяется для постройки ICMP-тоннелей. Для этого пропишем: ``` git clone https://github.com/friedrich/hans ``` ![](https://hackmd.io/_uploads/Skv1d6oN2.png) После успешной загрузки переходим внутрь папки и прописываем команду ``make``, которая отвечает за задействование одноименной утилиты, предназначенной для компиляции программного обеспечения из исходных кодов. Таким образом, мы просто компилируем код, написанный в данном репозитории. ![](https://hackmd.io/_uploads/B194_TsV3.png) Нам также потребуются net-tools для работы утилиты hans. Скачиваем. ``` sudo apt install net-tools ``` ![](https://hackmd.io/_uploads/HkE8F6s4h.png) Далее уже переходим к применению программы hans. Прописывая следующую команду, мы создаём серверную часть и tun-интерфейс с IP 10.1.2.0: ``` sudo ./hans -s 10.1.2.0 -p 12345 ``` ::: info `-s` : указывает на сеть; `-p` : указывает на пароль для подключения к серверу. ::: ![](https://hackmd.io/_uploads/r1wW9pjE2.png) Убедимся, что всё отработало как надо и проверим, что tun0 появился в списке интерфейсов при помощи `ip a`. Запомним ip нового интерфейса - **10.1.2.1**. ![](https://hackmd.io/_uploads/HJYS96iN3.png) Далее уже на устройстве OpenVPN-Olezha-Client необходимо настроить клиентскую часть. В принципе, действия тут одинаковые, так же надо перенести репозиторий из GitHub, но, так как на устройствах Debain, не предустоновлен git, то делаем следующие действия. ``` apt get upadate apt install git ``` ![](https://hackmd.io/_uploads/B1ue2TsVn.png) Соотвественно создаём ту же папку, что и в начале, и сохраняем репозиторий туда. ![](https://hackmd.io/_uploads/ByGo26oV3.png) Нам так же будет необходимо скачать `make` и `net-tools`, как мы делали это до этого. ![](https://hackmd.io/_uploads/BJD03ajE2.png) Также устанавливаем пакет `g++`, который необходим для компиляции на языке C++ (на нём написан hans). ![](https://hackmd.io/_uploads/SyRbpaj42.png) После всего этого мы можем наконец-то скомпилировать hans при помощи команды `make`. ![](https://hackmd.io/_uploads/Skm806sN3.png) И спустя все эти подготовительные этапы установим клиентское соединение через hans: ``` ./hans -c 192.168.192.131 -p 12345 ``` :::info `-c` : указывает на IP-адрес сервера; `-p` : указывает на пароль, который установлен при запуске сервера. ::: Это позволит подключиться к серверу по IP-адресу, создать новый интерфейс tun и назначить ему IP-адрес из сети 10.1.2.0/24. ![](https://hackmd.io/_uploads/SyxhCpsN2.png) При проверке `ip a` видим новый интефейс - tun0 с IP-адресом 10.1.2.100 . ![](https://hackmd.io/_uploads/BJ-XGJ0oE3.png) После настройки тоннеля мы без проблем можем пинговать второй его конец. ![](https://hackmd.io/_uploads/rJcVk0j43.png) И подключаться по ssh через наш новый ICMP-тоннель. ![](https://hackmd.io/_uploads/B1lieCiNn.png) В захвате трафика, который идёт из корпортивной инфраструктуры, присутствуют пакеты, включающие в себя нестандартный вид Data для ICMP-трафика. ![](https://hackmd.io/_uploads/Bkxef0i42.png) --- ## Вторая часть - туннелирование DNS (простой способ) > **DNS-tunneling** -- техника, позволяющая передавать произвольный трафик (фактически, поднять туннель) поверх DNS-протокола. > > Для организации DNS-туннеля необходимо чтобы снаружи (то есть, в точке, куда направлен туннель) его кто-то принимал. Точка приёма является сервером имён для какой-то зоны. Изнутри сети делаются запросы имён по этой зоне, а в качестве результата преобразования возвращаются ответные данные. > > DNS-туннелирование нельзя запретить простыми правилами брандмауэра, разрешив при этом остальной DNS-трафик. Это связано с тем, что трафик DNS-туннеля и легитимные DNS-запросы неразличимы. Обнаруживать DNS-туннелирование можно по интенсивности запросов (если трафик по туннелю велик), а также более сложными методами, используя системы обнаружения вторжений. > >Сначала нужно произвести регистрацию собственного домен, для управления его зонами и субдоменами настраивается свой DNS-сервер, авторитативный для данного домена. Очевидно, этот конец цепочки находится под полным контролем зломуышленником, это будет сторона, выполняющая роль управляющего сервера в создаваемом DNS-туннеле (далее Сервер). > Далее необходимо специальное ПО, совмещенное и работающее согласовано с DNS-сервером, осуществляет в фоновом режиме непрерывный мониторинг всех входящих DNS-пакетов. В частности, оно контролирует каждый входящий запрос на наличие идентифицирующих сигнатур. Уникальная комбинация флагов или значений в служебных полях DNS-запросов могут идентифицировать обращение клиента, после чего такой “особый пакет” распаковывается Сервером согласно заранее условленному алгоритму. После его обработки формируется ответ, точно также инкапсулированный в служебную часть отсылаемого DNS-пакета. > С противоположной стороны, за множеством брандмауэров и сетевых фильтров находится тот, кто должен получать команды и как-то удаленно исполнять их (клиент). Безотносительно к характеру предшествующей фильтрации стандартного TCP/IP-потока, такому клиенту достаточно иметь стандартную возможность резольвить (разрешать) DNS-имена, чтобы создать собственный скрытый и туннелированный канал соединения с заранее указанным и подготовленным Сервером из внешнего Интернета. > > По причине того, что DNS-трафик контролируется редко, многие утилиты не имеют механизма своего сокрытия в сети. Это позволяет использовать техники обнаружения DNS-туннеля, основанные на контроле аномалий трафика. Некоторые признаки аномалии представлены ниже. > > 1. Увеличенное число DNS-запросов. Объем трафика по DNS-протоколу является редко меняющейся величиной. Поэтому внезапное увеличение DNS-запросов может свидетельствовать об аномалии. > > 2. Размер запроса или ответа превышает среднестатистический, равный 40-60 байт, может означать работу скрытого канала. > > 3. Наличие запросов к DNS-серверам с DGA (Domain Generation Algorithms). Имена легитимных доменов, обычно, человекочитаемы, а DGA часто используются для незаконных действий и не несут смысловой нагрузки. Методы обнаружения таких серверов основаны на машинном обучении. > > 4. Присутствие в трафике запросов, использующих редко используемые ресурсные записи, например, TXT, NULL или KEY. > > 5. Обращение к DNS-серверам с длинными именами. Из результатов исследования наибольшая концентрация серверов, используемых злоумышленниками, имеет длину около 200 символов, нормальными считаются имена до 30 символов. Для создания DNS-туннеля в данной практике используется утилита Iodine. **Iodine** – доступна на многих платформах (Linux, Mac OS, FreeBSD и Windows). Позволяет установить SSH-шелл между целевым и управляющим компьютером. Для создания туннеля необходимо с одной стороны поднять сервер **iodined** (со стороны Интернета), а с другой стороны — с той, которая находится внутри сети, за брандмауэром — клиент **iodine**. Для начала работы необходимо скачать утилиту iodine. ``` sudo apt install iodine ``` ![](https://hackmd.io/_uploads/Skg2MAsNn.png) То же делаем и на OpenVPN-Olezha-Client. ![](https://hackmd.io/_uploads/BJec1XAsV2.png) Далее необходимо задать нашу серверную часть. Таким образом, пропишем следующее: ``` sudo iodined -P 12345 10.99.99.1/24 -c i.kseoni4.com ``` :::info `-P` : указывает на пароль, который будет необходимо указать при подключении; Далее следует ``<ip>/<mask>``; `-c` : указывает на домен, на который должны приходить запросы. ::: Лучше использовать по возможности короткие имена, поскольку это сокращает накладные расходы на передачу трафика, инкапсулированного внутрь DNS-пакетов. Сразу посмотрим сетевые настройки и увидим, что у нас поднялся dns0 интерфейс. > **dns0** - это виртуальный интерфейс, который используется для обеспечения связи между приложениями и системой DNS (Domain Name System). Он является частью стека сетевых интерфейсов Linux и представляет из себя локальный DNS-сервер. > > **DNS0** интерфейс позволяет приложениям на хосте обращаться к DNS-серверу, который может быть установлен на том же хосте или на другом удаленном сервере. Вместо того, чтобы приложение напрямую обращалось к DNS-серверу, оно отправляет запросы на dns0 интерфейс, который затем перенаправляет их на соответствующий DNS-сервер. ![](https://hackmd.io/_uploads/Bysme1hNh.png) Для дальнейших действий будет необходимо исправить resolv.conf на дебиан-машине. ``` nano /etc/resolv.conf ``` > **resolv.conf** - это файл конфигурации DNS-клиента в операционной системе Linux. Он содержит настройки для разрешения DNS-имен в IP-адреса и определяет, какие DNS-серверы будут использоваться для этого. ![](https://hackmd.io/_uploads/SJv9VCs4h.png) Делается это для того, чтобы заменить уже установленный фаерволом-роутером DNS-сервер, на нашу машину, которая будет принимать DNS-запросы. Пропишем в файле: ``` nameserver 192.168.192.131 ``` , где 192.168.192.131 - IP нашей основной машинки (Kali-Olezha2022). ![](https://hackmd.io/_uploads/BJDFNAoN3.png) Подключаемся через клиента, запуская DNS-туннель на дебиане: ``` iodine -P 12345 i.kseoni4.com ``` Не забываем указать пароль. После поднятия тоннеля на клиентской машине появится соответствующий сетевой интерфейс. Его можно будет использовать как и любой другой -- осуществлять маршрутизацию, трансляцию адресов и так далее. ![](https://hackmd.io/_uploads/B14dek2Nh.png) Ниже видно, что первый конец тоннеля может найти второй, что может говорить о работосопобсности нашего способа. ![](https://hackmd.io/_uploads/Synqe1nEn.png) Однако такой трафик легко будет распознаваться, если его просмотреть. Все наши пакеты будут помечены как malformed. > **Malformed DNS-пакеты** (искаженные DNS-пакеты) - это DNS-пакеты, которые не соответствуют стандартам протокола DNS. Такие пакеты могут быть вызваны ошибками в софте, ошибками в настройке сети, а также могут быть результатом злонамеренной деятельности, направленной на нарушение работы DNS-серверов или на получение некорректных ответов на запросы. > > Искаженные DNS-пакеты могут вызвать различные проблемы, такие как задержки в обработке запросов, сбои в работе DNS-серверов или некорректные ответы на запросы. Кроме того, такие пакеты могут быть использованы в атаках на DNS-серверы, например, для проведения атаки типа DNS-отравление (DNS poisoning). ![](https://hackmd.io/_uploads/B1xXMk3E3.png) --- ## Третья часть - туннелирование DNS (сложный способ) В этой данной части практики мы будем использовать уже внедрённую нами Kali-linux (InsiderOlezhaLinux), собственную машинку (Kali-Olezha2022), которая будет нашим DNS-сервером, и два Windows-сервера (Внешний (EXDNSServerOlezhi) и локальный-корпоративный (INDNSServerOlezhi)). Все наши последующие действия можно будет описать следующей схемой: ![](https://hackmd.io/_uploads/rJmxQQWr2.png) Наша внутренняя kali-машина, которая уже является частью корпоративной сети (далее - клиент) осуществляет DNS-туннелинг, находясь за брандмауэром. Клиент имеет возможность пользоваться кэширующим DNS-сервером. Клиент направляет кэширующему серверу запросы по зоне tunnel.mirea.tech. Сервер пытается их для него разрешить, для чего выполняет рекурсивную обработку, как предписывается стандартом DNS. В конечном счёте запросы доходят туннелинг-серверу, который находится по адресу, указанному в качестве NS для зоны tunnel.mirea.tech. Туннелинг-сервер обрабатывает их. В частности, он может преобразовать их в IP-трафик и отправить дальше. Обратный трафик преобразуется в DNS-ответы и отправляется кэширующему серверу (который в свою очередь передаёт их туннелинг-клиенту). Таким образом организуется обмен IP-пакетами поверх DNS-трафика. Однако перед всей последующей работой необходимо настроить все Widndows-сервера. Начнём. Первым делом установим статический IP-адрес для внутреннего сервера INDNSServerOlezhi. Для этого переходим по следующему пути: Control Panel --> Network and Internet --> Network and Sharing Center --> Ethernet --> Properties --> Ищем в списке Internet Protocol Vesion 4 (TCP/IPv4) --> Properties. Устанвливаем там необходимые нам параметры: Use the following IP address. * IP address: 192.168.1.55 (Новый статический IP) * Subnet Mask: 255.255.255.0 (Маска статического IP) * Default Gateway: 192.168.1.1 (IP фаервола) ![](https://hackmd.io/_uploads/SkCAXx2Nn.png) После этого нам необходимо нажать на кнопку обноваления в приложении сервера. Далее создадим сам DNS-сервер: Manage --> Add Role and Features. Нажимаем next весь процесс, кроме вкладки Server Roles, там мы выбираем DNS. Нажимаем на кнопку Install и ждём завершения. ![](https://hackmd.io/_uploads/BJOEGl242.png) Собственно, само завершение: ![](https://hackmd.io/_uploads/HyAIug2En.png) После этого нам нужно исправить имя на внешнем DNS-сервере EXDNSServerOlezhi, чтобы не возникало путанницы между двумя DNS-серверами. Кроме того, в лекции было сказано, что время системы сервера может повлиять на его работоспособность по взаимодействию с другими серверами, поэтому исправляем и его, стараясь максимально приблизить к реальному. Изменяем внутреннее имя EXDNSServerOlezhi на ExDNSOlezha: ![](https://hackmd.io/_uploads/HkMZFg2Nh.png) Изменяем внутреннее время системы EXDNSServerOlezhi на наш часовой пояс: ![](https://hackmd.io/_uploads/ryPwFx24h.png) И калибруем его: ![](https://hackmd.io/_uploads/S1SptghV2.png) Вернёмся к внутреннему DNS-серверу (INDNSServerOlezhi). Проверим найстроки новенького DNS-сервера, для этого перейдём:Tools --> DNS Manager -> Properties. Здесь во вкладку Forwarders нам необходимо добавить внешний DNS-сервер, а точнее его IP. > **Forwarders** (переадресация) - это настройка, которая позволяет передавать запросы DNS-клиентов на другой DNS-сервер для получения ответов на запросы, которые локальный DNS-сервер не может разрешить самостоятельно. > > Когда DNS-клиент отправляет запрос на локальный DNS-сервер, локальный DNS-сервер сначала пытается решить запрошенное имя самостоятельно, используя свои зоны и кэш. Если локальный DNS-сервер не может разрешить запрос, то он может передать его на другой DNS-сервер, который имеет больший шанс разрешить запрос. Этот процесс называется переадресацией. :::warning На скрине ниже добавляется IP 192.168.192.162, однако впоследствии он будет сменён на 192.168.192.163, так как из-за случайного краша внешнего сервера DNS, который привёл к его выключению, его IP переполучился и сменился на последний, а потом был задан мной как статический :) Поэтому, везде, где видите 192.168.192.162, представьте там именно 192.168.192.163 ::: ![](https://hackmd.io/_uploads/ryMUW-nV3.png) Вернёмся к настройкам сети на внутреннем сервере и установим ему другой параметр "Preferred DNS server". Это будет localhost, чтобы он ссылался на себя же. ![](https://hackmd.io/_uploads/B1MPignE3.png) Теперь нам необходимо произвести установку DNS-сервера на внешнем сервере EXDNSServerOlezhi. Делаем всё то же, что делали со внутренним, когда устанавливали там DNS. Здесь можно увидеть новое имя внешнего сервера: ![](https://hackmd.io/_uploads/SyXGpl2V3.png) Тут изображён конец установки: ![](https://hackmd.io/_uploads/Sy9ukb3Nn.png) Далее добавим ему во вкладку Forwarders какой-нибудь любой внешний DNS-сервер уровня выше (например, 77.88.8.8 - dns.yandex.ru). ![](https://hackmd.io/_uploads/rya3WZ3Vh.png) Для того, чтобы наше внутреннее Kali-устройство (InsiderOlezhaLinux) правильно отрабатывало, нужно сделать то же, что мы делали во 2 части: изменить resolv.conf и добавить туда наш внутренний корпортивно-локальный DNS-сервер (`nameserver 192.168.1.55`). ``` nano /etc/resolv.conf ``` ![](https://hackmd.io/_uploads/HyKbVZhEn.png) Добавляем DNS-сервер: ![](https://hackmd.io/_uploads/ByKgEWnV2.png) Необходимо проверить, как работают настройки нашего внутреннего DNS-сервера. Воспользуемся утилитой dig, которую применяли ещё во 2 практической работе. >Команда dig (domain information groper) — многофункциональный инструмент для опроса DNS-серверов. Она позволяет получить больше информации о конкретном домене, для того чтобы, например, узнать используемые им IP-адреса. >`dig @сервер доменное.имя тип записи флаги` , где: > * `@cервер` : IP-адрес или доменное имя DNS-сервера (если не указано, dig будет обращаться к DNS-серверу, используемому по умолчанию); > * `доменное.имя` : доменное имя интернет-ресурса, о котором необходимо получить информацию; > * `тип записи` : позволяет указать, для какого типа записи необходим вывод, например A, NS, MX или TXT; > * `флаги` : с помощью флагов утилите dig отдаются дополнительные команды; оговаривается, каким должен быть вывод команды (что в нём должно быть, а чего нет). Используя команду: ``` dig ok.ru ``` мы обращаемся к ресурсу ok.ru, чтобы получить его DNS-записи. И, если присмотреться, то в строке "SERVER:" стоит IP нашего внутреннего сервера. Значит, всё работает отлично. ![](https://hackmd.io/_uploads/rk_SNZ242.png) Настроим фаервол. Допустим, мы запретим любой трафик, за исключением трафика от нашего DNS-сервера. Необходимо выставить в Source IP-адрес корпортивного DNS-сервера, в Destionation указываем 53 порт (тот, на котором обслуживается DNS-протокол). Настройка правила: ![](https://hackmd.io/_uploads/Sk15r-hVn.png) Настройка правила: ![](https://hackmd.io/_uploads/HJc9SW3Vn.png) Таким образом, у нас будет работать только правило на DNS запросы от внутреннего DNS-сервера (другие правила мы отключили). ![](https://hackmd.io/_uploads/S1_gUW3Vh.png) Теперь протестируем два запроса через dig. Тот, который мы делали раннее, и запрос к серверу 8.8.8.8. Второй сработать не должен, поскольку трафик может идти только через наш DNS-сервер, других серверов наша сеть не знает, а подключения к интернету быть не может, так как мы его выключили. На скринах ниже видно, что всё так и происходит. ``` dig ok.ru @8.8.8.8 ``` ![](https://hackmd.io/_uploads/ry_dUb3N2.png) ``` dig ok.ru ``` ![](https://hackmd.io/_uploads/BkSKI-243.png) Далее, сделаем на внешнем DNS-сервере новую зону. Эта зона в итоге будет ссылаться на конкретно наш собственный DNS-сервер, который представляет из себя нашу же Kali-машинку (Kali-Olezha2022). > Зона DNS -- это логическое пространство, которое объединяет доменные имена ваших ресурсов и содержит нужные ресурсные записи. Зоны бывают публичные и внутренние. Вне зависимости от типа, они образуют иерархию: у зоны может быть одна или несколько подзон. Для этого надо вновь перейти в DNS Manager и нажать правой кнопкой мыши по Forward Lookup Zones --> Add New Zone. ![](https://hackmd.io/_uploads/SJP2wZh43.png) Имя зоны установим на "mirea.tech". ![](https://hackmd.io/_uploads/HkubOW3N2.png) Таким образом, у нас есть новая зона: ![](https://hackmd.io/_uploads/B1mEOb24n.png) Перейдём внутрь её и добавим две новых записи типа A: 1. Не вписываем имя, вписываем IP внешнего DNS-сервера, чтобы мы могли попадать на данный сервер, когда ссылаемся на mirea.tech 2. Вписываем имя delegate (полный домен будет выглядеть как delegate.mirea.tech) и устанавливаем IP нашего будущего DNS-сервера Kali-Olezha2022. Благодаря данной записи запросы будут отправляться на наш DNS-сервер. > **A-запись (Address Record)** - содержит соответствие между доменным именем и IP-адресом. Этот тип записи используется для связи доменных имен с конкретными IP-адресами. ![](https://hackmd.io/_uploads/H1ndjWnN2.png) После этого необходимо добавить делегирование. > **DNS-делегирование** - это процесс передачи управления частью доменного имени другому DNS-серверу. Это позволяет разбить доменное имя на более мелкие части и управлять ими отдельно друг от друга. > > Когда DNS-делегирование происходит, авторитетный DNS-сервер для домена (обычно это сервер, управляющий верхним уровнем домена, например, .com или .org) указывает на другой DNS-сервер, который будет отвечать за управление определенной частью доменного имени. Этот другой DNS-сервер становится авторитетным для поддомена, на который происходит делегирование. Установим делегацию на домен tunnel (полный домен tunnel.mirea.tech). > **Delegated domain** - это доменное имя, для которого произведена DNS-делегация, то есть управление частью доменного имени передано другому DNS-серверу. ![](https://hackmd.io/_uploads/rk6qib243.png) Далее нам необходимо указать какие серверы являются авторитетными для делегированного домена. В нашем случае это указанный раннее DNS-сервер под именем delegate. ![](https://hackmd.io/_uploads/rJPfpW3Eh.png) Если мы сейчас попытаемся пропинговать домен delegate.mirea.tech, то стоит заметить, что он не подключается, но ссылается именно на IP нашей Kali-машинки (192.168.192.131). ![](https://hackmd.io/_uploads/SyCpTb243.png) Попробуем вновь использовать dig и посмотрим на NS записи. > **NS-запись** (Name Server Record) - содержит информацию о серверах имен, которые ответственны за управление зоной DNS. NS-записи используются для указания авторитетных DNS-серверов для доменных имён. ``` dig NS tunnel.mirea.tech ``` Видим, что DNS-сервер, отвественный за управления данной зоной, это наш delegate.mirea.tech. Ещё ниже видим его IP в DNS-записи типа A. ![](https://hackmd.io/_uploads/Hk6BJz3E2.png) Вернёмся на наш DNS-сервер (Kali-Olezha2022), чтобы наконец настроить его. Нам потребуется всё та же утилита Iodine. Пишем всё то же, что делали во второй части данной работы, но указываем уже другой домен. ``` sudo iodined -P 12345 10.99.99.1/24 tunnel.mirea.tech ``` Таким образом, мы запустили наш DNS-сервер. Проверим сетевые настройки и убедимся, что dns0 полявился. ![](https://hackmd.io/_uploads/Syqf-z3Nn.png) Проверив сокеты, убедимся, что 53 прослушивается. ``` ss -tunlp ``` Что конкретно делает данная команда, мы разбирали в других работах. ![](https://hackmd.io/_uploads/HJewBbz2E3.png) На Kali-машине, которая находится внутри корпоративной сети, запустим клиентскую часть, попытаясь подключиться. ``` sudo iodine -P 12345 tunnel.mirea.tech ``` ![](https://hackmd.io/_uploads/HJSKSGhNh.png) Проверяем наши интерфейсы и увидим, что конец тоннеля в том числе образовался. Всё прошло успешно, но для выхода в интернет стоит ещё постраться. ![](https://hackmd.io/_uploads/HyucHGhVn.png) Перейдём в файл sysctl.conf на своём DNS-сервере и включим опцию net.ipv4.ip_forward = 1. Таким образом, мы позволяем пересылать IP-пакеты между различными сетевыми интерфейсами. ![](https://hackmd.io/_uploads/HyCVUGnE3.png) ![](https://hackmd.io/_uploads/ByxmUznE3.png) Не забываем о ``sudo sysctl -p`` , чтобы обновить конфигурационные настройки. ![](https://hackmd.io/_uploads/By8LaM24n.png) И последним шагом на данном устройстве будет настройка наттинга, которую мы уже делали в предыдущих работах. ``` sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUARADE ``` > Конкретно, данная команда добавляет правило в таблицу NAT (-t nat), которое применяется после того, как пакеты покидают сетевой интерфейс eth0 (-o eth0). Правило (-j MASQUERADE) изменяет исходный IP-адрес отправителя на IP-адрес интерфейса eth0, что позволяет скрыть реальный исходный адрес отправителя и отправлять пакеты в сеть с использованием общедоступного IP-адреса. ![](https://hackmd.io/_uploads/HyZquf2N3.png) На клиентской машине настроим маршрутизацию. Для этого удалим дефолтный маршрут: ``` sudo ip route del default ``` ![](https://hackmd.io/_uploads/SyrSoznVh.png) И добавим его вновь, но сделаем это через гейтвей другого конца тоннеля (10.99.99.1 (IP-адрес dns0 на устройства DNS-сервера Kali-Olezha2022)). Далется это для того, чтобы весь трафик шёл именно через указанный нами гейтвей. ![](https://hackmd.io/_uploads/Sk5Loz3V2.png) Что ж... пробуем выйти в интернет иии.. ..радуемся, что у нас получается это сделать, пускай и с очень низкой скоростью передачи. ![](https://hackmd.io/_uploads/Sk34ym242.png)