Позвольте сделать небольшое отступление и кое-что пояснить. Каждый интернет-протокол по своей сути есть последовательность текстовых символов, посылаемых взад-вперед в определенном порядке. Это примерно как взять грузовик и в кузов поставить легковой автомобиль, а в его багажник сунуть мотоцикл, к которому прицепить велосипед, а на него подвесить пару роликовых коньков. С одним только отличием, что здесь к роликам можно прицепить грузовик.
Рассмотрим для наглядности простой протокол передачи почты, SMTP, используемый для пересылки е-мейла.
Если, к примеру, я пошлю сообщение самому себе, то между мной и моим сервером, в переводе на человеческий язык, состоится вот такая электронная беседа:
> ПРИВЕТ littlebrother.com.se
> 250 mail.pirateparty.org.se mail.pirateparty.org.se, приятно познакомиться
> ПИСЬМО ОТ: m1k3y@littlebrother.com.se
> 250 2.1.0 m1k3y@littlebrother.com.se… Отправитель известен
> ПОЛУЧАТЕЛЬ: m1k3y@littlebrother.com.se
> 250 2.1.5 m1k3y@littIebrother.com.se… Получатель известен
> ДАННЫЕ
>354 Передавайте письмо, закончив его точкой на пустой строке
> Если страшно, непонятно — деру дай, вопя невнятно
>.
> 250 2.0.0 K5SMW0xQ006174 Сообщение принято к доставке
>ВЫХОД
> 221 2.0.0 mail.pirateparty.org.se закрыл соединение
>Соединение закрыто внешним хост-компьютером.
Правила таких переговоров были разработаны в 1982 году Джоном Постелом, одним из легендарных праотцев Интернета. Он лично управлял самыми важными сетевыми серверами, держа их под своим рабочим столом в университете Южной Калифорнии в палеолитическую эпоху Интернета.
А теперь вообразите, что вы подключились к почтовому серверу с помощью программы чата. Вы посылаете ему моментальное сообщение следующего содержания: «ПРИВЕТ littlebrother.com.se», на которое тот ответит: «250 mail.pirateparty.org.se Привет mail.pirateparty.org.se, приятно познакомиться». Иными словами, вы с одинаковым успехом осуществите точно такую же беседу, как и посредством почтовой программы, действующей по протоколу SMTP. И вообще, если кое-что правильно подработать, то всю почтовую переписку можно вести через чат. Или во время сеанса веб-связи. Или еще чего-нибудь.
Такой способ получил название «туннелирование». Вы пропускаете SMTP через чатовый «туннель». Точно так же можно воспользоваться туннелем SMTP для переговоров в чате, если вам захочется поэкспериментировать и проложить туннель в туннеле.
По сути, любой интернет-протокол можно приспособить под туннелизацию. И это круто, поскольку расширяет ваши возможности. К примеру, пусть вы имеете выход в Интернет, ограниченный только доступом к веб-сайтам; тогда вы можете получать по этому туннелю почту или играть в игры. Вы даже можете «затуннелить» по нему икснет (хотя икснет сам по себе является туннелем для десятков протоколов).
DNS — один из самых старых и интересных интернет-протоколов. Он создан еще в 1983 году. С его помощью ваш компьютер переводит имя другого компьютера (например, pirateparty.org.se) в IP-адрес (скажем, 204.11.50.136), который фактически используется компьютерами для общения между собой в сети. На первый взгляд это происходит как по волшебству, однако на самом деле в процессе заняты миллионы электронных и механических деталей. У каждого интернет-провайдера, а также у правительств многих стран и бесчисленных частных операторов имеются собственные DNS-серверы, которые непрерывно переговариваются, подают и выполняют заявки. И каким бы заковыристым ни было имя адресата, введенного вами в ваш компьютер, он все равно сумеет перевести его на язык цифр.
До появления протокола DNS существовал файл HOSTS. Хотите верьте, хотите нет, но это был единственный документ со списком имен и адресов всех до единого компьютеров, имеющих выход в Интернет. И каждый из этих компьютеров имел в памяти копию HOSTS. Когда файл вырос настолько, что стал совершенно неподъемным, изобрели DNS и отвели под него отдельный сервер, стоявший под письменным столом Джона Постела. И если уборщица случайно выдергивала шваброй штекер, весь Интернет замирал, теряя способность отыскать самого себя. На полном серьезе!
Особенность современного протокола DNS заключается в том, что он есть везде. Каждая сеть имеет свой личный DNS-сервер, а вместе эти серверы образуют конфигурацию, обеспечивающую им возможность общаться друг с другом и всеми желающими в Интернете.
Заслуга Маши в том, что она додумалась, как через DNS «затуннелить» потоковое видео. Она дробила видеоклип на миллиарды частичек и прятала их в обычном послании на DNS-сервер. Используя ее код, я с необычайной скоростью собирал эти частички обратно в единое целое с разбросанных по Интернету DNS-серверов. Естественно, моя сетевая гистограмма при этом выглядела довольно странно, будто я разыскиваю адреса всех существующих в мире компьютеров.
Зато у Машиной программы было два преимущества, которые я сразу оценил. Во-первых, молниеносная быстрота — стоило мне щелкнуть мышью на первой же ссылке, как моментально появилась картинка в полный экран, без искажений, полос и каких-либо указаний на адрес отправителя. То есть — второе преимущество — программа работала абсолютно анонимно.
Поначалу я просто не врубился в содержание видео, настолько обалдел от крутизны самого хака. Гнать видео через DNS? Это было до извращенности необычно и клево.
Но постепенно до меня начал доходить смысл происходящего на экране.
В маленькой комнате стоит длинный стол для совещаний, на стене висит зеркало. Комната хорошо мне знакома. Здесь дама с топорной стрижкой требовала от меня назвать ей пароль моей почты. Вокруг стола в роскошных офисных креслах удобно расположились пять человек, все в дээнбистской форме. Я узнал командующего ДНБ в зоне залива, генерал-майора Грэма Сазерленда. Рядом с ним — Топорная Стрижка. Остальных троих я видел впервые. Все повернули головы в направлении монитора, стоящего на краю стола. На экране было лицо, известное мне гораздо лучше других.