So konfigurieren Sie einen privaten OpenVPN-Server unter FreeBSD und stellen eine Verbindung zu diesem her 10.1

Einführung

OpenVPN ist eine Open-Source-Server / Client-Anwendung für ein virtuelles privates Netzwerk (VPN), mit der Sie einem virtuellen Netzwerk (ähnlich einem LAN) sicher beitreten können.

In diesem Tutorial wird erklärt, wie Sie einen OpenVPN-Server auf einem FreeBSD 10.1-Rechner mit IPv4-NAT und Routing installieren und konfigurieren. Es enthält kurze Erklärungen zu verschiedenen Konfigurationsoptionen.

Am Ende dieses Lernprogramms wird Ihr eigener OpenVPN-Server ausgeführt, und Sie haben eine Client-Konfigurationsdatei zum Herunterladen, um eine Verbindung mit diesem Netzwerk herzustellen.

Voraussetzungen

  • Ein FreeBSD 10.1-Droplet. Die Tropfengröße hängt davon ab, wie viele Clients Sie mit dem VPN verbinden möchten. 519 MB sind für einige Kunden ausreichend

  • Root-Zugriff. sudo ist auf DigitalOcean vorinstalliert, sodass Sie nichts weiter tun müssen

Für dieses Tutorial ist Root-Zugriff erforderlich. Greifen Sie in DigitalOcean als Standardbenutzer * freebsd * auf den Server zu und greifen Sie dann auf die Shell * root * zu:

sudo tcsh

Schritt 1 - Installieren von OpenVPN

Die Installation von OpenVPN mit dem + pkg + System ist recht einfach. Führen Sie einfach diese Befehle aus, um die Paketlisten zu aktualisieren und die VPN-Software zu installieren:

pkg update
pkg install openvpn

Hierdurch sollte auch das Paket + easy-rsa + installiert werden, mit dem die SSL-Schlüsselpaare generiert werden.

Schritt 2 - Konfigurieren des OpenVPN-Servers

In diesem Tutorial stützen wir unsere Konfigurationsdatei auf das von OpenVPN bereitgestellte Beispiel. Wir erstellen einen Konfigurationsordner für OpenVPN:

mkdir /usr/local/etc/openvpn

Kopieren Sie die Beispieldatei + server.conf + in das neue Verzeichnis.

cp /usr/local/share/examples/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/server.conf

Installieren Sie + nano + oder Ihren bevorzugten Texteditor:

pkg install nano

Öffnen Sie die Konfigurationsdatei zum Bearbeiten:

nano /usr/local/etc/openvpn/server.conf

