SSH на сервер, который подключен к службе VPN


22

У меня есть виртуальный частный сервер, на котором я хотел бы запустить веб-сервер, когда мой сервер подключен к службе VPN

Когда VPN-соединение с моим провайдером не установлено, я могу делать все, что захочу, с этим сервером, ssh, scp, http и т. Д.

Когда openvpn запущен и подключен к VPN-сервису провайдера, сервер недоступен никакими средствами и, конечно, по уважительной причине.

Картинка примерно такая:

           My VPS                             ------------
         +----------------+                  /            \
         |                |                 /   Internet  /       101.11.12.13
         |        50.1.2.3|-----------------\   cloud    /----<--- me@myhome
         |                |                  /           \
         |     10.80.70.60|                 /             \
         +----------------+                 \              \
                        :                    \_____________/
                        :                           :
                        :                           :
                        :                           :
                        :                           :
                  +------------------+              :
                  |     10.80.70.61  |              :
                  |               \  |              :
                  |                \ |              :
                  | 175.41.42.43:1197|..............:
                  |   175.41.42.43:yy|   
                  |       .....      |
                  |   175.41.42.43:xx|
                  +------------------+



Legend                  
------ Line No VPN connection present
...... Line VPN connection established

Вещи, чтобы уточнить:

  • Все IP-адреса и номера портов выше и ниже являются вымышленными
  • Строки с номерами портов xx, yy и любым другим между ними - мое предположение, а не то, что я точно знаю.
  • Я настроил задание cron, которое запускается каждую минуту, проверяет пинг другого моего VPS, на котором работает apache2. В журналах apache2 я вижу изменение исходного IP-адреса с 50.1.2.3 на 175.41.42.43, когда VPN активен, поэтому VPN работает нормально.

Журналы OpenVPN показывают это:

UDPv4 link remote: [AF_INET]175.41.42.43:1197
[ProviderName] Peer Connection Initiated with [AF_INET]175.41.42.43:1197
TUN/TAP device tun0 opened
do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
sbin/ip link set dev tun0 up mtu 1500
/sbin/ip addr add dev tun0 local 10.80.70.60 peer 10.80.70.61

На данный момент, я хотел бы иметь возможность SSH от myhomeк My VPSв картине, в то время как VPN вверх и с помощью PuTTY.

Раньше на одном из моих рабочих мест мне давали очень странную последовательность ssh на один чрезвычайно безопасный сервер с тремя @знаками в строке. Итак, он прыгал с коробки на коробку, как я себе представляю, но, поскольку на коробках перехода работала некая версия ОС Windows и проприетарное приложение для них, я не мог видеть, что происходит под покровом. Поэтому я не обращал особого внимания. Теперь я начинаю понимать, что могу оказаться в такой же или похожей ситуации.

Используя IP-адреса и порты в схеме и / или фрагменте журнала, может кто-нибудь сказать мне, как я могу пройти через этот туннель и получить доступ к своему серверу?

Ответы:


10

Вы заблокированы вашим VPS, потому что, как только VPN-сервис активирован, ваши ssh-пакеты маршрутизируются через VPN, а не публичный IP-адрес вашего VPS 50.2.1.3.

Предположим, что ваш сервер:

  • Публичный IP-адрес - 50.1.2.3 (согласно настройке вашего примера)
  • Общедоступная IP-подсеть 50.1.2.0/24
  • Шлюз по умолчанию - xxx1
  • eth0 - устройство к шлюзу

Выполните следующее с помощью iproute2:

ip rule add table 128 from 50.1.2.3
ip route add table 128 to 50.1.2.0/24 dev eth0
ip route add table 128 default via x.x.x.1

Затем запустите конфигурацию клиента OpenVPN: openvpn --config youropenvpn-configfile.ovpn &

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

Вам нужно будет добавить соответствующие фильтры iptable, чтобы ограничить доступ к общедоступному IP-адресу из сеансов не ssh: 22.


Это работало прекрасно.
Энтони Джорджио

3
Это сработало и для меня. Тем не менее, мне трудно понять, что именно это делает; Не могли бы вы объяснить, какие соединения это разрешает / запрещает?
Кодирующий монах

Да, я хотел бы получить еще несколько объяснений. «Выполните следующие действия, используя iproute2», явно не объясняется, что такое iproute2 или на каком компьютере выполнять это действие.
Деканрезин

Как получить общедоступную IP-подсеть? Я долго искал в интернете и не могу его найти. Что именно?
Тони Фриз

2

Это может быть немного поздно, но ...

Проблема в том, что шлюз по умолчанию изменяется OpenVPN, и это нарушает ваше текущее соединение SSH, если вы не настроили соответствующие маршруты перед запуском OpenVPN.

То, что следует, работает для меня. Он использует iptables и ip (iproute2). Ниже предполагается, что интерфейсом шлюза по умолчанию перед запуском OpenVPN является «eth0». Идея состоит в том, чтобы при установлении соединения с eth0, даже если eth0 больше не является интерфейсом шлюза по умолчанию, ответные пакеты для соединения снова возвращаются на eth0.

Вы можете использовать один и тот же номер для метки соединения, метки межсетевого экрана и таблицы маршрутизации. Я использовал разные числа, чтобы сделать различия между ними более очевидными.

# set "connection" mark of connection from eth0 when first packet of connection arrives
sudo iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234

# set "firewall" mark for response packets in connection with our connection mark
sudo iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321

# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 table 3412

# route packets with our firewall mark using our routing table
sudo ip rule add fwmark 4321 table 3412

===

ОБНОВИТЬ:

Вышесказанное прекрасно работает для меня в Debian Jessie. Но в более старой системе Wheezy я только что обнаружил, что мне нужно добавить «через» к записи таблицы маршрутизации:

# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 via 12.345.67.89 table 3412

Там "12.345.67.89" должен быть оригинальный шлюз не VPN.


Должно ли это также работать с ExpressVPN? У них есть инсталлятор , который поставляется с командной строкой инструмента «expressvpn» , и вы можете назвать «соединять» или «отключиться я попробовал то , что вы опубликовали , и это не работа ли это должно быть OpenVPN..?
Тони Фриз

я просто не могу заставить это работать ... сводит меня с ума. Ответ выше @hcb действительно работает. Но мне действительно любопытно, почему ваш ответ не работает для меня! Чего-то не хватает, что, как я полагаю, приводит к тому, что правила MANGLE не выполняются
Моцель
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.