ssh in un server collegato a un servizio VPN


22

Ho un server privato virtuale, che vorrei eseguire un server Web mentre il mio server è connesso a un servizio VPN

Quando la connessione VPN al mio provider non è attiva, posso fare tutto ciò che voglio con questo server, ssh, scp, http ecc.

Una volta che openvpn è in esecuzione e connesso al servizio VPN del provider, il server non è accessibile in alcun modo e ovviamente per una buona ragione

L'immagine è qualcosa del genere:

           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

Cose da chiarire:

  • Tutti gli indirizzi IP e i numeri di porta sopra e sotto sono fittizi
  • Le righe con i numeri di porta xx, yy e qualsiasi altra via di mezzo sono il mio presupposto, non qualcosa che conosco per certo.
  • Ho impostato un processo cron che esegue ogni minuto il ping di un altro mio VPS, eseguendo apache2 Nei registri apache2, posso vedere l'indirizzo IP di origine cambiare da 50.1.2.3 a 175.41.42.43, quando la VPN è attiva, quindi VPN funziona bene

I registri OpenVPN mostrano questi:

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

A questo punto, vorrei essere in grado di ssh da myhomea My VPSnella foto, mentre la VPN è attiva e utilizza PuTTY.

In passato, in uno dei miei posti di lavoro, mi è stata data una sequenza molto strana per accedere a un server estremamente sicuro che aveva tre @segni nella stringa. Quindi, stavo saltando da una scatola all'altra come immagino, ma dato che le jump box stavano eseguendo una versione del sistema operativo Windows e un'app proprietaria su quelle, non avevo alcuna visibilità per vedere cosa stava succedendo sotto gli involucri. Quindi non ho prestato molta attenzione. Ora sto cominciando a rendermi conto, potrei essere nella stessa o simile situazione.

Utilizzando gli indirizzi IP e le porte nel diagramma e / o lo snippet di registro, qualcuno può dirmi come posso attraversare questo tunnel e accedere al mio server?

Risposte:


10

Vieni bloccato fuori dal tuo VPS perché una volta che il servizio VPN è attivo, i tuoi pacchetti ssh vengono instradati tramite la VPN non IP pubblico 50.2.1.3 del tuo VPS.

Supponiamo che il tuo server:

  • L'IP pubblico è 50.1.2.3 (secondo l'impostazione di esempio)
  • La sottorete IP pubblica è 50.1.2.0/24
  • Il gateway predefinito è xxx1
  • eth0 è il dispositivo da gateway

Effettuare quanto segue utilizzando 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

Quindi eseguire la configurazione del client OpenVPN: openvpn --config youropenvpn-configfile.ovpn &

Sarai quindi in grado di accedere al tuo server mentre il tuo server è connesso al servizio VPN.

Dovresti aggiungere i filtri iptable appropriati per limitare l'accesso al tuo IP pubblico da sessioni non ssh: 22.


Questo ha funzionato magnificamente.
Anthony Giorgio,

3
Ha funzionato anche per me. Tuttavia, ho difficoltà a capire cosa fa esattamente; ti dispiacerebbe spiegare che tipo di connessioni questo consente / non consente?
The Coding Monk,

Sì, vorrei anche qualche spiegazione in più. "Esegui quanto segue usando iproute2" non spiega esplicitamente cos'è iproute2 o su quale macchina eseguire questa azione.
Deanresin,

Come posso ottenere la mia sottorete IP pubblica? Sto cercando nel web da un po 'e non riesco a trovarlo. Che cosa è esattamente?
Tony Friz,

2

Potrebbe essere un po 'tardi, ma ...

Il problema è che il gateway predefinito viene modificato da OpenVPN e che interrompe la connessione SSH corrente a meno che non si impostino le route appropriate prima di avviare OpenVPN.

Quello che segue funziona per me. Utilizza iptables e ip (iproute2). Di seguito, si presume che l'interfaccia gateway predefinita prima dell'avvio di OpenVPN sia "eth0". L'idea è di garantire che quando viene stabilita una connessione a eth0, anche se eth0 non è più l'interfaccia gateway predefinita, i pacchetti di risposta per la connessione ritornano nuovamente su eth0.

È possibile utilizzare lo stesso numero per il segno di connessione, il segno del firewall e la tabella di routing. Ho usato numeri distinti per rendere più evidenti le differenze tra loro.

# 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

===

AGGIORNARE:

Quanto sopra funziona bene per me su Debian Jessie. Ma su un vecchio sistema Wheezy ho appena scoperto che devo aggiungere "via" alla voce della tabella di routing:

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

Lì "12.345.67.89" deve essere il gateway non VPN originale.


Questo dovrebbe funzionare anche con ExpressVPN? Hanno un programma di installazione che viene fornito con uno strumento da riga di comando "expressvpn" e puoi chiamare "connect" o "disconnect. Ho provato quello che hai pubblicato e non ha funzionato. Deve essere OpenVPN?
Tony Friz

non riesco proprio a farlo funzionare ... facendomi impazzire. La risposta sopra di @hcb funziona. Ma sono davvero curioso di sapere perché la tua risposta non funziona per me! Manca qualcosa, che presumo stia causando la mancata esecuzione delle regole
MANGLE
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.