Возникла необходимость организовать канал связи между двумя компьютерами из разных мест (work и home), между которыми есть интернет, но нет внешних ip и один из них (work) находится за http proxy.
3. При разрыве соединения по ssh, например, из-за сбоя с интернетом, на стороне сервера остаются открытые сокеты. Виной тому настройки ssh по умолчанию, который ожидает восстановление связи. Но аutossh со стороны клиента work будет пытается создать новое соединение при обнаружении обрыва. Сделать это не сможет из-за того, что на сервере порты заняты предыдущим подключением. Поэтому необходимо разрывать соединение ssh на сервере, чтобы освободить порты. Указываем серверу ssh разрывать соединение в случае бездействия или отсутствия клиента: в файле /etc/ssh/sshd_config устанавливаем параметры
Protocol 2
TCPKeepAlive yes
ClientAliveInterval 10
ClientAliveCountMax 2
sudo service sshd restart
HostName VDS_IP_ADDRESS
Port 443
ProxyCommand corkscrew PROXY_HOST PROXY_PORT %h %p /home/work_user/.ssh/corkscrew_proxy_auth # команда для подключения по ssh через http proxy
IdentityFile ~/.ssh/keys/vds # ключи не обязательны, но очень удобны и безопасны
ps создать пару ключей можно командой ssh-keygen -t rsa
скопировать на сервер: ssh-copy-id -i KEY vds_user@vds
3. Проверяем соединение по ssh work к vds:
ssh vds_user@vds
4. Настраиваем обратный ssh туннель
autossh -M 59001 -f -g -N -R 4321:localhost:4321 vds_user@vds -p 443
ps команду autossh можно обернуть сервисом
5. Проверяем соединение по ssh от vds к work
ssh work_user@localhost -p 4321
Таким образом получили возможность подключаться к work извне.
Host vds
User vds_user
HostName vds
Port 443
IdentityFile ~/.ssh/keys/vds
Host work
User work_user
HostName localhost
Port 4321
ProxyCommand ssh vds -W %h:%p
Подключаемся при помощи команды:
ssh work
ssh -L 1234:localhost:4321 vds_user@vds # туннель
Подключение к work опосредовано через vds:
ssh work_user@localhost -p 1234
Трафик через два туннеля пойдет к work
2. Подключиться по ssh к vds и далее еще по одному ssh к work. Можно это сделать одной командой:
ssh -t vds_user@vds ssh work_user@localhost
Имеем:
work - рабочая станция, выход в интернет через прокси (доступны порты 80 и 443)
vds - виртуальный сервер с внешним ip
home - домашняя рабочая станция, доступ в интернет посредством 4g модема без внешнего ip
Идея заключается в использовании vds в качестве промежуточного звена для связи work и home. Для этого пробрасываем обратный ssh туннеля с work на vds. Далее с home получаем доступ к work через vds.
Настройка.
vds
1. /etc/ssh/sshd_config
Port 443
sudo service sshd restart
Со стороны work открыты только 443 и 80 порты.
Со стороны work открыты только 443 и 80 порты.
2. /home/vds_user/.ssh/config
Host localhost # for work pc over tunnel
HostName localhost Port 4321 IdentityFile ~/.ssh/work # ключи не обязательны, но очень удобны и безопасны3. При разрыве соединения по ssh, например, из-за сбоя с интернетом, на стороне сервера остаются открытые сокеты. Виной тому настройки ssh по умолчанию, который ожидает восстановление связи. Но аutossh со стороны клиента work будет пытается создать новое соединение при обнаружении обрыва. Сделать это не сможет из-за того, что на сервере порты заняты предыдущим подключением. Поэтому необходимо разрывать соединение ssh на сервере, чтобы освободить порты. Указываем серверу ssh разрывать соединение в случае бездействия или отсутствия клиента: в файле /etc/ssh/sshd_config устанавливаем параметры
Protocol 2
TCPKeepAlive yes
ClientAliveInterval 10
ClientAliveCountMax 2
sudo service sshd restart
work
1. /etc/ssh/sshd_config
Port 4321
sudo service sshd restart
2. /home/work_user/.ssh/config
Host vdsHostName VDS_IP_ADDRESS
Port 443
ProxyCommand corkscrew PROXY_HOST PROXY_PORT %h %p /home/work_user/.ssh/corkscrew_proxy_auth # команда для подключения по ssh через http proxy
IdentityFile ~/.ssh/keys/vds # ключи не обязательны, но очень удобны и безопасны
ps создать пару ключей можно командой ssh-keygen -t rsa
скопировать на сервер: ssh-copy-id -i KEY vds_user@vds
3. Проверяем соединение по ssh work к vds:
ssh vds_user@vds
4. Настраиваем обратный ssh туннель
autossh -M 59001 -f -g -N -R 4321:localhost:4321 vds_user@vds -p 443
ps команду autossh можно обернуть сервисом
5. Проверяем соединение по ssh от vds к work
ssh work_user@localhost -p 4321
Таким образом получили возможность подключаться к work извне.
home
1. Добавить в ~/.ssh/config правилаHost vds
User vds_user
HostName vds
Port 443
IdentityFile ~/.ssh/keys/vds
Host work
User work_user
HostName localhost
Port 4321
ProxyCommand ssh vds -W %h:%p
Подключаемся при помощи команды:
ssh work
Подключиться из home к work можно другими способами, но, имхо, менее удобными:
1. Пробросить еще один туннель и ходить к work по сути через два туннеляssh -L 1234:localhost:4321 vds_user@vds # туннель
Подключение к work опосредовано через vds:
ssh work_user@localhost -p 1234
Трафик через два туннеля пойдет к work
2. Подключиться по ssh к vds и далее еще по одному ssh к work. Можно это сделать одной командой:
ssh -t vds_user@vds ssh work_user@localhost
Комментариев нет:
Отправить комментарий