Обходим прокси на работе

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

Итак, что мы имеем?

  • Компуктер на шиндовс 10, без прав админа.
  • Выход в интернет через корпоративный прокси, естественно, жестко ограниченный (как и те, кто это ограничение придумал)

Что нам нужно?

  • Возможность подключаться по ssh к домашним серверам.
  • Возможность заходить на веб-интерфейс своих серверов.
  • Как следствие возможность загрузки и выгрузки файлов домой (не связанных с работой, зачем нам головняки)
  • Ну и неограниченный интернет как бонус 🙂

Собственно напрашивается самый простой вариант – почему бы не принести с собой обычный 3Г-модем? Но тут нас должно остановить несколько вещей:

  • Сразу становится понятно зачем мы его приперли на работу.
  • В системе он будет видеться, в том числе, как сетевой интерфейс и это тоже палево.
  • Чтобы соединения через него могли работать, должны быть изменены настройки сети в системе, маршруты. А сие нельзя делать без прав админа.

Хорошо, но что нам тогда вообще остается, если нам недоступны сетевые настройки? Но это не тупик.

Так уж случилось, что благодаря хорошему другу у меня в распоряжении оказался nexus 5 hammerhead прошитый в ОС под названием Ubuntu Touch. Её раньше пыталась пилить Cannonical, но когда оной стало плохо, перешла сообществу. Голубая мечта иметь полноценный линукс на телефоне стала совсем близка. Этим надо пользоваться.

Единственный способ, как мы можем увязать в нашей ситуации ПК и смартфон – это кабель USB. Cобственно, в Ubuntu touch для Nexus 5 используется ядро под андроид, вернее Cyanogenmod (ныне известный как lineage OS):

phablet@ubuntu-phablet:~$ uname -r
3.4.0-cyanogenmod-g2669fa0

Это все потому что в нем болтаются проприетарные блобы, позволяющие работать всяческим устройствам под которые нету свободных драйверов, например Bluetooth или Wi-Fi.

Поэтому успешно используем ADB – Android Device Bridge, позволяющий общаться с вашим устройством посредством USB – подключения.

Но славный adb оказывается не простенькой утилитой для получения доступа к shell на телефоне или для передачи на него файлов: это реальный комбайн, легко и просто работающий (без прав админа, да!).

PS C:\%path-to-adb% > adb.exe forward tcp:6100 tcp:22

Таким нехитрым образом, мы как бы соединяем удаленный порт на устройстве (телефон) и локальный порт на системе (виндовс) поверх USB-подключения.

> netstat -a | Select-String 6100
 TCP    127.0.0.1:6100         %COMPUTERNAME%:0        LISTENING

В системе открывается порт (в данном случае 6100), подключившись на который по ssh, adb нас перебросит на 22 порт телефона. Сам телефон нас не впустит, потому что он настроен пускать только по ключу. Это можно поменять, а можно сгенерировать ключ в puttygen и добавить в known-hosts на смартфоне. Есть в мануале.

Далее следует небольшая магия: убунта тач достаточно специфический продукт, и хотя он является линуксом в гораздо большей степени нежели ведроид, от десктопной системы тоже отличается (то же ядро, например).

Точек монтирования, внимание, оказалось 85 (!) штук.

phablet@ubuntu-phablet:~$ mount | wc -l
85

Корень и еще пачка путей смонтированы в рид-онли, скорее всего для сохранения целостности вашей ОС.

Разработчики предлагают следующий вариант установки ПО в ваш телефон: если для нужной вам программы есть специальная сборка и ее можно найти в местном магазине приложений OpenStore, то она ставится в вашу основную систему и, интегрируясь в оболочку, вроде как, успешно работает. Но если появляется потребность в неадаптированной программе, то ее установку следует устанавливать в специальный chroot-контейнер, избегая неожиданного поведения вашей системы.

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

# Создаем контейнер
libertine-container-manager create -i squid -n "squid proxy"
# Ставим в него кальмара (параметр -i Containername опущен, т.к. без него будет использоваться контейнер по умолчанию, а он у нас в принципе всего один).
libertine-container-manager install-package -p squid
# Заходим в консоль контейнера 
libertine-container-manager exec -c "/bin/bash"
# И стартуем squid
root@ubuntu-phablet:/# squid

На самом деле, этим вполне себе можно ограничиться, squid запустится и будет слушать запросы на порту 3128 и проксировать их вовне, будь то wi-fi или мобильная сеть (в моем случае вообще в openvpn).

Дело осталось за малым, как-то сделать так, чтобы браузер мог достучаться до этого самого порта и отправить запрос.

Тот же adb нам помощник:

.\adb.exe forward tcp:12345 tcp:3128

Скачиваем портабельный браузер и настраиваем на нем прокси на 127.0.0.1, порт 12345.

Пользуемся.

Как бонус, с помощью ssh туннеля можно нагло подключаться по VNC к домашнему компу (опять же, у меня был настроен openvpn):

phablet@ubuntu-phablet:~$ ssh -L 5900:127.0.0.1:5900 192.168.100.11 -l user "x11vnc"

На рабочем ПК:

.\adb.exe forward tcp:5900 tcp:5900

Через TightVNC подключаемся:

Собственно, такой вот способ диссиденствовать на работе!