_ * Hinweis: * Dem OpenVPN-Konfigurationsdateiformat werden Kommentare mit Semikolons (+; +) oder Hashes (+ # +) vorangestellt. In diesem Beispiel werden Semikolons verwendet, um Konfigurationsoptionen zu kommentieren (zu deaktivieren), und Hashes werden für Kommentare verwendet. _

Wenn Sie wissen, welche Konfigurationsoptionen Sie ändern möchten, können Sie dies an dieser Stelle tun.

  • * Optional * + port +: Der Standardport ist 1194, aber Sie können dies beliebig ändern

  • * Optional * + proto +: Wählen Sie entweder + tcp + oder + udp +; Die Standardeinstellung ist in Ordnung

  • + user und` + group`: Setzen Sie diese auf + nobody, indem Sie die Zeilen auskommentieren. Dadurch wird OpenVPN aus Sicherheitsgründen mit weniger Berechtigungen ausgeführt

user nobody
group nobody

_ * Hinweis: * Jede Konfiguration kann nur einen Port und ein Protokoll gleichzeitig ausführen. _

Speichern Sie abschließend Ihre Änderungen.

Schritt 3 - Generieren von Serverzertifikaten und Schlüsseln

+ easy-rsa + vereinfacht das Generieren von Zertifikaten und Schlüsseln.

Kopieren Sie zuerst das Programm in Ihr Konfigurationsverzeichnis, da Sie die Werte ändern werden.

cp -r /usr/local/share/easy-rsa /usr/local/etc/openvpn/easy-rsa

Öffnen Sie die Datei + vars + zum Bearbeiten:

nano /usr/local/etc/openvpn/easy-rsa/vars

Ändern Sie die Schlüsselgröße, indem Sie diese Zeile ändern:

export KEY_SIZE=

Heutzutage sind 2048-Bit-Schlüssel der Standard, obwohl Sie auch 4096-Bit verwenden können, was sicherer ist, aber die Aushandlung verlangsamt.

Wenn Sie möchten, können Sie auch die Standardwerte für Zertifikat und Schlüssel in dieser Datei festlegen, sodass Sie sie später nicht mehr eingeben müssen.

Da die von uns verwendete Shell "+ tcsh in" ist, müssen die "+ export" -Zeilen durch "+ setenv" ersetzt werden. Dies geschieht mit + used vor der` + source`. Wechseln Sie in unser Verzeichnis "+ easy-rsa +" (erforderlich).

cd /usr/local/etc/openvpn/easy-rsa/

Ersetzen Sie die Zeilen:

cat ./vars | sed -e 's/export /setenv /g' -e 's/=/ /g' | source /dev/stdin

Bereinigen Sie zunächst das Verzeichnis in unserem Verzeichnis "+ / usr / local / etc / openvpn / easy-rsa / +" und erstellen Sie dann die Zertifizierungsstelle.

./clean-all
./build-ca

Sie werden aufgefordert, die CA-Optionen festzulegen. Füllen Sie diese mit Ihren Daten aus:

Country Name (2 letter code) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [Fort-Funston]:
Organizational Unit Name (eg, section) [changeme]:
Common Name (eg, your name or your server's hostname) [changeme]:
Name [changeme]:
Email Address [[email protected]]:

Erstellen Sie nun den Serverschlüssel:

./build-key-server server

Stellen Sie die Optionen erneut ein. Sie benötigen weder ein Passwort noch einen optionalen Firmennamen.

Geben Sie "+ y +" ein, um den Schlüssel zu signieren und zu bestätigen:

Country Name (2 letter code) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [Fort-Funston]:
Organizational Unit Name (eg, section) [changeme]:
Common Name (eg, your name or your server's hostname) [server]:
Name [changeme]:
Email Address [[email protected]]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Certificate is to be certified until Feb  5 14:40:15 2025 GMT (3650 days)
Sign the certificate? [y/n]:

1 out of 1 certificate requests certified, commit? [y/n]
Write out database with 1 new entries
Data Base Updated

Schließlich muss der Diffie-Hellman-Schlüssel generiert werden. Dies kann je nach Schlüsselgröße einige Zeit in Anspruch nehmen:

./build-dh

Nachdem alle Serverschlüssel und Zertifikate generiert wurden, sollten sie in unser OpenVPN-Konfigurationsverzeichnis kopiert werden.

cd /usr/local/etc/openvpn/easy-rsa/keys/
cp dh*.pem ca.crt server.crt server.key /usr/local/etc/openvpn/

Sie sind mit den Serverzertifikaten fertig! Nun zum Client-Zertifikat.

Schritt 4 - Generieren von Client-Zertifikaten

Jeder Client benötigt außerdem ein Zertifikat und einen Schlüssel, um sich zu authentifizieren und eine Verbindung zum VPN herzustellen. Stellen Sie sicher, dass Sie sich im Verzeichnis "+ / usr / local / etc / openvpn / easy-rsa / +" befinden.

cd /usr/local/etc/openvpn/easy-rsa/

Führen Sie den folgenden Befehl aus, wobei "++" der Name ist, den Sie für dieses bestimmte Client-Zertifikat verwenden möchten.

./build-key

Sie werden aufgefordert, den Ländernamen, den Städtenamen usw. einzugeben. nochmal. Der Vorgang ist derselbe wie für die Serverschlüsselgenerierung. Dies soll die Information des Kunden sein, aber nichts davon ist wirklich wichtig.

Sie benötigen weder eine Passphrase noch einen Firmennamen. Geben Sie "+ y +" ein, um das Zertifikat zu signieren und zu bestätigen.

_ * Hinweis: * Es wird empfohlen, für jeden Client ein anderes Zertifikat zu verwenden. Dies wird standardmäßig von OpenVPN erzwungen. Bei Bedarf kann dies jedoch in der OpenVPN-Konfiguration deaktiviert werden (wird später erklärt). _

Wenn Sie eine andere Schlüsselgröße als "+ 2048 " verwendet haben, müssen Sie die OpenVPN-Konfiguration so ändern, dass sie dem Dateinamen der von Ihnen verwendeten Schlüsselgröße entspricht. Wenn Sie sich nicht erinnern, können Sie den korrekten Dateinamen der ` dh +` - Datei mit folgendem Befehl anzeigen:

ls /usr/local/etc/openvpn/easy-rsa/keys/dh*.pem

Bearbeiten Sie die + server.conf +:

nano /usr/local/etc/openvpn/server.conf

Ersetzen Sie die Zeile + dh dh2048.pem + durch:

dh dh.pem

Wenn Sie unserer Empfehlung für den 2048-Bit-Schlüssel früher gefolgt sind, müssen Sie keine Änderungen vornehmen.

Wiederholen Sie diesen Abschnitt für jedes separate Client-Zertifikat, das Sie erstellen möchten.

Schritt 5 - Konfigurieren des IPv4-NAT-Routings

FreeBSD enthält + natd + als Teil der + ipfw + Firewall, die NAT-Routing ermöglicht und für OpenVPN verwendet werden kann. Um dies zu benutzen, editiere + / etc / rc.conf +:

nano /etc/rc.conf

Fügen Sie diese Inhalte unten hinzu:

firewall_enable="YES"
firewall_type="open"

gateway_enable="YES"
natd_enable="YES"
natd_interface="vtnet0"
natd_flags="-dynamic -m"
  • + firewall_enable + aktiviert die + ipfw + Firewall, die für + natd + benötigt wird

  • + firewall_type =" open "+ lässt die Firewall standardmäßig Datenverkehr zu

  • + gateway_enable + setzt + net.inet.ip.forwarding + auf + 1 +, was IPv4-Routing auf dem System ermöglicht

  • + natd_enable + aktiviert den eigentlichen NAT-Router

  • + natd_interface + ist die externe Schnittstelle zum Internet; + vtnet0 + wird für DigitalOcean verwendet

  • + natd_flags + macht das NAT dynamisch und + -m + erhält die Portnummern

Starten Sie nun Ihren Server neu, um "+ ipfw " und " natd +" zu laden:

reboot

Nochmal anmelden. Denken Sie nach dem Neustart daran, + sudo tcsh + erneut auszuführen, um * root * zu werden, falls Sie dies noch nicht getan haben.

Schritt 6 - OpenVPN Routing Config und DNS konfigurieren

Standardmäßig ist OpenVPN nicht so konfiguriert, dass der Client den Internetverkehr über das VPN weiterleitet. Wir werden sicherstellen, dass der Datenverkehr über OpenVPN weitergeleitet wird, indem wir einige Zeilen in "+ / usr / local / etc / openvpn / server.conf +" auskommentieren:

nano /usr/local/etc/openvpn/server.conf

Suchen Sie diese drei Zeilen, und kommentieren Sie sie aus:

push "redirect-gateway def1 bypass-dhcp"

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Die voreingestellten DNS-Server sind für OpenDNS vorgesehen, aber Sie können sie auf einen beliebigen DNS-Wert einstellen (z. B. Google DNS mit + 8.8.8.8 + und + 8.8.4.4 +).

  • Optionale Einstellungen: *

Sie können Clients auch gestatten, direkt mit den IP-Adressen der anderen zu kommunizieren, indem Sie Folgendes entfernen:

client-to-client

Wenn Sie, wie bereits erwähnt, dieselben Schlüssel und Zertifikate für mehrere Clients verwenden möchten (was etwas weniger sicher ist), kommentieren Sie diese Zeile aus:

duplicate-cn

Die Komprimierung kann mit dieser Zeile aktiviert und deaktiviert werden:

comp-lzo

Sie können Ihre Chiffre manuell einstellen, indem Sie eine der folgenden Zeilen auskommentieren:

cipher BF-CBC        # Blowfish (default)
cipher AES-128-CBC   # AES
cipher DES-EDE3-CBC  # Triple-DES

_ * Hinweis: * Welche Verschlüsselung Sie auch verwenden, muss in der Client-Konfigurationsdatei definiert sein, die wir später erstellen werden. _

Zusätzliche Chiffren sind ebenfalls verfügbar, wie z. B. "+ aes-256-cbc".

Schritt 7 - OpenVPN starten

Aktivieren Sie OpenVPN zum Laden beim Booten und Laden mit dem Befehl "+ service", indem Sie die folgende Zeile zu "+ / etc / rc.conf" hinzufügen:

nano /etc/rc.conf

Fügen Sie diese Zeilen am Ende der Datei hinzu:

openvpn_enable="YES"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"

Der OpenVPN-Server ist jetzt vollständig konfiguriert und wird beim Booten geladen.

Starten Sie den Server manuell mit:

service openvpn start

Erwartete Ausgabe:

add net 10.8.0.0: gateway 10.8.0.2

Ihr OpenVPN-Server läuft jetzt.

Schritt 8 - Client-Datei konfigurieren

Auf dem * Server * erstellen wir die Konfigurationsdatei für jeden Client.

Erstellen Sie zunächst einen Ordner, in dem Sie arbeiten können:

mkdir -p /usr/local/etc/openvpn/clients/

Machen Sie "++" zum Client-Namen, den wir zuvor beim Generieren von Zertifikaten festgelegt haben. (Es spielt keine Rolle, wie Sie dies festlegen, da es sich nur um ein Arbeitsverzeichnis handelt.)

In das neue Verzeichnis verschieben:

cd /usr/local/etc/openvpn/clients//

Kopieren Sie den Client-Schlüssel und das Zertifikat, die wir mit "+ easy-rsa " und der Beispieldatei " client.conf " generiert haben. Stellen Sie sicher, dass Sie "+" durch den Namen ersetzen, den Sie zuvor für die Dateien "+ .key" und "+ .crt" verwendet haben:

cp /usr/local/etc/openvpn/easy-rsa/keys/.crt /usr/local/etc/openvpn/easy-rsa/keys/.key ./
cp /usr/local/share/examples/openvpn/sample-config-files/client.conf ./client.conf
cp /usr/local/etc/openvpn/ca.crt ./

Wieder war ++ das, was wir früher benutzt haben.

Bearbeiten Sie die Datei + client.conf +:

nano ./client.conf

Aktualisieren Sie die Zeile "+ remote " mit der IP-Adresse Ihres Droplets (die Sie mit " ifconfig " erhalten) und der Portnummer. ` 1194 +` ist die Standardeinstellung:

remote  1194

_ _ * Hinweis: * Wenn Sie die Einstellungen für "+ chiffre " oder " comp-lzo " des Servers geändert haben, muss dies in der Datei " client.conf +" berücksichtigt werden. Verwenden Sie dieselben Einstellungen wie zuvor. zum Beispiel:

cipher aes-256-cbc
;comp-lzo

Diese Einstellung verwendet die "+ aes-256-cbc" -Verschlüsselung und deaktiviert die Komprimierung.

Wenn Sie in der Serverkonfiguration die Zeile "+ proto +" geändert haben, muss sich dies auch im Client widerspiegeln.

Stellen Sie sicher, dass diese Zeilen * mit * dem übereinstimmen, was Sie zuvor eingestellt haben. Wenn Sie auf der Serverseite nichts geändert haben, ändern Sie sie hier nicht. _ _

Jetzt ein bisschen Hauswirtschaft; Wir werden die Zertifikate und den Schlüssel in die einzelne Konfigurationsdatei einbetten. Dies erleichtert die Übertragung auf einzelne Kunden. Alternativ können Sie die Konfigurationsdatei und den Schlüssel sowie zwei Zertifikatsdateien separat auf den Client herunterladen.

Kommentieren Sie in derselben Datei + client.conf den Namen des Zertifikats und der Schlüsseldatei aus:

ca ca.crt
cert client.crt
key client.key

Speichern Sie Ihre Änderungen.

Schließlich müssen wir die Dateien "+ ca.crt ", " .crt " und " .key " in die Konfigurationsdatei einbetten. Sie können den Inhalt kopieren und einfügen, indem Sie " cat " oder " nano +" oder das verwenden, mit dem Sie am besten vertraut sind, sowie die entsprechenden Variablen für OpenVPN, oder Sie können das unten gezeigte einzeilige Skript verwenden.

Führen Sie dieses Skript aus und geben Sie Ihr ++ ein, wenn Sie dazu aufgefordert werden. Das Skript hängt Ihre Zertifikats- und Schlüsseldateien an die Datei + client.conf + mit den entsprechenden Variablennamen und Zeilenumbrüchen an, die OpenVPN erwartet:

echo "Enter clientName:" && set CLIENTNAME = $< && printf "\n<ca>\n" >> ./client.conf && cat ./ca.crt >> ./client.conf && printf "</ca>\n" >> ./client.conf && printf "\n<cert>" >> ./client.conf && grep -v '^ ' ./$CLIENTNAME.crt | grep -v 'Certificate' >> ./client.conf && printf "</cert>\n" >> ./client.conf && printf "\n<key>\n" >> ./client.conf && cat ./$CLIENTNAME.key >> ./client.conf && printf "</key>\n" >> ./client.conf

Stellen Sie sicher, dass Sie ganz nach rechts scrollen, da dies ein langer Befehl ist.

Schauen Sie sich die fertige Datei + client.conf mit` + nano s` oder + cat an. Sie sollten den Schlüssel und die Zertifikate sehen, die der Datei unten hinzugefügt wurden.

Sie sind fertig! Jetzt müssen Sie nur noch die Datei + client.conf + an Ihren Client verteilen. Die meisten Clients ziehen die Erweiterung "+ .ovpn " der Erweiterung " .conf " vor, daher sollten Sie * die Datei lokal in " my_digitalocean_vpn.ovpn +" oder etwas Ähnliches umbenennen. *

Wiederholen Sie diesen Abschnitt für jeden Client. Verwenden Sie standardmäßig separate Zertifikate oder verwenden Sie auf jedem Client dasselbe Clientzertifikat, wenn Sie dies vorziehen.

Fazit und Client Setup

Sie sollten jetzt einen funktionierenden OpenVPN-Server haben!

Laden Sie die im letzten Schritt erstellte Client-Konfigurationsdatei (+ / usr / local / etc / openvpn / clients // client.conf +) auf Ihren * lokalen Rechner * herunter. Verwenden Sie eine sichere Methode zum Herunterladen der Datei, z. B. SCP oder https://www.digitalocean.com/community/tutorials/how-to-use-sftp-to-secure-transfer-fileses-with-a-remote-server [SFTP].

Installieren Sie auch auf Ihrem lokalen Computer einen OpenVPN-Client. Tunnelblick funktioniert gut unter Mac OS X, und OpenVPN verfügt über ein Windows Klient.

Stellen Sie sicher, dass Ihre Client-Konfigurationsdatei wie erwartet benannt ist. Dies ist normalerweise ein Name wie "+ my_digitalocean_vpn.ovpn +".

Doppelklicken Sie auf die Datei oder verschieben Sie sie in das erwartete Verzeichnis Ihres Kunden.

Starten Sie Ihren Client und stellen Sie eine Verbindung zum entsprechenden OpenVPN-Server her.

Verwenden Sie einen IP-Adressprüfer wie http://www.whatismyip.com/, um sicherzustellen, dass Ihr VPN funktioniert. Ihre angezeigte IP sollte mit der IP Ihres OpenVPN-Servers übereinstimmen.

Herzliche Glückwünsche! Sie haben eine Verbindung zu Ihrem neuen OpenVPN-Server hergestellt.