Туннелирование данных 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 обнаружит это и переключится
на туннелирование через сырой UDP, если это возможно. Чтобы принудительно использовать DNS-туннелирование в любом
случае, используйте опцию -r (особенно полезно при тестировании в вашей собственной сети).
Туннельный интерфейс клиента получит IP, близкий к серверному (в данном
случае 192.168.99.2 или .3 и т.д.), и подходящий MTU. Введите тот же пароль, что
и на сервере, либо как опцию командной строки, либо после запуска клиента.
Использование опции -f оставит клиент iodine работать на переднем плане.
Итоговая командная строка в этой примерной ситуации; добавление -r принудительно включает DNS-туннелирование, даже если было бы возможно туннелирование через сырой 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, чтобы прослушивать только один протокол. Сырой режим будет
использоваться на том же протоколе, что и для входа.
Клиент может использовать 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
Ответ во всех этих случаях должен выглядеть как искажённый текст.