Pull to refresh

DNS Tunneling via iodine: сыр действительно бесплатный

Information Security *
Есть:
— отключенный за неуплату интернет (adsl, lan, etc)
или
— нешифрованная wi-fi сеть c закрытым интернетом, но работающим dns
или
— очень строгий firewall с открытым dns

Хочется:
полноценный интернет, пусть даже очень медленно

Прежде, чем ответить на вопрос «как?» — несколько замечаний.

1. Эта статья — практическое руководство, а не теоретический курс «введение в особенности работы служб DNS» (на эту тему и так написано достаточно).

2. Все примеры приводятся для платформы windows, как самой популярной на десктопах. С другой стороны, все приведенные методы работают не хуже и в unix-окружении (google без труда подскажет альтернативы там, где у меня упоминаются windows-only решения).

3. Чтобы описанный способ заработал, вам понадобится в качестве сервера постоянно работающий и подключенный к интернету компьютер с «белым» IP (не важно, статическим или динамическим, но адреса вида 192.168.*.* или 10.*.*.* не подойдут).

4. Эй, provider guys! NSTX, использующий аналогичный метод, известен уже лет 7, а все равно до сих пор в большинстве сетей этот трюк срабатывает. Теперь и «под винду» есть решение «под ключ». Берегите dns'ы :)

Введение

Во всех случаях, перечисленных в начале статьи, остается одна лазейка — dns-сервер, до которого обычно можно «достучаться». Что нам дает dns сервер? Теоретически — возможность послать запрос произвольного содержания на произвольный другой dns-сервер (уже за пределами «закрытой/отключенной» зоны), и получить произвольный ответ. Теоретически, это позволяет получить доступ к сети, инкапсулируя IP пакеты в dns запросы и ответы. Сейчас я расскажу, как это сделать на практике.

Часть 1. Регистрация
  • Регистрируемся на сервисе dyndns.com
  • Заводим себе динамический dns, выбираем адрес (скажем, dnstun.dyndns.org)
  • Регистрируемся на сервисе co.cc
  • Регистрируем себе у них бесплатный домен (скажем, dnstun.co.cc), и указываем для него dns сервером наше dyndns-имя, dnstun.dyndns.org (если такой способ не сработает, можно добавить к домену nx-запись для его поддомена, ссылающуюся на наш dyndns-домен, это делается в «Zone Records», к примеру, host: tunnel.dnstun.co.cc, type: NS, Value: dnstun.dyndns.org", и в дальнейшем вместо dnstun.co.cc везде использовать tunnel.dnstun.co.cc)
  • Ждем делегирования домена и появления его на всех dns серверах (до 48 часов)
Часть 2. Сервер (т.е. тот компьютер, который находится в «большом» интернете, без всяких firewall и т.д.)
  • Скачиваем и устанавливаем dyndns updater:
    www.dyndns.com/support/clients
  • Скачиваем и устанавливаем TAP драйвер из пакета OpenVPN:
    openvpn.net/release/openvpn-2.0.9-install.exe
  • Скачиваем свежую сборку iodine:
    code.kryo.se/iodine/iodine-latest-win32.zip
  • Запускаем сервер iodine:
    iodined -f 10.0.0.1 dnstun.co.cc
  • С помощью kerio или встроенных средств windows создаем общий доступ к интернету для вновь появившегося сетевого соединения (через виртуальный адаптер TAP-Win32 Adapter V8)
Часть 3. Клиент (тот компьютер, которому из всего интернета доступен только dns)
  • Скачиваем и устанавливаем TAP драйвер из пакета OpenVPN:
    openvpn.net/release/openvpn-2.0.9-install.exe
  • Скачиваем свежую сборку iodine:
    code.kryo.se/iodine/iodine-latest-win32.zip
  • Запускаем клиент:
    iodine -f 92.162.2.72 dnstun.co.cc
    Здесь 92.162.2.72 это IP адрес любого доступного dns сервера
    (именно IP, писать ns1.provider.ru нельзя — не сработает).
    Узнать IP dns серверов, установленных в системе, можно по команде
    ipconfig /all
  • Теперь остается настроить роутинг так, чтобы все пакеты, кроме тех, что идут к dns серверу, заворачивались на вновь поднятый виртуальный интерфейс. Это — домашнее задание. Подсказка.

P.S. Оно есть и под maemo, и под win mobile.
P.P.S. Умный читатель догадается, что чтобы совсем все хорошо работало, нужно еще подправить MTU в реестре.

UPD: ссылка для желающих поучаствовать в разработке iodine
Tags:
Hubs:
Total votes 85: ↑78 and ↓7 +71
Views 23K
Comments Comments 70