iodine

iodine — утилита-туннель, гоняющая IPv4 внутри DNS-запросов. Классика обхода captive-portals (например, Wi-Fi в отеле, где всё блокировано но DNS работает). Проект code.kryo.se/iodine, автор Bjorn Andersson, релизы с 2006.

Идея

Даже в самой закрытой сети DNS-резолвер обычно доступен — иначе браузер не покажет login-страницу captive-portal. Iodine пользуется этим:

  1. Регистрируешь домен, скажем t.example.com.
  2. Ставишь NS-запись: t.example.com NS iodine-server.example.com.
  3. iodine-сервер на iodine-server.example.com слушает UDP:53.
  4. Клиент за captive-portal шлёт DNS-запросы с payload в поддомене: <base32-encoded-data>.t.example.com.
  5. Local DNS-резолвер (тот что доступен) рекурсивно запрашивает эти домены → доходит до iodine-сервера.
  6. iodine-сервер декодирует, обрабатывает, кладёт ответ в DNS-ответ (в TXT/NULL/CNAME record).
  7. Клиент декодирует и получает IP-пакет.

Установка сервера

# Debian / Ubuntu
apt install iodine

# У домена example.com сделать делегирование:
#   t IN NS tns.example.com.
#   tns IN A 1.2.3.4     (IP сервера)

# На сервере (1.2.3.4)
iodined -f -c -P mysecret 10.0.0.1 t.example.com

Клиент

# Автодетект настроек по домену
iodine -f -P mysecret t.example.com

# Использовать конкретный DNS-резолвер (тот что открыт в captive-portal)
iodine -f -r -P mysecret 8.8.8.8 t.example.com

# Ключи:
# -f — foreground
# -P — пароль
# -r — не пытаться прямой UDP, только через DNS
# -T — тип запроса (NULL, TXT, SRV, MX, CNAME, A)

Типы записей

iodine пробует разные DNS-типы, выбирая тот что даёт больший upstream/downstream:

ТипPayload downstreamОбход
NULL~1000 байтМаксимальная пропускная, но многие резолверы режут
TXT~200-500 байтЛучше проходит
SRV~200 байтИногда единственный не заблокированный
CNAME/A~100 байтСовсем плохой канал, но проходит везде

Пропускная способность

Реалистично: 1-100 КБ/с. Хватает на SSH, IRC, лёгкий веб. Не для видео.

Задержка — сотни мс (каждый DNS-round-trip проходит через промежуточный резолвер). SSH ощущается лаггово, но работает.

DNS-tunneling — не только iodine

ИнструментОсобенности
iodineUDP/DNS, IPv4-туннель, TUN-интерфейс, шифрование опционально
dnscat2C2-фреймворк (для pentest), не полноценный VPN, зашифровано
dns2tcpTCP-туннель, проще iodine
heyokaМногопоточный, быстрее iodine, для больших передач
ozymandnsPerl, историческая

Обнаружение

DNS-tunneling довольно легко ловится:

Коммерческие DPI (Palo Alto, Cisco Umbrella, Cloudflare Gateway) детектят iodine сходу. Работает только против неквалифицированных фильтров.

Использование в вредоносах

DNS-tunneling — классика C2 (command-and-control) для APT. Известные семейства использовавшие DNS-туннели: DNSMessenger (Cisco Talos 2017), Denis, PlugX. Именно поэтому корпоративные security решения умеют детектить.

Легальные применения

См. также