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

На цьому етапі я хотів би мати можливість переходити myhomeдо My VPSзображення на зображенні, поки VPN працює та використовує PuTTY.

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

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

Відповіді:


10

Ви закриваєтеся з VPS, оскільки після того, як послуга VPN працює, ваші ssh-пакети отримують маршрутизацію через VPN, а не загальнодоступну IP 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 чи на якій машині виконувати цю дію.
deanresin

Як отримати мою загальнодоступну підмережу 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", і ви можете викликати "connect" або "disconnect. Я спробував те, що ви розмістили, і це не спрацювало. Чи повинен це бути OpenVPN?
Тоні Фріз

я просто не можу змусити це працювати ... заганяючи мене. Відповідь вище від @hcb дійсно працює. Але мені дуже цікаво, чому ваша відповідь не працює для мене! Щось не вистачає, що, напевно, спричиняє невиконання правил
MANGLE
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.