ssh in einen Server, der mit einem VPN-Dienst verbunden ist


22

Ich habe einen virtuellen privaten Server, auf dem ich einen Webserver ausführen möchte, während mein Server mit einem VPN-Dienst verbunden ist

Wenn die VPN-Verbindung zu meinem Provider nicht funktioniert, kann ich mit diesem Server, ssh, scp, http usw. alles tun, was ich will.

Sobald der openvpn läuft und mit dem VPN-Dienst des Anbieters verbunden ist, ist der Server unter keinen Umständen und natürlich aus gutem Grund zugänglich

Das Bild sieht ungefähr so ​​aus:

           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

Dinge zu klären:

  • Alle IP-Adressen und Portnummern darüber und darunter sind fiktiv
  • Die Zeilen mit den Portnummern xx, yy und irgendetwas dazwischen sind meine Annahme, nicht etwas, das ich für eine Tatsache kenne.
  • Ich habe einen Cron-Job eingerichtet, der jede Minute einen anderen VPS pingt und Apache2 ausführt. In den Apache2-Protokollen kann ich sehen, dass sich die Ursprungs-IP-Adresse von 50.1.2.3 auf 175.41.42.43 ändert, wenn VPN aktiv ist, sodass VPN einwandfrei funktioniert

OpenVPN-Protokolle zeigen Folgendes:

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

An dieser Stelle möchte ich in der Lage sein, von myhomebis My VPSin das Bild zu sshen , während das VPN aktiv ist und PuTTY verwendet.

In der Vergangenheit wurde mir an einem meiner Arbeitsplätze eine sehr seltsame Sequenz für den SSH-Vorgang auf einem äußerst sicheren Server mit drei @Zeichen in der Zeichenfolge zugewiesen. Es sprang also von Box zu Box, wie ich es mir vorstelle, aber da auf den Jump-Boxen eine Version des Windows-Betriebssystems und eine proprietäre App ausgeführt wurden, war für mich nicht ersichtlich, was unter dem Strich vor sich ging. Also habe ich nicht viel aufgepasst. Jetzt beginne ich zu begreifen, dass ich mich möglicherweise in der gleichen oder einer ähnlichen Situation befinde.

Kann mir jemand anhand der IP-Adressen und Ports im Diagramm und / oder im Protokollausschnitt sagen, wie ich diesen Tunnel durchqueren und auf meinen Server zugreifen kann?

Antworten:


10

Sie werden von Ihrem VPS gesperrt, da Ihre SSH-Pakete über das VPN weitergeleitet werden, nicht über die öffentliche IP 50.2.1.3 Ihres VPS.

Nehmen wir an, Ihr Server:

  • Öffentliche IP ist 50.1.2.3 (gemäß Ihrem Beispielsetup)
  • Das öffentliche IP-Subnetz ist 50.1.2.0/24
  • Das Standard-Gateway ist xxx1
  • eth0 ist Gerät zu Gateway

Führen Sie mit iproute2 die folgenden Schritte aus:

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

Führen Sie dann Ihre OpenVPN-Client-Konfiguration aus: openvpn --config youropenvpn-configfile.ovpn &

Sie können dann auf Ihren Server sshen, während Ihr Server mit dem VPN-Dienst verbunden ist.

Sie müssten die entsprechenden iptable-Filter hinzufügen, um den Zugriff auf Ihre öffentliche IP von Nicht-SSH: 22-Sitzungen zu beschränken.


Das hat wunderbar funktioniert.
Anthony Giorgio

3
Es hat auch bei mir funktioniert. Trotzdem habe ich Probleme zu verstehen, was dies genau bewirkt. Würde es Ihnen etwas ausmachen zu erklären, welche Art von Verbindungen dies erlaubt / verbietet?
The Coding Monk

Ja, ich hätte auch gerne mehr Erklärungen. "Führen Sie die folgenden Schritte mit iproute2 aus" erläutert nicht explizit, was iproute2 ist oder auf welchem ​​Computer diese Aktion ausgeführt werden soll.
Deanresin

Wie erhalte ich mein öffentliches IP-Subnetz? Ich habe eine Weile im Internet gesucht und kann es nicht finden. Was ist es genau?
Tony Friz

2

Das mag etwas spät sein, aber ...

Das Problem ist, dass das Standardgateway von OpenVPN geändert wird und die aktuelle SSH-Verbindung unterbrochen wird, es sei denn, Sie richten vor dem Start von OpenVPN entsprechende Routen ein.

Was folgt, funktioniert bei mir. Es benutzt iptables und ip (iproute2). Im Folgenden wird davon ausgegangen, dass die Standard-Gateway-Schnittstelle vor dem Start von OpenVPN "eth0" ist. Damit soll sichergestellt werden, dass beim Herstellen einer Verbindung zu eth0 die Antwortpakete für die Verbindung wieder auf eth0 zurückgehen, auch wenn eth0 nicht mehr die Standard-Gateway-Schnittstelle ist.

Sie können dieselbe Nummer für die Verbindungsmarke, die Firewallmarke und die Routingtabelle verwenden. Ich habe verschiedene Zahlen verwendet, um die Unterschiede zwischen ihnen deutlicher zu machen.

# 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

===

AKTUALISIEREN:

Das oben Genannte funktioniert gut für Debian Jessie. Aber auf einem älteren Wheezy-System habe ich gerade festgestellt, dass ich dem Routing-Tabelleneintrag "via" hinzufügen muss:

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

Dort muss "12.345.67.89" das ursprüngliche Nicht-VPN-Gateway sein.


Sollte dies auch mit ExpressVPN funktionieren? Sie haben ein Installationsprogramm, das mit einem Befehlszeilentool "expressvpn" geliefert wird, und Sie können "connect" oder "disconnect" anrufen. Ich habe versucht, was Sie geschrieben haben, und es hat nicht funktioniert. Muss es OpenVPN sein?
Tony Friz

Ich kann das einfach nicht zum Laufen bringen ... macht mich verrückt. Die Antwort oben von @hcb funktioniert. Aber ich bin wirklich gespannt, warum deine Antwort bei mir nicht funktioniert! Es fehlt etwas, von dem ich annehme, dass es dazu führt, dass die MANGLE-Regeln nicht ausgeführt werden
Motsel,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.