image


В преддверии Нового Года хотелось бы поделиться с сообществом Хабрахабр простым розыгрышем, который случайно пришёл в голову при работе с SSH-туннелями.

Разыграть можно друзей, коллег, создателей веб-сайтов, дизайнеров, которые ещё не закончили работу над своими проектами в компаниях соответствующего профиля.

В частности, если веб-студия работает с веб-сервером XAMPP, то все сайты, находящиеся в стадии разработки и отображающиеся в строке браузера на компьютере веб-мастера как http://localhost/new_cool_site, можно оформить, как поддиректории произвольного домена http://mydomain.ru/new_cool_site. Особенно забавно это будет выглядеть, если в качестве mydomain.ru вы выберете, например, kremlin.ru. Демонстрация сайта президента с вашими работами в каком-нибудь кафе или даже дома с параллельным рассказом о том, как глубоко администрация главы государства заинтересовалась вашим творчеством, может произвести неизгладимое впечатление на неискушённых в этом собеседников.

Если же вы являетесь системным администратором, то то же самое можно показать вашим веб-мастерам и дизайнерам, которые будут ломать голову, как это их незаконченные работы вдруг оказались выложены в интернет на чужом домене.

Идея состоит в следующем.

Имеется некий компьютер, с которого мы будем морочить голову собеседнику. Допустим, это ноутбук с доступом по Wi-Fi.

На этом компьютере создаётся и поднимается виртуальный интерфейс с помощью пакета OpenVPN, на котором прописывается IP-адрес (как правило, серый) удалённого веб-сервера с 24-битной маской.

image

image

image

image

Далее, в файле %WINDIR%\system32\drivers\etc\hosts задаётся соответствие этого IP-адреса (172.16.0.10) произвольному доменному имени, которое придёт вам в голову, например kremlin.ru.

Кроме этого, нам потребуется рутовый SSH-доступ к маршрутизатору компании, с которого по локальной сети виден рабочий компьютер с внутренним веб-сервером студии. Рутовый потому, что мы будем пробрасывать привелигированный 80-й порт.

Остаётся запустить на нашем ноутбуке SSH-клиент, например PuTTY, и создать прямой туннель, подключившись к маршрутизатору со следующими настройками:

image

Всё. Теперь открывайте сайт с прописанного в hosts доменного имени и зовите кого-нибудь посмотреть.

image

Поднятый нами туннель — довольно редкая разновидность туннеля по расширенной схеме, которая отписана в этой статье. В 99% случаев Source address является адресом локальной петли и не указывается явно, поэтому под него даже не выделено место в настройках туннеля в Putty. Но в данном случае он отличается от localhost, поэтому приходится впихивать его вместе с Source port.

Должен предупредить, что фокус пройдёт только для таких сайтов, для которых не настроена переадресация с IP в доменное имя, что как раз и бывает на серверах типа XAMPP.

Таким образом, результат достигается без VPN и манипуляций с DNS-серверами — просто ловкость рук и никакого мошенничества.

Postscriptum

Господа,
С момента опубликования этой статьи я отметил крайне негативное отношение к ней со стороны профессионалов.
Я прошу с пониманием отнестись к тому, что аудитория читателей хабра существенно шире, чем сообщество хабражителей.
И далеко не всем из читателей приходилось решать подобные задачи или делать это регулярно.
Поэтому, вы уж, пожалуйста, не лютуйте.
Поделиться с друзьями
-->

