Как сохранить SSH у VPS при включенном VPN
Не получается получить доступ к vps при вклеченном на нем openvpn клиенте. Собственно, задача, чтобы vps был частью частной сети VPN и я мог к нему подключиться удаленно через ssh по его публичному адресу.
Как я настраивал окружение:
Создал vps и настроил на нем OpenVPN сервер.
Доступ:
[email protected]
b7pcJ*NRNnGS
Есть удаленный сервер, который я хочу подключить, как клиента Open VPN сети. Доступ:
[email protected]
b7pcJ*NRNnGS
Вот так я поднял openVPN сервер (использовал скрипт):
wget https://git.io/vpn -O openvpn-install.sh
sudo chmod +x openvpn-install.sh
sudo bash openvpn-install.sh
А вот код для поднятия клиента:
sudo apt install apt-transport-https
sudo wget https://swupdate.openvpn.net/repos/openvpn-repo-pkg-key.pub
sudo apt-key add openvpn-repo-pkg-key.pub
sudo wget -O /etc/apt/sources.list.d/openvpn3.list
sudo wget -O /etc/apt/sources.list.d/openvpn3.list https://swupdate.openvpn.net/community/openvpn3/repos/openvpn3-jammy.list
sudo apt update
sudo apt install openvpn3
openvpn3 session-start --config client1.ovpn
(Сертификаты можете взять по пути ~/certs)
Далее на сервере запущен openVPN:
systemctl start openvpn@server
Подключение проверил - все работает https://i.stack.imgur.com/uV29h.png
На клиенте при подключении к серверу я сразу теряю ssh. Задача, чтобы vps был в той же сети VPN, но я мог к нему подключиться по его публичному ip по ssh.
Ответы (1 шт):
Короткий ответ
После подключения VPN весь трафик перенаправляется в виртуальный интерфейс, поэтому соединение разрывается. Нужно прописать фиксированное правило маршрутизации, которое сохранит маршрут между вашим рабочим компьютером и VPS.
Развёрнутый ответ
Я буду демонстрировать на примере моего VPS сервера 146.71.77.201.
Для того, чтобы соединение с сервером-клиентом 45.141.79.89 (в моём случае 146.71.77.201) не разрывалось, нужно настроить на сервере-клиенте маршрут к вашему рабочему компьютеру
ip route list match 0.0.0.0/1напечатает информацию о дефолтной маршрутизации. У меня этоdefault via 146.71.77.1 dev eth0 onlink- гейтвей146.71.77.1, сетевая картаeth0Теперь узнаем, с какого адреса вы подключились. Это можно сделать несколькими способами, я воспользовался
netstat:netstat -npt | grep :22 tcp 0 36 146.71.77.201:22 118.128.28.53:64597 ESTABLISHED 3277529/sshd: root@Вывод команды означает, что к порту SSHD моего VPS сервера есть подключение с адреса
118.128.28.53(это внешний адрес нашего офисного роутера)Теперь добавим фиксированный маршрут до офисного роутера
ip route add 118.128.28.53 via 146.71.77.1(напомню, что 146.71.77.1 - это адрес дефолного гейтвея в локальной сети провайдера). То есть все пакеты в адрес моего офисного роутера пойдут напрямую через
eth0в обход VPN.Проверяем:
openvpn start-session --config tmp/test.ovpnSSH подключение к серверу-клиенту на месте ;)
ip route- смотрим таблицу маршрутизации после подключения VPN:0.0.0.0/1 via 10.8.0.1 dev tun0 default via 146.71.77.1 dev eth0 onlink 10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.1 10.8.0.0/16 dev tun1 proto kernel scope link src 10.8.0.5 118.128.28.53 via 146.71.77.1 dev eth0 128.0.0.0/1 via 10.8.0.1 dev tun0 146.71.77.0/24 dev eth0 proto kernel scope link src 146.71.77.201 185.159.130.117 via 146.71.77.1 dev eth0Что видим:
0.0.0.0/1 via 10.8.0.1 dev tun0Весь трафик по умолчанию идёт через виртуальный интерфейсtun0185.159.130.117 via 146.71.77.1 dev eth0Трафик к VPN серверу185.159.130.117идёт через локальную сеть провайдера в обходtun0(это логично, иначе трафик бы зациклился :) )118.128.28.53 via 146.71.77.1 dev eth0Трафик к моему офисному компьютеру идёт через локальную сеть провайдера в обходtun0. Благодаря этой строке сохранилось ssh подключение к клиентской машине.
Доказательство - ssh сессия, в которой была запущена сессия VPN, активна после запуска VPN
