В преддверии Нового Года хотелось бы поделиться с сообществом Хабрахабр простым розыгрышем, который случайно пришёл в голову при работе с SSH-туннелями.
Разыграть можно друзей, коллег, создателей веб-сайтов, дизайнеров, которые ещё не закончили работу над своими проектами в компаниях соответствующего профиля.
В частности, если веб-студия работает с веб-сервером XAMPP, то все сайты, находящиеся в стадии разработки и отображающиеся в строке браузера на компьютере веб-мастера как http://localhost/new_cool_site, можно оформить, как поддиректории произвольного домена http://mydomain.ru/new_cool_site. Особенно забавно это будет выглядеть, если в качестве mydomain.ru вы выберете, например, kremlin.ru. Демонстрация сайта президента с вашими работами в каком-нибудь кафе или даже дома с параллельным рассказом о том, как глубоко администрация главы государства заинтересовалась вашим творчеством, может произвести неизгладимое впечатление на неискушённых в этом собеседников.
Если же вы являетесь системным администратором, то то же самое можно показать вашим веб-мастерам и дизайнерам, которые будут ломать голову, как это их незаконченные работы вдруг оказались выложены в интернет на чужом домене.
Идея состоит в следующем.
Имеется некий компьютер, с которого мы будем морочить голову собеседнику. Допустим, это ноутбук с доступом по Wi-Fi.
На этом компьютере создаётся и поднимается виртуальный интерфейс с помощью пакета OpenVPN, на котором прописывается IP-адрес (как правило, серый) удалённого веб-сервера с 24-битной маской.
Далее, в файле %WINDIR%\system32\drivers\etc\hosts задаётся соответствие этого IP-адреса (172.16.0.10) произвольному доменному имени, которое придёт вам в голову, например kremlin.ru.
Кроме этого, нам потребуется рутовый SSH-доступ к маршрутизатору компании, с которого по локальной сети виден рабочий компьютер с внутренним веб-сервером студии. Рутовый потому, что мы будем пробрасывать привелигированный 80-й порт.
Остаётся запустить на нашем ноутбуке SSH-клиент, например PuTTY, и создать прямой туннель, подключившись к маршрутизатору со следующими настройками:
Всё. Теперь открывайте сайт с прописанного в hosts доменного имени и зовите кого-нибудь посмотреть.
Поднятый нами туннель — довольно редкая разновидность туннеля по расширенной схеме, которая отписана в этой статье. В 99% случаев Source address является адресом локальной петли и не указывается явно, поэтому под него даже не выделено место в настройках туннеля в Putty. Но в данном случае он отличается от localhost, поэтому приходится впихивать его вместе с Source port.
Должен предупредить, что фокус пройдёт только для таких сайтов, для которых не настроена переадресация с IP в доменное имя, что как раз и бывает на серверах типа XAMPP.
Таким образом, результат достигается без VPN и манипуляций с DNS-серверами — просто ловкость рук и никакого мошенничества.
Postscriptum
Господа,
С момента опубликования этой статьи я отметил крайне негативное отношение к ней со стороны профессионалов.
Я прошу с пониманием отнестись к тому, что аудитория читателей хабра существенно шире, чем сообщество хабражителей.
И далеко не всем из читателей приходилось решать подобные задачи или делать это регулярно.
Поэтому, вы уж, пожалуйста, не лютуйте.
Комментарии (18)
xomiakba
02.12.2016 16:43+4Немного не догнал, а что мешает поднять туннель до офиса и прописать в hosts:
IP-веб_сервера_в_офисе kremlin.ru
??olegbolden
02.12.2016 18:17-1Я тоже не совсем понимаю, что вы имеете в виду.
Вы, очевидно, попадёте на сайт президента, которому я грешным делом, обеспечил сегодня повышенную популярность :)alexkuzko
02.12.2016 19:30+1Вы шутите? :)
Если цель это открыть ваш сайт на любом домене, то именно так можно и поступить, имея доступ во внутреннюю сеть. Если внутренняя сеть имеет публичный айпи — еще проще…olegbolden
02.12.2016 19:42Нет, я совршенно серьёзно.
Вот вы сидите в кафе и открываете в браузере kremlin.ru/бла-бла-бла
И что происходит дальше?alexkuzko
02.12.2016 21:06+2Если я предварительно в /etc/hosts (да, я на линуксе работаю и мне не нужен костыль в виде PuTTy) внес IP офисного компа (на котором по легенде висит некий тестовый сайт) и если у меня установлен VPN к офису (т.е. IP офисных компов доступны мне на локали), то откроется «левый» сайт на известном домене.
Но так я могу любой сайт «открывать»… А если не требуется открывать именно сайт для разработчика, то и VPN не нужен — на 127.0.0.1 завести нужный домен и все — готово представление…
P.S. Вообще, у вас условие надуманное. Как и аргументация. Ведь и кафе может иметь ограниченный Wi-Fi, где только 80-й и 443-й порты открыты (и тут SSH не поможет, хорошо если вы предусмотрительно повесили OpenVPN на 443-й порт, а если нет?), и «целевой» сайт может иметь сертификат, который вместо «зеленого замочка» покажет перечеркнутый красным ;)
P.P.S. Не для холивара, но в виду того что пример на Windows, есть мысль что вы излишне восторгаетесь будничными для Linux-пользователя (и уж тем более — администратора) вещами… Описали бы вы тройной вложенный SSH-туннель, netcat и т.п…olegbolden
02.12.2016 22:52-1В том то и дело, что речь идёт о среднестатистических ноутбуках и рабочих станциях, которые на 95% на виндах, где никто заморачиваться с созданием VPN для этого не будет.
А при наличии Linux всё, конечно, упрощается. Я как раз сегодня развлекался пропусканием SSH-VPN по обратному туннелю SSH и в этом смысле возможности Linux просто неограничены.
Что касается открытых/закрытых портов и всяких других условностей, то невозможно всё предусмотреть в этой жизни. И про HTTPS я намеренно не писал, но большинство сайтов в разработке всё-таки пока на HTTP. В статье опущены все эти частности — показан принцип.
Сопоставить доменному имени клон loopbackа типа 127.0.0.5 не получится. Винда, по крайней мере, подобные сопоставления почему-то игнорирует, хотя по самому IP сайт откроется. Поэтому я и предложил простой способ установки дополнительного адаптера, который минуты 3 занимает. А если у вас VMware или VirtualBox, то всё уже под руками.
Вобщем, ничем я не восторгаюсь, я просто показал фокус для Windows, который мне лично не кажется банальным. И, честно говоря, я очень озадачен тем, что меня опустили ниже плинтуса.scarab
03.12.2016 13:37+2Не кажется банальным этот фокус исключительно Вам. Большинству посетителей хабра, сфера интересов которых лежит в этой области, такой «фокус» может показаться небанальным только из-за того, что подобная глупость просто никому не придёт в голову.
Ну вот не вижу я ничего смешного, чтобы открыть свой сайт якобы на постороннем домене. И, похоже, не только я.
Что же касается нюансов технической реализации — то тут есть миллион вариантов, из которых Ваш отнюдь не самый изящный.
Навскидку:
— прописать в hosts алиасы на 127.0.0.1 и поднять веб-сервер на своём ноутбуке. Я не знаю, почему у Вас «винда подобные сопоставления игнорирует», у меня прекрасно работает и я этой схемой неоднократно пользовался, когда приходилось подпиливать чужие сайты с hard-coded ссылками.
— если всё же не получается на локалхосте — поднимите второй адрес на обычном сетевом интерфейсе и сошлитесь на него. Это умеет даже винда, только надо нажать кнопочку «advanced».
— поднять на своём ноутбуке любую систему виртуализации, линукс с вебсервером в виртуалке, алиас в hosts и поехали. Это может показаться немного замороченным, но я знаю огромное количество веб-разработчиков, которые эту связку держат в качестве рабочей: это позволяет работать хоть в самолёте, смотреть разрабатываемый сайт с винды в любом нужном браузере, при этом не заморачиваясь разворачиванием на ней веб-сервера (да и не всегда конфигурацию того же nginx можно смоделировать под вендозе).
Ну и ещё миллион способов, включая локальный DNS-сервер и так далее. Вариантов масса, вопрос только в одном: Вы точно уверены, что это — смешно?olegbolden
03.12.2016 15:46-1Начнём с того, что если Вам эта заметка кажется банальной, то она просто не для Вас.
В вашем комментарии ключевая фраза «Ну вот не вижу я ничего смешного».
Возможно другие думают иначе и это статья для них.
Что касается изящества, то вопрос о том, что проще — «поднять вебсервер», «поднять систему виртуализации» или запустить PuTTY, тем более, если это не ваш личный компьютер, является риторическим.
Интерфейс в альтернативной конфигурации будет работать только в том случае, если не работает основной по DHCP. Как вы будете использовать этот альтернативный интерфейс, когда работает основной, я не знаю.
Неработоспособность сопоставления локальных адресов доменным именам — это проблема, в которой мне было лень разбираться. Я просто понял, что это ненадёжно и предложил вариант с дополнительным интерфейсом, который работоспособен на 100%.
А вообще мне просто становится смешно — здесь на хабре я чувствую себя провинившимся мальчишкой в кабинете директора школы, которому педсовет строго выговаривает:
— Как ты мог сморозить такую глупость в уважаемом обществе?! И даже если решил сморозить, то почему выбрал именно этот вариант из миллиона других?!
И я отвечу — я имею право на подобные глупости, ибо если бы они были таковыми, то их бы не публиковали на хабре. И из миллиона я решил осветить именно МОЙ вариант, не претендуя на то, что другие невозможны.alff31
03.12.2016 16:37+1Так hosts приоритетней, чем DNS. Изменить его и все.
В винде правите C:\Windows\System32\drivers\etc\hosts.
В линуксах /etc/hosts
Постоянно пользуюсь в разработке чтобы что-либо проверить перед деплоем на продакшен.Ambroyz
03.12.2016 23:04+1Я думаю, что проблема использования hosts во всей этой истории в том, что виндовая функция DnsQuery, в которую приходят все способы резолва имени (кроме самописной реализации на сокетах), имеет флаг DNS_QUERY_NO_HOSTS_FILE — который поддерживается еще с XP и запрещает резолвить из hosts. Довольно много программ использует его если не постоянно, то при недоверии к ответу.
symbix
03.12.2016 17:17А такая специализация в профиле у вас появилась после того, как проделали эту шутку? ;)
scronheim
05.12.2016 10:40интересная у Вас директория с заббиксом в адресной строке
olegbolden
05.12.2016 23:55Заббикс выгядит так же, как и обычный сайт.
Просто под руками оказался на момент написания статьи.
w4r_dr1v3r
11.12.2016 00:01Тот редкий случай, когда можно воочию наблюдать легендарный, возведённый в абсолют в огромном количестве баек о хабраюзерах снобизм. Не понимаю, зачем вы накинулись на парнишку-то? Ну он пошутил, да. Ну вам не смешно, да. Ну вы накидали более годных с вашей точки зрения решений. Но минусовать его за свободомыслие — это уже некоторый симптом.
PS: лично мне как не специалисту было полезно и познавательно прочесть и сам пост автора, и технический разбор неточностей предложенной им реализацией в комментариях местных старожилов. Спасибо, Хабр.
ilyaplot
Полезнее было придумать для студии что-то более подходящее, чем xampp вместо «розыгрыша».
olegbolden
Я не сомневаюсь, что здесь собрались серьёзные люди. И серьёзные проекты у меня тоже есть. Например, «Виртуальные классы» (viclass.ru), описание которого Хабр отклонил под предлогом того, что это реклама.
А этот пост из категории «Айтишники шутят» без претензии на серьёзность.
Только суровые админы почему-то считают этот юмор чёрным.