it-swarm.com.de

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

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 hergestellt ist, kann ich mit diesem Server, ssh, scp, http usw. alles tun, was ich will.

Sobald der openvpn ausgeführt und mit dem VPN-Dienst des Anbieters verbunden ist, ist der Server auf keinen Fall und natürlich aus gutem Grund zugänglich

Das Bild ist ungefähr so:

           My VPS                             ------------
         +----------------+                  /            \
         |                |                 /   Internet  /       101.11.12.13
         |        50.1.2.3|-----------------\   cloud    /----<--- [email protected]
         |                |                  /           \
         |     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 oben und unten sind fiktiv
  • Die Zeilen mit den Portnummern xx, yy und irgendetwas dazwischen sind meine Annahme, nicht etwas, das ich sicher weiß.
  • Ich habe einen Cron-Job eingerichtet, der jede Minute ausgeführt wird und einen anderen VPS von mir anpingt und Apache2 ausführt. In den Apache2-Protokollen kann ich sehen, dass sich die Origin-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 myhome nach My VPS Im Bild zu ssh, während das VPN aktiv ist und PuTTY verwendet.

In der Vergangenheit wurde mir an einem meiner Arbeitsplätze eine sehr seltsame Sequenz zugewiesen, um ssh auf einen extrem sicheren Server zu übertragen, der drei @ - Zeichen in der Zeichenfolge enthält. Es sprang also von Box zu Box, wie ich mir vorstellen kann, aber da auf den Jump-Boxen eine Version des Windows-Betriebssystems und eine proprietäre App ausgeführt wurden, konnte ich nicht sehen, was unter dem Deckmantel geschah. Also habe ich nicht viel Aufmerksamkeit geschenkt. Jetzt beginne ich zu begreifen, dass ich mich in der gleichen oder einer ähnlichen Situation befinde.

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

24
Scott

Sie werden von Ihrem VPS ausgeschlossen, da Ihre SSH-Pakete nach dem Betrieb des VPN-Dienstes über das VPN und nicht über die öffentliche IP 50.2.1.3 Ihres VPS weitergeleitet werden.

Nehmen wir an, Ihr Server:

  • Öffentliche IP ist 50.1.2.3 (gemäß Ihrem Beispiel-Setup)
  • Das öffentliche IP-Subnetz ist 50.1.2.0/24
  • Das Standard-Gateway ist x.x.x.1
  • eth0 ist das Gerät zum Gateway

Gehen Sie mit iproute2 wie folgt vor:

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 ssh, 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 Sitzungen außerhalb von ssh: 22 zu beschränken.

10
hcb

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

Das Problem ist, dass das Standard-Gateway von OpenVPN geändert wird und dadurch Ihre aktuelle SSH-Verbindung unterbrochen wird, es sei denn, Sie richten vor dem Start von OpenVPN geeignete Routen ein.

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

Sie können dieselbe Nummer für die Verbindungsmarke, die Firewallmarke und die Routing-Tabelle 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 obige funktioniert gut für mich bei 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.

2
John Doe