Einen eigenen OpenVPN-Server auf einem vServer betreiben
Vor kurzem habe ich mir einen vServer bestellt, um damit ein bisschen herum zu spielen. Als Betriebssystem nutze ich centOS 7. Das läuft schnell und stabil.
Danach habe ich mit Hilfe des Skripts openvpn-install von angristan einen OpenVPN-Server installiert.
Das geht ganz einfach:
- Per SSH auf den vServer einloggen (ich gehe davon aus, dass ihr euch nicht mit root sondern einem eigenen Benutzeraccount anmeldet…)
- Das Skript mit folgendem Befehl herunterladen:
sudo curl -o /root/openvpn-install.sh https://raw.githubusercontent.com/Angristan/openvpn-install/master/openvpn-install.sh
- Nun mit folgendem Befehl ausführbar machen:
sudo chmod +x /root/openvpn-install.sh
- Jetzt kann man das Skript starten:
/root/openvpn-install.sh
- Das Skript führt euch bequem durch die komplette Installation. Ihr beantwortet hierzu die Fragen auf dem Bildschirm. In der Regel passen die voreingestellten Optionen. Das einzige was ich abgeändert habe ist die Einstellung zum DNS-Server. Hier habe ich DNS.WATCH genommen. Am Schluss, wenn die Client-Konfiguration erzeugt wird, habe ich ausgewählt, dass diese mit einem Passwort geschützt werden soll.
Das Skript erstellt nun eine OpenVPN-Konfigurationsdatei (.ovpn) mit dem Namen, den ihr während der Installation angegeben habt. Diese Datei könnt ihr anschließend auf verschiedenen Endgeräten wie üblich nutzen.
Das war auch schon fast alles. Fast, denn unter CentOS gibt es ein Problem, dass man sich nun zwar per OVPN-Client mit dem Server verbinden kann, aber keine Internetverbindung zustande kommt bzw. diese nach einem Neustart des Servers wieder verloren geht. Hierzu muss man in der Shell noch folgende Befehle eingeben und die Verbindung klappt einwandfrei auch über Server-Neustarts hinweg:
sudo firewall-cmd –zone=trusted –add-service openvpn
sudo firewall-cmd –zone=trusted –add-service openvpn –permanent
sudo firewall-cmd –add-masquerade
sudo firewall-cmd –permanent –add-masquerade
sudo firewall-cmd –reload
Den Server nutze ich nun immer, wenn ich außerhalb meines Heimnetzes bin, z.B. im Hotel. Theoretisch kann man sich auch mehrere Server in unterschiedlichen Ländern einrichten, wenn man mal eine andere IP-Adresse benötigt oder ganz einfach als Ausfallsicherheit, falls ein Server mal nicht erreichbar sein sollte. Das wird dann aber schnell preislich nicht mehr so wirklich attraktiv im Gegensatz zu kommerziellen VPN-Diensten, die hunderte von Servern in verschiedenen Ländern zum Preis von ein paar Euro pro Monat anbieten.
Zumindest weiß man aber bei einem eigenen Server, was darauf noch so alles läuft und was nicht.
Wie immer gilt, wenn ihr Fragen oder Anregungen (ich lerne gerne dazu) habt, schreibt einen Kommentar unter diesen Beitrag.
Hallo Torsten,
ich nin Ebi und habe da ein paar Fragen zu Deinen Erfahrungen mit einem vServer:
1. ich bin Linux Anfänger und habe bisher mit Raspberry Pi 4b und RockPi „rumgespielt“, jedoch meistens ohne großen Erfolg.
2. Mein Ziel ist es mein lokales Netz von außen zu erreichen und über VPN ins Internet zu gehen.
3. Mit CGN meines Providers und ohne statische IP ist das jedoch nicht von Erfog gekrönt.
4. Welchen Anbieter kannst Du denn empfehlen und besser root- oder vServer?
5. Welche Konfiguration ist denn ausreichend für mein Vorhaben?
6. Ist denn das openvpn script so umfassend und „idiotensichwer“, dass VPN dann auch sicher funktioniert (Zertifikat, Sicherheit etc.)? Meine Versuche auf dem Raspberry Pi waren nicht erfogreich; nur PiVPN hat funktioniert, das geht aber nur im häuslichen Netz.
Wäre schön wenn Du Dich kurz äußern könntest.
Herzliche Grüße
Eberhard Stephan
Hallo Eberhard,
gerne versuche ich dir zu helfen. Ich bin mir aber nicht sicher, ob ich dich richtig verstehe.
Du willst dich von außerhalb ins Heimnetz einklinken und von dort aus (über VPN?) ins Internet? Oder willst du nur einfach von unterwegs ins Heimnetz und einen separaten VPN-Zugang zum geschützten Surfen nutzen?
Solltest du hinter einem CGN hängen, wird der Zugriff von außen auf deinen Rechner oder allgemein auf alle Server, die du von deinem Internetanschluss zu Hause betreiben willst, nicht funktionieren. Dein Provider muss dich von außen rein lassen. Bei meinem Internetanbieter kann ich das (natürlich gegen Aufpreis…) freischalten lassen. Wenn das bei deinem Provider ebenfalls möglich ist, kannst du entweder den VPN-Zugang deines Routers nutzen, sofern der das unterstützt (z.B. bei der Fritz!Box geht das) oder über ein NAS (z.B. Synology Diskstation) und du bist im Heimnetz. Wenn du dann über dein Notebook oder Smartphone aus einem öffentlichen Netz mit deinem Heimnetz verbunden bist und im Internet surfst, dann geht die Verbindung erst über dein Heimnetz und von dort wieder ins Internet (also auch über die IP deines Internetanschlusses zu Hause). Das ist dann praktisch so, als ob du von zu Hause aus ins Internet gehst. Hierbei limitiert dich aber in der Regel der Upstream deines Internetanschlusses. Wenn dein Upload zu Hause langsam ist, dann macht das Surfen entsprechend weniger Spaß.
Wenn du in öffentlichen Netzwerken geschützt das Internet nutzen möchtest, wäre ein VPN-Server, den du auf einem Root- oder vServer betreibst, sinnvoller, da das in der Regel schneller läuft. Wenn du auf dem Server nur einen VPN-Server betreiben möchtest, dann reicht ein vServer dicke aus. Ich nutze einen vServer von Hetzner, da ich damals etwas günstiges gesucht habe, um ein bisschen damit rumzuspielen. Bei mir läuft das sehr performant und ich sehe daher keinen Grund zu einem anderen Anbieter zu wechseln. Ist auch das kleinste Paket (nennt sich dort CX11) und auch noch erweiterbar. Ist aber, wie gesagt, rein für den VPN-Server, nicht nötig.
Mit dem Skript installierst du den OpenVPN Server aus den offiziellen Paketen, die dir deine Linux Distribution anbietet. Wenn du die Pakete immer über die Paketverwaltung aktualisierst, bist du auf dem aktuellen Stand der Sicherheitspatches. Das musst du halt selbst erledigen. Das Skript ist nur zum Einrichten und zur (VPN-)Nutzerverwaltung nötig. Zur Sicherheit: ich bin auch nur ein einfacher Anwender. Laut den Erläuterungen von angristan sind die Standardeinstellungen, die das Skript liefert, bezüglich der Sicherheit zu den OpenVPN Voreinstellungen optimiert. Wichtig ist aber auch, dass der Server, den du gemietet hast, auch soweit möglich gegen Angriffe aus dem Internet abgesichert ist. Das ist aber wieder ein anderes Thema.
Mit PiVPN kenne ich mich nicht aus. Aber der Mike Kuketz hat darüber schon mal was geschrieben. Ich vermute aber, dass dir das nichts bringt, da du von außen nicht ins Heimnetz kommst, wo der Raspberry Pi steht.
Ich hoffe, dass dir meine Antwort weiterhelfen konnte. Falls nicht, frage gerne noch mal nach.
Viele Grüße
Torsten
Danke Torsten für die sehr ausführliche Antwort.
Wegen des CGN Problems bleibt mir also “ nur“ der VPN Server übrig.
Inwieweit hast Du Dich denn gegen Angriffe aus dem Internet bei Deinem Server abgesichert, das itables Geschäft klingt sehr kompliziert für mich?
Schönes Wochenende
Eberhard Stephan
Bei meinem Server von Hetzner habe ich zuerst mal einen neuen Benutzer angelegt, mit dem ich dann per SSH auf den Server komme. Den SSH Zugang für den root Benutzer, der standardmäßig aktiviert ist, habe ich danach deaktiviert. Die Passwörter für die beiden Benutzer habe ich lang und komplex gewählt. Dannn habe ich Fail2ban installiert und eingerichtet. Zusätzlich habe ich auch noch eine Zwei-Faktor-Authentisierung eingerichtet.
Das verhindert mit wenig Aufwand schon mal den Großteil der Angriffe bzw. reduziert die Angriffsfläche für die, in der Regel, automatisiert ablaufenden Angriffe aus dem Internet.
Zusätzlich werde ich automatisch per Mail informiert, sobald sich jemand per SSH auf meinen Server verbunden hat. Wenn ich solch eine Meldung bekommen sollte, bin ich gewarnt und kann reagieren.
Wichtig finde ich auch, dass die installierten Pakete der Linux Distribution immer auf dem aktuellen Stand gehalten werden. Das kann man automatisieren. Ach ja, Backups sind ebenfalls wichtig 🙂
Danke Torsten für die offene Antwort.
Heute habe ich mir bei netcup einen Root Server freischalten lassen und dort Ubuntu 18.04 mit OpenVPN installiert. Das VPN läuft gut auf meinen beiden Android Geräten, lediglich Win10 macht noch Probleme, disconnect nach einiger Zeit.
Nun muss ich mich in der nächsten Zeit Schritt für Schritt einarbeiten und fange mit SSH an …
Habe mir ein 10 Punkte Programm für Linux Server heruntergeladen und werde das erstmal abarbeiten.
Vielen Dank soweit, wenn Du Lust hast können wir ja in Kontakt bleiben wenn es Deine Zeit erlaubt.
Guten Start in die neue Woche.
Gerne, wünsche dir viel Spaß mit deinem Server und ebenfalls einen guten Start.
Leider funktioniert Deine Anleitung nicht bei mir:
[root@vmd48109 ~]# curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh chmod +x openvpn-install.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
100 37952 100 37952 0 0 545k 0 –:–:– –:–:– –:–:– 553k
curl: (6) Could not resolve host: chmod
curl: (6) Could not resolve host: +x
curl: (6) Could not resolve host: openvpn-install.sh
[root@vmd48109 ~]# sudo chmod +x /root/openvpn-install.sh
[root@vmd48109 ~]#
./openvpn-install.sh
Welcome to the OpenVPN installer!
The git repository is available at: https://github.com/angristan/openvpn-install
I need to ask you a few questions before starting the setup.
You can leave the default options and just press enter if you are ok with them.
I need to know the IPv4 address of the network interface you want OpenVPN listening to.
Unless your server is behind NAT, it should be your public IPv4 address.
Checking for IPv6 connectivity…
Your host does not appear to have IPv6 connectivity.
Hier bleibt er hängen.
Hast Du eine Idee ….
Ehrlich gesagt weiß ich nicht, wieso das Skript an der Stelle hängen bleibt. Normalerweise, sollte dein Server kein IPv6 unterstüzten, dann müsste das Skript das entsprechend erkennen und entsprechend weiter verfahren. Denke ich zumindest. Ich kann das nicht nachprüfen, da bei mir das Skript einfach ohne Fehlermeldungen durchläuft.
Schreibt das Skript denn die erkannte IPv4 Adresse hin? Bleibt das Skript danach wirklich hängen oder wird es beendet?
Kleiner Hinweis: den „sudo“ Befehl brauchst du nur, wenn du nicht sowieso schon als root angemeldet bist. Das ~# zeigt an, dass du eine Root-Shell geöffnet hast (unabhängig vom Nutzernamen root).
Mittlerweile habe ich im Internet eine andere Quelle gefunden, die sich problemlos installieren ließ.
Ursache ist dass dieses lt. GitHub nicht bei Ubuntu 18.04 auf i386 funktioniert.
Ich bin jetzt bei Contabo nachdem der netcup Rechner abgestürzt bzw. nicht mehr erreichbar war. Der Support war nicht bereit mir zu helfen.
Hier bei Contabo ist vieles besser hinterlegt und mit dem Webmin auch gut administrierbar.
Auf ein Neues …
Sch6 Wochenende
Eberhard Stephan
Ah, ok. Hätte nicht gedacht, dass es heute noch x86 Rechner gibt, die man als Server vermietet. Gibt’s bei Netcup keine Verwaltung im Browser, über die man den Server ausschalten, rebooten oder neu aufsetzen kann?
Finde ich aber auch doof, dass man einem Kunden dann nicht hilft. Oder haben die sich gar nicht bei dir gemeldet?
Ebenfalls ein schönes Wochenende.
Torsten
Contabo hat moderne intel i386 Rechner.
Ja, konnte Rebooten, aber es hat sich nichts geändert.
Haben mir etwas von Notfallrecovery erzählt, aber nicht wie. Da es bei Unzufriedenheit ein Sonderkündigungsrecht gibt, habe ich das genutzt.
Geld habe ich auch schon zurück.
Die sind gar nicht an kleine Anwender interessiert.
Bei Contabo hat man meine Fragen bzgl. /dev/sda2 sofort und ohne bissigen Kommentar beantwortet.
Netcup hat mir geraten doch lieber ein Webhosting anstelle Server zu nehmen!
Soweit das Neueste