Pull to refresh

«Домашний офис», или когда не нужно ехать на работу

Reading time3 min
Views8.5K

«Домашний офис», или когда не нужно ехать на работу



Я давно мечтал об этом, и вот, наконец, оно произошло! Я могу работать дома и делать (почти) всё, что я обычно делаю в офисе. А удалось мне это благодаря тому, что я настроил Reverse SSH tunnel на своем домашнем сервере и научился управлять этим туннелем.

Продолжение…

В офисе мне приходится делать вот что:
  1. работа с ORACLE (запросы, процедуры и т.д.) — требуется соединение с серверами (порты 1521, 1527)
  2. работа с UNIX (скрипты, коприрование файлов и т.д.) — требуется соединение по telnet или по SSH
  3. офисная почта
  4. общение с коллегами
  5. просмотр Хабра и других интереных мест


Благодаря тому, что мой домашний провайдер предоставляет мне прямой IP, и благодаря любезности наших сетевых администраторов на работе, у меня есть доступ домой с рабочей машины. Я пользуюсь такой возможностью для доступа с работы к домашним ноутбукам (их у меня 3) по VNC, а также для копирования файлов на домашний сервер и обратно. Разумеется, на входе стоит роутер с NAT и прочими наворотами, что позволяет мне жить красиво разводить входящие соединения.

А вот доступа из дома на рабочую машину у меня нет. Политика безопасности компании не позволяет. VPN и прочие вещи (пока) отсутствуют. Мама, мама, что я буду делать? Ку!

Ставим задачу: обеспечить работу по пунктам (1-5) из дома. На работе — Виндовс, рабочий компьютер не выключается. Дома имеется сервер NSLU2 на основе Linux. На сервере запущен Апач, его логи доступны для чтения и анализа.

Пункты 3, 4 и 5 доступны из дома силами телефона, браузера и чат-агента. А вот 1 и 2 обычным путём — никак.

И тут на сцену выходит «сладкая парочка» — Putty со стороны рабочей машины (в дальнейшем — клиент) и sshd со стороны домашнего сервера (в дальнейшем — сервер). Обычно клиент открывает соединение с сервером по SSH и устанавливает защищенный «туннель». Инициатором соединения «туда» всегда является клиент.

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

Что мы получим, установив «обратный туннель»? А получим мы доступ по этому туннелю из домашней сети в рабочую, т.е. возможность работы со всеми серверами, которые обычно доступны только из рабочей сети. Нужно только правильно задать конфигурацию туннеля — какие порты сервера ведут на какие адреса и порты клиента. Это делается в настройках Putty при описании соединения.

Держать постоянно такой туннель не представляется возможном: разрывы связи, да и не всегда он нужен. Решение — устанавливать туннель по необходимости (попив дома кофе и решив, наконец, поработать). Да, но ведь на работе никого нет? Кто же запустит Putty, чтобы поднять соединение? Как кто? Дед Пихто конечно. Сам рабочий комп и запустит, нужно его только попросить. Но как? Рабочий компьютер должен прочитать мою мысль «хочу чтобы было установлено соединение» и исполнить её.

Осталость только научиться материализовавать свои мысли и научить рабочий комп их понимать. А дальше — всё просто.

Я решил материализовать свою мысль в обычный тектовый файл. Да, мысль должна быть простая и короткая. Ап! И тигры у ног моих сели. — В смысле, «UP» — поднять соединение. «DN» — опустить соединение. Коротко и ясно.

Сценарий работы «клиент-сервер» выглядит так:
  1. Создаем файлик (назовём его cmd-файл) с одной строкой текста (командой) и выкладываем его на домашнюю страничку, чтобы рабочий комп мог прочитать и обработать команду.
  2. Ждём, когда рабочий комп прочитает команду (наблюдая за логами Апача). Когда приходит GET запрос на загрузку cmd-файла с рабочего адреса, мы можем сказать что наша команда получена.
  3. Рабочий комп выполняет команду UP (поднимает соединение) или DN (разрывает его).
  4. После выполнения команды рабочий комп запрашивает с домашней странички cmd-файл с дополнительным параметром "?ANS". Получив GET, мы можем сказать что наша команда выполнена успешно.


Осталость автоматизировать все процессы на стороне клиента (в офисе) и на стороне сервера (дома) — и всё, можно курить бамбук работать из дома.

Скрипт для клиента состоит из фронт-энда (всегда запущен) и бэк-энда (запускается для выполнения команды), скрипт для управления со стороны сервера всего один.

Чтобы всё заработало, следует запустить фронт-энд скрипт на рабочем компьютере, и можно ехать домой. Запустив дома на сервере скрипт и указав команду UP, мы через 1-2 минуты получим подтверждение, что команда выполнена. Всё, можно начинать работать с рабочими серверами так, как если бы они были в домашней сети. Когда работа завершена, следует указать команду DN, и всё отключится.

Если соединение будет разорвано, то оно автоматически поднимется через пару минут силами рабочего компьютера. Если же соединение с виду есть, но не работает, то следует выполнить команду DN и через пару минут — команду UP.

В дальнейших планах — настройка шлюза ТФОП <-> VoIP, так чтобы и рабочий телефон был доступен дома. Ну и, как обычно, конечная цель — захват Вселенной.
Tags:
Hubs:
Total votes 24: ↑20 and ↓4+16
Comments8

Articles