Комментарии (18)


  1. ilyaplot
    02.12.2016 14:18
    +1

    Полезнее было придумать для студии что-то более подходящее, чем xampp вместо «розыгрыша».


    1. olegbolden
      03.12.2016 13:17
      -1

      Я не сомневаюсь, что здесь собрались серьёзные люди. И серьёзные проекты у меня тоже есть. Например, «Виртуальные классы» (viclass.ru), описание которого Хабр отклонил под предлогом того, что это реклама.
      А этот пост из категории «Айтишники шутят» без претензии на серьёзность.
      Только суровые админы почему-то считают этот юмор чёрным.


  1. xomiakba
    02.12.2016 16:43
    +4

    Немного не догнал, а что мешает поднять туннель до офиса и прописать в hosts:

    IP-веб_сервера_в_офисе kremlin.ru

    ??


    1. olegbolden
      02.12.2016 18:17
      -1

      Я тоже не совсем понимаю, что вы имеете в виду.
      Вы, очевидно, попадёте на сайт президента, которому я грешным делом, обеспечил сегодня повышенную популярность :)


      1. alexkuzko
        02.12.2016 19:30
        +1

        Вы шутите? :)
        Если цель это открыть ваш сайт на любом домене, то именно так можно и поступить, имея доступ во внутреннюю сеть. Если внутренняя сеть имеет публичный айпи — еще проще…


        1. olegbolden
          02.12.2016 19:42

          Нет, я совршенно серьёзно.
          Вот вы сидите в кафе и открываете в браузере kremlin.ru/бла-бла-бла
          И что происходит дальше?


          1. 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 и т.п…


            1. 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, который мне лично не кажется банальным. И, честно говоря, я очень озадачен тем, что меня опустили ниже плинтуса.


              1. scarab
                03.12.2016 13:37
                +2

                Не кажется банальным этот фокус исключительно Вам. Большинству посетителей хабра, сфера интересов которых лежит в этой области, такой «фокус» может показаться небанальным только из-за того, что подобная глупость просто никому не придёт в голову.
                Ну вот не вижу я ничего смешного, чтобы открыть свой сайт якобы на постороннем домене. И, похоже, не только я.

                Что же касается нюансов технической реализации — то тут есть миллион вариантов, из которых Ваш отнюдь не самый изящный.
                Навскидку:
                — прописать в hosts алиасы на 127.0.0.1 и поднять веб-сервер на своём ноутбуке. Я не знаю, почему у Вас «винда подобные сопоставления игнорирует», у меня прекрасно работает и я этой схемой неоднократно пользовался, когда приходилось подпиливать чужие сайты с hard-coded ссылками.

                — если всё же не получается на локалхосте — поднимите второй адрес на обычном сетевом интерфейсе и сошлитесь на него. Это умеет даже винда, только надо нажать кнопочку «advanced».

                — поднять на своём ноутбуке любую систему виртуализации, линукс с вебсервером в виртуалке, алиас в hosts и поехали. Это может показаться немного замороченным, но я знаю огромное количество веб-разработчиков, которые эту связку держат в качестве рабочей: это позволяет работать хоть в самолёте, смотреть разрабатываемый сайт с винды в любом нужном браузере, при этом не заморачиваясь разворачиванием на ней веб-сервера (да и не всегда конфигурацию того же nginx можно смоделировать под вендозе).

                Ну и ещё миллион способов, включая локальный DNS-сервер и так далее. Вариантов масса, вопрос только в одном: Вы точно уверены, что это — смешно?


                1. olegbolden
                  03.12.2016 15:46
                  -1

                  Начнём с того, что если Вам эта заметка кажется банальной, то она просто не для Вас.
                  В вашем комментарии ключевая фраза «Ну вот не вижу я ничего смешного».
                  Возможно другие думают иначе и это статья для них.

                  Что касается изящества, то вопрос о том, что проще — «поднять вебсервер», «поднять систему виртуализации» или запустить PuTTY, тем более, если это не ваш личный компьютер, является риторическим.

                  Интерфейс в альтернативной конфигурации будет работать только в том случае, если не работает основной по DHCP. Как вы будете использовать этот альтернативный интерфейс, когда работает основной, я не знаю.

                  Неработоспособность сопоставления локальных адресов доменным именам — это проблема, в которой мне было лень разбираться. Я просто понял, что это ненадёжно и предложил вариант с дополнительным интерфейсом, который работоспособен на 100%.

                  А вообще мне просто становится смешно — здесь на хабре я чувствую себя провинившимся мальчишкой в кабинете директора школы, которому педсовет строго выговаривает:
                  — Как ты мог сморозить такую глупость в уважаемом обществе?! И даже если решил сморозить, то почему выбрал именно этот вариант из миллиона других?!

                  И я отвечу — я имею право на подобные глупости, ибо если бы они были таковыми, то их бы не публиковали на хабре. И из миллиона я решил осветить именно МОЙ вариант, не претендуя на то, что другие невозможны.


                  1. alff31
                    03.12.2016 16:37
                    +1

                    Так hosts приоритетней, чем DNS. Изменить его и все.

                    В винде правите C:\Windows\System32\drivers\etc\hosts.
                    В линуксах /etc/hosts

                    Постоянно пользуюсь в разработке чтобы что-либо проверить перед деплоем на продакшен.


                    1. Ambroyz
                      03.12.2016 23:04
                      +1

                      Я думаю, что проблема использования hosts во всей этой истории в том, что виндовая функция DnsQuery, в которую приходят все способы резолва имени (кроме самописной реализации на сокетах), имеет флаг DNS_QUERY_NO_HOSTS_FILE — который поддерживается еще с XP и запрещает резолвить из hosts. Довольно много программ использует его если не постоянно, то при недоверии к ответу.


  1. symbix
    03.12.2016 17:17

    А такая специализация в профиле у вас появилась после того, как проделали эту шутку? ;)


    1. olegbolden
      03.12.2016 21:37

      Да нет, это, увы, безрадостные реалии жизни…
      Убираю.


  1. scronheim
    05.12.2016 10:40

    интересная у Вас директория с заббиксом в адресной строке


    1. olegbolden
      05.12.2016 23:55

      Заббикс выгядит так же, как и обычный сайт.
      Просто под руками оказался на момент написания статьи.


      1. scronheim
        06.12.2016 07:48

        я про kremlin.ru/zabbyx/


  1. w4r_dr1v3r
    11.12.2016 00:01

    Тот редкий случай, когда можно воочию наблюдать легендарный, возведённый в абсолют в огромном количестве баек о хабраюзерах снобизм. Не понимаю, зачем вы накинулись на парнишку-то? Ну он пошутил, да. Ну вам не смешно, да. Ну вы накидали более годных с вашей точки зрения решений. Но минусовать его за свободомыслие — это уже некоторый симптом.

    PS: лично мне как не специалисту было полезно и познавательно прочесть и сам пост автора, и технический разбор неточностей предложенной им реализацией в комментариях местных старожилов. Спасибо, Хабр.