# Практика №7. Скрытое туннелирование ICMP, DNS.
Топология корпоритавной инфраструктуры.
**1. ICMP туннелирование.**

На Kali Linux создаем папку icmp при помощи команды `mkdir icmp`. И переходим в директорию `cd icmp`.

Клонируем репозиторий hans с github в папку icmp на Kali Linux при помощи команды `git clone https://github.com/friedrich/hans`.

После чего переходим в папку hans командой `cd hans` и компилим проект командой `make`.

Обновляем репозитории `apt update`, установим утилиты `net-tools` и запустим `hans`.

Запускаем hans от root при помощи команды `./hans -s 10.1.2.0 -p eve@123`. И проверяем командой `ip a`, что у нас поднялся интерфейс `tun0`.

Проделаем аналогичные действия на машинке `Linux-VPN`. Обновим репозитории `apt update` и установим Git `apt install git`.

Кнолируем репозиторий.

Переходим в папку ./hans `cd hans`. Устанавливаем make командй `apt install make` и net-tools командой `apt install net-tools` и g++ командой `apt install g++`.
Собираем проект командой `make`.
Подключаемся к серверу командой `./hans -c 192.168.110.129 -p eve@123` и проверяем `ip a`. Туннель отобразился.

С нашей домашней Windows подключаемся к Kali при помощи команды `ssh user@192.168.110.129`. Пингуем туннель 10.1.2.100 командой `ping 10.1.2.100` и подключаемяся по SSH к этому IP командой `ssh root@10.1.2.100`

Посмотрим через `WireShark pfSense` на внутреннем интерфейсе `e1` трафик.
Как видим, в `data` есть маркировка `hans`.

При пинге с машинки `Linux-VPN` какого-либо адреса, например `8.8.8.8`, данной маркировки нет, что говорит о том, что пакет старнадартный.

**2. Простое DNS-Туннелирование**
Используем ту же самую корпоративную инфраструктуру.
Установим утилиту `iodine` на `Kali Linux` и `Linux-VPN машинки` командой `apt install iodine`.
Запустим на `Kali Linux` сервер `iodine` командой `iodined -P eve@123 10.99.99.1/24 -c i.efanov.com`.


Настроим наш клиент `Linux-VPN`. Пропишем в конфигурации DNS, IP нашей Kali машинки командой `nano /etc/resolv.conf`.

Запускаем `iodine` с клиента `Linux-VPN` командой `iodine -P eve@123 i.efanov.com.`


Посмотрим на трафик в Wireshark с фильтром DNS. Видим Malformed packer (непонятный DNS запрос).

**3. Сложное DNS-Туннелирование**
Инфраструктура корпоративной сети выкгядит следующим образом.

Начнем с настройки внутреннего DNS-сервера на машинке DNS-Internal. Зададим `статический IP` на машине и укажем `DNS-сервер свой` чтобы DNS обращался к себе на 127.0.0.1.

Обновим страницу Server Manager и установим DNS-сервер на машинке.



Выполним аналогичную настройку на машинке `DNS-External`. Но сначала поменяем этому серверу имя.


Настроим `DNS` на машинке `DNS-Internal`, чтобы неизвестные DNS-запросы перенаправлялись на наш DNS-External.


Здесь указываем IP машинки `DNS-External`.

На машинке `DNS-External` cделаем `Forwarders` На сервер `DNS Яндекса`.

Теперь перейдем к настройке конфигурационного файла DNS на машинке `Kali-Linux внутри инфраструктуры`.


Проверим работу DNS `dig` запросом

Теперь заблокируем все DNS запросы изнутри организации через `фаервол` кроме DNS нашего сервера.
Заходим в фаервол.

Переходим в `Rules -> LAN`

Добавляем правило и отключим доступ в Интернет.


Проверяем работу DNS. Видим, что DNS внутреннего нашего сервера отвечает.

Добавим новую зону на `внешнем DNS-External`.



Теперь создадим две записи

В первой укажем IP нашей windows server машинки.
Во второй укажем IP внешней Kali на которую будем делегировать.

Добавим делегирование.



Сделаем пинг до delegate.mirea.tech с нашей внутренней Кали.

Отправим dig NS запрос. Таким образом, DNS настроены правильно. Мы с нашей внутренней Кали попадаем на внешнюю Кали, где настроен DNS сервер. То есть сначала мы попадаем с Кали на наш DNS-Internal, DNS-Internal идет до DNS-External, DNS-External видит, что у него есть зона mirea.tech и у неё есть делегация на tunnel.mirea.tech.

Далее запустим наш фейковый DNS-сервер на внешней (сервер) машинке Kali-2021.


Запустим iodine с внутренней (клиент) машинки Kali-Linux.

Пингуем внешнюю DNS машинку.

Теперь организуем доступ в интернет с внутренней машинки Кали. Для этого на внешней машинке Кали выполним настройку файлы `/etc/sysctl.conf`, чтобы она могла маршрутизировать трафик.

Перезагрузим настройки файла

Настроим `IPTABLES`, чтобы выходить в наружу и иметь доступ в интернет.

На внутренней машинке КАЛИ настроим маршруты.

И видим, что мы молучили доступ в интернет.

