DNS-tunneling
Материал из Xgu.ru
DNS-tunneling — техника, позволяющая передавать произвольный трафик (фактически, поднять туннель) поверх DNS-протокола. Может применяться, например, для того чтобы получить полноценный доступ к Интернет из точки, где разрешено преобразование DNS-имён.
Для организации DNS-туннеля необходимо чтобы снаружи (то есть, в точке, куда направлен туннель) его кто-то принимал. Точка приёма является сервером имён для какой-то зоны. Изнутри сети делаются запросы имён по этой зоне. Так передаётся трафик изнутри <—. В качестве результата преобразования возвращаются ответные данные. Так передаётся трафик внутрь —>.
DNS-туннелирование нельзя запретить простыми правилами брандмауэра, разрешив при этом остальной DNS-трафик. Это связано с тем, что трафик DNS-туннеля и легитимные DNS-запросы неразличимы. Обнаруживать DNS-туннелирование можно по интенсивности запросов (если трафик по туннелю велик), а также более сложными методами, используя системы обнаружения вторжений.
Содержание |
[править] iodine
Существует большое количество различных программ, которые позволяет передавать трафик поверх DNS-запросов. Одна из таких программ — iodine.
Названием программа обязана двум фактам:
- Сокращение IOD происходит от слов IP Over DNS,
- У химического элемента йод (iodine) атомное число 53, как и у порта DNS.
Для создания туннеля необходимо с одной стороны поднять сервер iodined (со стороны Интернета), а с другой стороны — с той, которая находится внутри сети, за брандмауэром — клиент iodine.
В проверочном режиме в качестве аргумента клиента указывается домен, в виде запросов по которому будет представляться туннелируемый трафик, а также обязательно IP-адрес iodine-сервера.
В нормальном режиме второй аргумент не передаётся, а определяется автоматически через DNS.
%# iodine -P 123 ns.xgu.ru 5.6.7.8
Для построения туннеля не в проверочном режиме, а в полноценном, необходимо обязательно указать, что сервер iodined является NS для какой-то определённой зоны.
Например, пусть это будет зона ns.xgu.ru. Тогда в описании зоны xgu.ru должны присутствовать строки (имена условные):
ns.xgu.ru. NS iodine.xgu.ru. iodine.xgu.ru. A 1.2.3.4
Лучше использовать по возможности короткие имена, поскольку это сокращает накладные расходы на передачу трафика, инкапсулированного внутрь DNS-пакетов. |
Со стороны сервера:
%# iodined -f -m 220 -l 1.2.3.4 -P 123 192.168.0.1 ns.xgu.ru
Здесь:
- -f — не уходить в фон;
- -m mtu — использовать пакеты с заданным MTU (некоторый брандмауэры режут слишком большие DNS-пакеты);
- -l IP — прослушивать только на указанном IP, а не на всех (может пригодиться, когда на машине уже работает DNS-сервер, только на других интерфейсах);
- -P pass —
Со стороны клиента:
%# iodine -P 123 ns.xgu.ru
На клиентской стороне будет установлен адрес 192.168.0.2 (последний байт плюс 1).
Если всё пройдёт успешно, то должны будут появиться сообщения:
Opened dns0 Opened UDP socket Version ok, both running 0x00000402. You are user #3 Setting IP of dns0 to 192.168.0.5 Setting MTU of dns0 to 220 Sending queries for ns.xgu.ru to 127.0.0.1 Detaching from terminal...
Адреса и имена будут другими, а сообщения такими же.
После поднятия туннеля на клиентской машине появится соответствующий сетевой интерфейс. Его можно будет использовать как и любой другой — осуществлять маршрутизацию, трансляцию адресов и так далее.
%# ifconfig dns0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:192.168.0.5 P-t-P:192.168.0.5 Mask:255.255.255.0 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:220 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
[править] Пояснение к схеме DNS-туннелинга
Ноутбук клиента, осуществляющего DNS-туннелинг находится за брандмауэром. Клиент имеет возможность пользоваться кэширующим DNS-сервером. Клиент направляет кэширующему серверу запросы по зоне iodine.xgu.ru. Сервер пытается их для него разрешить, для чего выполняет рекурсивную обработку, как предписывается стандартом DNS.
В конечном счёте запросы доходят туннелинг-серверу, который находится по адресу, указанному в качестве NS для зоны iodine.xgu.ru. Туннелинг-сервер обрабатывает их. В частности, он может преобразовать их в IP-трафик и отправить дальше. Обратный трафик преобразуется в DNS-ответы и отправляется кэширующему серверу (который в свою очередь передаёт их туннелинг-клиенту).
Таким образом организуется обмен IP-пакетами (— — —) поверх DNS-трафика (————).
[править] Дополнительная информация
- iodine (англ.) — домашняя страница программы iodine
- IP over DNS (англ.) — передача трафика поверх DNS при помощи других программ
- Iodine: DNS туннель через закрытый WiFi (рус.) — хорошая статья на эту тему со множеством деталей
[править] Материалы по DNS на xgu.ru
- DNS
- DNS-spoofing
- DNS-tunneling
- Настройка DNS-сервера BIND
|
---|