Русский English Тэги View Sergey Zolotaryov's profile on LinkedIn Вход
VPN для бедных
Постоянная ссылка 11-10-2016 anydoby java linux

У нас на работе всё закрыто. Кроме SSH. А поработать из дому иногда хочется. Как же быть с svn, внутренними виртуалками, джирой и пр?

Во всём мире используют для этого VPN, но только не у нас. Компания предлагает зайти на некую страницу, скачать оттуда какую-то штуку под названием Juniper и ходить на локальной машине по адресу 127.1.0.* (заменить на свой фейковый айпи) и на порт, который при каждом логине разный. Это на линукс. На виндовсе всё ещё интереснее. После соединения с таким вот VPN мы можем ходить на внутренние адреса при помощи putty, или x2goclient. Не густо.

Организовать что-то более удобное оказалось просто. Но пришлось покопаться. Если домашний комп не всегда включен, а канал хочется держать открытым всегда, можно купить (как я и сделал) Raspberry PI3 (на ней крутится вот этот самый сайт сейчас) и 22-й порт домашнего рутера переправить на эту машинку. Предупреждаю сразу, полезет на этот порт куча всяких подонков - сразу отключаем авторизацию по паролю, чтобы не давили ненужным трафиком, а ещё лучше воспользоваться iptables фильтрами.

Узнаём свой внешний IP адрес.

На рабочей машине (т.е. в офисе которая) устанавливаем autossh и, например, в /etc/rc.local (для убунты) пишем вот такое:


nohup autossh -f -R 0.0.0.0:55555:localhost:22 mylogin@myraspberryip -N

Эта штука будет при старте рабочей машины запускать ssh и следить за ёё здоровьем, перезапуская, когда нужно, чтобы тоннель не закрывался. Перед тем как запускать эту штуку, нужно добавить ключи офисной машины в ключи машины дома:


sudo -i
ssh-keygen // если ключей у рута ещё нету
ssh-copy-id mylogin@myraspberryip
nohup /etc/rc.local // если в этом файле лежит что-то ещё, можно запустить autossh отдельно

Теперь autossh запустит ssh и та соединится без паролей. Можно попробовать с домашнего Raspberry соединиться на работу:


ssh -p55555 myworklogin@localhost

Если мы хотим с других домашних машин ходить на работу через постоянно открытый туннель на Raspberry, там надо в /etc/ssh/sshd_config добавить такое:


AllowTcpForwarding yes
GatewayPorts yes

Это позволит локальные туннели использовать другим машинам сети. И наконец последний штрих. Почти. Соединяемся с офисом через Raspberry, сидя за другой машиной домашней сети:


ssh -p55555 myworklogin@myraspberry_internal_ip

Подсмотреть IP Raspberry машины можно на ней самой (ifconfig), либо в панели управления домашним рутером.

Но это ещё не всё. Я же хотел прозрачного доступа к рабочей сети, а не только к рабочей машине. Устанавливаем sshuttle:


sudo apt install sshuttle
sshuttle --dns -r myworklogin@myraspberry_internal_ip:55555 0/0

Эта команда запускает сервис, который перехватывает все TCP запросы с нашей домашней машины (включая DNS), переправляет их на другую сторону - т.е. на офисную машину и там выполняет. Скромно и без лишних усилий. Огромное спасибо автору sshuttle, без этой штуки жизнь была бы серее. Для более тонких настроек маршрутизации пакетов (например, чтобы перехватывались только пакеты к офисной сети) можно покурить мануалу от этого шаттла.

Да. из самых широкоиспользуемых дополнительных опций я использую исключения: -x 192.168.0.0/16, например, чтобы на локальные виртуалки ходить не через Нью Йорк.

Добавить комментарий

Предыдущая статья 100 причин любить MSSQL (причина 1-я) Следующая статья Конфигурация SSL в Camel - централизовано