ssh na serwerze, który jest podłączony do usługi VPN

22

Mam wirtualny prywatny serwer, który chciałbym uruchomić serwer WWW, gdy mój serwer jest podłączony do usługi VPN

Kiedy połączenie VPN z moim dostawcą nie działa, mogę zrobić wszystko, co chcę z tym serwerem, ssh, scp, http itp.

Po uruchomieniu openvpn i połączeniu z usługą VPN dostawcy, serwer nie jest dostępny w żaden sposób i oczywiście z ważnego powodu

Zdjęcie wygląda mniej więcej tak:

           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

Rzeczy do wyjaśnienia:

  • Wszystkie adresy IP i numery portów powyżej i poniżej są fikcyjne
  • Linie o numerach portów xx, yy i cokolwiek pomiędzy to moje założenie, a nie coś, co wiem na pewno.
  • Skonfigurowałem zadanie crona, które uruchamia się co minutę, wysyłając ping innego VPSa, uruchamiając apache2. W dziennikach apache2 widzę, że początkowy adres IP zmienia się z 50.1.2.3 na 175.41.42.43, kiedy VPN jest aktywny, więc VPN działa dobrze

Dzienniki OpenVPN pokazują te:

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

W tym momencie chciałbym móc ssh od myhomedo My VPSna zdjęciu, gdy VPN jest włączony i używa PuTTY.

W przeszłości, w jednym z moich miejsc pracy, otrzymałem bardzo dziwną sekwencję ssh na jednym bardzo bezpiecznym serwerze, który miał trzy @znaki w ciągu. Tak więc, jak sobie wyobrażam, przeskakiwał z pudełka na pudło, ale ponieważ w tych skrzynkach działała jakaś wersja systemu operacyjnego Windows i zastrzeżona aplikacja, nie widziałem, co się dzieje pod tymi opakowaniami. Nie zwracałem więc zbytniej uwagi. Teraz zaczynam rozumieć, że mogę być w takiej samej lub podobnej sytuacji.

Czy na podstawie adresów IP i portów na diagramie i / lub we fragmencie dziennika ktoś może mi powiedzieć, w jaki sposób mogę przejść przez ten tunel i uzyskać dostęp do mojego serwera?

Scott
źródło

Odpowiedzi:

10

Zostajesz zablokowany na VPS, ponieważ po uruchomieniu usługi VPN twoje pakiety ssh są kierowane przez VPN, a nie publiczny adres IP twojego VPS 50.2.1.3.

Załóżmy, że twój serwer:

  • Publiczny adres IP to 50.1.2.3 (zgodnie z przykładową konfiguracją)
  • Publiczna podsieć IP to 50.1.2.0/24
  • Domyślna brama to xxx1
  • eth0 to urządzenie do bramy

Wykonaj następujące czynności, używając 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

Następnie uruchom konfigurację klienta OpenVPN: openvpn --config youropenvpn-configfile.ovpn &

Będziesz wtedy mógł ssh na swoim serwerze, gdy serwer jest podłączony do usługi VPN.

Konieczne będzie dodanie odpowiednich filtrów iptable, aby ograniczyć dostęp do publicznego adresu IP z sesji innych niż ssh: 22.

hcb
źródło
To działało pięknie.
Anthony Giorgio,
3
Dla mnie też zadziałało. Mimo to mam problem ze zrozumieniem, co to dokładnie robi; czy mógłbyś wyjaśnić, jakiego rodzaju połączenia to umożliwia / zabrania?
The Coding Monk
Tak, chciałbym jeszcze trochę wyjaśnienia. „Wykonaj następujące czynności przy użyciu iproute2” nie wyjaśnia wprost, co to jest iproute2 lub na jakim komputerze wykonać tę akcję.
deanresin
Jak mogę uzyskać moją publiczną podsieć IP? Od jakiegoś czasu szukam w Internecie i nie mogę go znaleźć. Co to właściwie jest?
Tony Friz
2

To może być trochę za późno, ale ...

Problem polega na tym, że brama domyślna zostaje zmieniona przez OpenVPN, i to przerywa twoje obecne połączenie SSH, chyba że skonfigurujesz odpowiednie trasy przed uruchomieniem OpenVPN.

To, co następuje, działa dla mnie. Wykorzystuje iptables i ip (iproute2). Poniżej zakłada się, że domyślnym interfejsem bramy przed uruchomieniem OpenVPN jest „eth0”. Chodzi o to, aby podczas nawiązywania połączenia z eth0, nawet jeśli eth0 nie był już domyślnym interfejsem bramy, pakiety odpowiedzi dla połączenia ponownie wracały do ​​eth0.

Możesz użyć tego samego numeru dla znaku połączenia, znaku zapory i tablicy routingu. Użyłem różnych liczb, aby różnice między nimi były bardziej widoczne.

# 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

===

AKTUALIZACJA:

Powyższe działa dobrze dla mnie w Debian Jessie. Ale w starszym systemie Wheezy właśnie odkryłem, że muszę dodać „via” do wpisu tablicy routingu:

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

Tam „12.345.67.89” musi być oryginalną bramą inną niż VPN.

nieznany z nazwiska
źródło
Czy powinno to również działać z ExpressVPN? Mają instalator, który jest wyposażony w narzędzie wiersza polecenia „expressvpn” i można wywołać „połączyć” lub „rozłączyć”. Próbowałem tego, co napisałeś, i nie zadziałało. Czy to musi być OpenVPN?
Tony Friz
po prostu nie mogę tego uruchomić ... doprowadzając mnie do szału. Powyższa odpowiedź autorstwa @hcb działa. Ale jestem naprawdę ciekawy, dlaczego twoja odpowiedź nie działa dla mnie! Coś brakuje, co, jak zakładam, powoduje, że reguły MANGLE nie są wykonywane
Motsel