Туннелирование данных IPv4 через DNS-серверы для обхода ограничений брандмауэра и обеспечения скрытого сетевого доступа при тестировании на проникновение.
Это программное обеспечение позволяет туннелировать данные IPv4 через DNS-сервер. Это может быть полезно в различных ситуациях, когда доступ в интернет ограничен межсетевым экраном, но DNS-запросы разрешены.
Для сборки iodine вам нужен meson.
Выполните следующие команды для сборки в каталоге build:
meson setup build
cd build
ninja
Для сборки и запуска тестов вам нужна библиотека check. Запустите их,
выполнив ninja test в каталоге сборки.
Попробуйте это в своей собственной локальной сети! Выполните следующие простые шаги:
./iodined -f 10.0.0.1 test.com.
Если вы уже используете сеть 10.0.0.0, используйте другую внутреннюю сеть, например
172.16.0.0../iodine -f -r 192.168.0.1 test.com.
Замените 192.168.0.1 на IP-адрес вашего сервера.10.0.0.2, а у сервера — 10.0.0.1.Чтобы действительно использовать его через ретранслирующий сервер имён, смотрите ниже.
Примечание: сервер и клиент должны использовать абсолютно одинаковый протокол. В большинстве случаев это означает запуск одной и той же версии iodine. К сожалению, реализация обратной и прямой совместимости протоколов обычно неосуществима.
Чтобы использовать этот туннель, вам нужен контроль над реальным доменом (например, mydomain.com),
и сервер с публичным IP-адресом для запуска iodined. Если этот сервер
уже запускает DNS-программу, измените её порт прослушивания и затем используйте опцию -b в iodined,
чтобы позволить iodined пересылать DNS-запросы. (Обратите внимание, что эта процедура
не рекомендуется в производственных средах, поскольку DNS-пересылка iodined
не является полностью прозрачной, например, передачи зон работать не будут.)
В качестве альтернативы вы можете пересылать поддомен с вашего DNS-сервера в iodined,
который тогда должен работать на другом порту (-p).
Затем делегируйте поддомен (скажем, t1.mydomain.com) серверу iodined.
Если вы используете BIND для своего домена, добавьте две строки, подобные этим, в файл зоны:
t1 IN NS t1ns.mydomain.com. ; note the dot!
t1ns IN A 10.15.213.99
Строка NS — это всё, что нужно для маршрутизации запросов для поддомена t1
на сервер t1ns. Мы используем короткое имя для поддомена, чтобы сохранить как можно больше
пространства, доступного для передачи данных. В конце строки NS
находится имя вашего сервера iodined. Это может быть любое имя, указывающее куда угодно,
но в данном случае его легко сохранить в том же файле зоны. Оно должно быть именем
(не IP-адресом), и это имя само должно иметь запись A
(не CNAME).
Если ваш сервер iodined имеет динамический IP, используйте провайдера динамического DNS. Просто
укажите строку NS на него, а строку A опустите:
t1 IN NS myname.mydyndnsprovider.com. ; note the dot!
Затем перезагрузите или перезапустите вашу программу сервера имён. Теперь любые DNS-запросы для
доменов, заканчивающихся на t1.mydomain.com, будут отправляться на ваш сервер iodined.
Наконец, запустите iodined на вашем сервере. Первый аргумент — это IP-адрес
внутри туннеля, который может быть из любого диапазона, который вы ещё не используете (например,
192.168.99.1), а второй аргумент — назначенный домен (в данном
случае t1.mydomain.com). Использование опции -f сохранит работу iodined на
переднем плане, что помогает при тестировании. iodined откроет виртуальный интерфейс
("tun device"), а также начнёт прослушивать DNS-запросы на UDP-порту 53.
Введите пароль в командной строке (-P pass) или после того, как сервер
запустится. Теперь всё готово для клиента.
Если есть вероятность, что вы будете использовать туннель iodine из неожиданных
сред, запустите iodined с опцией -c.
Итоговая командная строка в этой примерной ситуации:
./iodined -f -c -P secretpassword 192.168.99.1 t1.mydomain.com
Вся настройка выполнена, просто запустите iodine. Она принимает один или два аргумента:
первый — локальный ретранслирующий DNS-сервер (необязательный), а второй — домен,
который вы использовали (t1.mydomain.com). Если вы не укажете первый аргумент,
будет использована текущая DNS-настройка системы.
Если DNS-запросы разрешены к любому компьютеру, вы можете напрямую указать адрес сервера iodined в качестве первого аргумента (в примере: t1ns.mydomain.com или 10.15.213.99). В этом случае также может оказаться, что любой трафик разрешён к DNS-порту (53 UDP) любого компьютера. Iodine обнаружит это и, если возможно, переключится на туннелирование через raw UDP. Чтобы принудительно использовать DNS-туннелирование в любом случае, используйте опцию -r (особенно полезно при тестировании в собственной сети).
Туннельный интерфейс клиента получит IP-адрес, близкий к адресу сервера (в данном случае 192.168.99.2 или .3 и т. д.), и подходящий MTU. Введите тот же пароль, что и на сервере, либо как опцию командной строки, либо после запуска клиента. Использование опции -f оставит клиент iodine работать на переднем плане.
Итоговая командная строка в этой ситуации; добавление -r принудительно включает DNS-туннелирование, даже если raw UDP-туннелирование было бы возможно:
./iodine -f -P secretpassword t1.mydomain.com
С любой стороны теперь вы должны иметь возможность пропинговать IP-адрес на другом конце туннеля. В данном случае ping 192.168.99.1 с клиента iodine и 192.168.99.2 с сервера iodine.
Данные внутри туннеля передаются только по IPv4.
Сервер по умолчанию принимает входящие запросы как по IPv4, так и по IPv6. Используйте опции -4 или -6, чтобы слушать только один протокол. Raw-режим будет использоваться на том же протоколе, что и при входе.
Клиент может использовать IPv4- или IPv6-серверы имён для подключения к iodined. Ретранслирующие серверы имён при необходимости автоматически выполнят преобразование между протоколами. Используйте опции -4 или -6, чтобы заставить клиента использовать определённую версию IP для своих DNS-запросов.
Если ваш сервер слушает IPv6 и доступен, добавьте для него запись AAAA в вашу настройку DNS. Расширение приведённого выше примера будет выглядеть так:
t1 IN NS t1ns.mydomain.com. ; note the dot!
t1ns IN A 10.15.213.99
t1ns IN AAAA 2001:db8::1001:99
Можно направить весь трафик через DNS-туннель. Для этого сначала добавьте маршрут к хосту сервера имён, используемого iodine, через проводной/беспроводной интерфейс с шлюзом по умолчанию в качестве шлюза. Затем замените шлюз по умолчанию на IP-адрес сервера iodined внутри DNS-туннеля и настройте сервер для выполнения NAT.
Однако учтите, что туннелируемый трафик данных вообще не шифруется и может быть относительно легко прочитан и изменён внешними сторонами. Для максимальной безопасности запустите VPN через DNS-туннель (=двойное туннелирование) или используйте доступ по secure shell (SSH), возможно, с перенаправлением портов. Последнее также можно использовать для веб-сёрфинга, если вы запустите веб-прокси (например, Privoxy) на своём сервере.
Сервер iodined отвечает на запросы NS, отправленные для поддоменов домена туннеля. Если ваш поддомен iodined — t1.mydomain.com, отправьте запрос NS для foo123.t1.mydomain.com, чтобы проверить, работает ли делегирование. dig — хороший инструмент для этого:
% dig -t NS foo123.t1.mydomain.com
ns.io.citronna.de.
Кроме того, сервер iodined будет отвечать на запросы, начинающиеся с 'z', для любого из поддерживаемых типов запросов, например:
dig -t TXT z456.t1.mydomain.com
dig -t SRV z456.t1.mydomain.com
dig -t CNAME z456.t1.mydomain.com
Во всех этих случаях ответ должен выглядеть как искажённый текст.