Wie lege ich eine statische IP (clientseitig) in OpenVPN fest?

11

Ich richte ein VPN-Netzwerk mit vielen kleinen Geräten ein (mit OpenWRT). In meinem Anwendungsfall sind die Geräte alle durch eine Nummer gekennzeichnet, und ich möchte, dass ihre IP-Adressen mit ihrer ID übereinstimmen (z. B. die Gerätenummer 6 hat eine IP in XXX6).

Ich bin mir dessen bewusst client-config-dirund ifconfig-pushkann sie nicht verwenden, da alle meine Geräte dasselbe Zertifikat verwenden ( duplicate-cnist aktiviert). Dies ist eine Voraussetzung, da das Generieren eines Zertifikats für jedes Gerät zu einschränkend ist (außerdem möchten wir die Konfiguration des VPN-Servers nicht ändern, wenn wir dem System ein Gerät hinzufügen).

Ist es möglich, die IP-Adresse in der Client-Konfigurationsdatei festzulegen? Ich habe in der Dokumentation zu diesem bestimmten Thema nichts gefunden ... Und alles, was ich versucht habe, war nicht erfolgreich.

Grundsätzlich denke ich an Folgendes:

  • Client Stellen Sie eine Verbindung zum VPN-Server her und fragen Sie nach einer bestimmten Adresse ("Geben Sie mir die IP-Adresse: 172.16.0.22").
  • Wenn die Adresse bereits vergeben ist, schlägt der Handshake fehl. Wenn es kostenlos ist, erhält der Kunde die Adresse, die er zuvor gefragt hat
Morreski
quelle
Sie müssen die VPN-Serverkonfiguration nicht ändern, wenn Sie ein neues Gerät mit einem neuen Schlüssel hinzufügen. Genau aus diesem Grund werden die Schlüssel verwendet - der Server überprüft den Schlüssel mithilfe der PKI, nämlich der Zertifikate der Behörde, die das Benutzer- / Gerätezertifikat ausgestellt hat (in seinem Fall wahrscheinlich Ihr eigenes).
Peterph

Antworten:

7

Sie sollten dies mit der ifconfig-pool-persistKonfigurationsoption tun können . Sie können die Datei vorkonfigurieren und festlegen seconds = 0, dass OpenVPN nur die Datei lesen soll.

Wir verwenden es, um sicherzustellen, dass demselben Benutzer dieselbe IP zugewiesen wird, wenn er zu Überwachungszwecken über VPN verbunden ist.

Von der Manpage :

--ifconfig-pool-persist file [Sekunden] Persist / unpersist ifconfig-pool Daten in Sekundenintervallen (Standard = 600) sowie beim Starten und Herunterfahren des Programms. Ziel dieser Option ist es, eine langfristige Zuordnung zwischen Clients (gekennzeichnet durch ihren gemeinsamen Namen) und der ihnen aus dem ifconfig-Pool zugewiesenen virtuellen IP-Adresse bereitzustellen. Die Aufrechterhaltung einer langfristigen Assoziation ist gut für Kunden, da sie die Option --persist-tun effektiv nutzen können.

Datei ist eine durch Kommas getrennte ASCII-Datei, formatiert als ,.

Wenn Sekunden = 0 ist, wird die Datei als schreibgeschützt behandelt. Dies ist nützlich, wenn Sie eine Datei als Konfigurationsdatei behandeln möchten.

Beachten Sie, dass die Einträge in dieser Datei von OpenVPN nur als Vorschläge behandelt werden, basierend auf früheren Zuordnungen zwischen einem gemeinsamen Namen und einer IP-Adresse. Sie garantieren nicht, dass der angegebene gebräuchliche Name immer die angegebene IP-Adresse erhält. Wenn Sie eine garantierte Zuordnung wünschen, verwenden Sie --ifconfig-push

jas_raj
quelle
OK, ich glaube, ich verstehe die Funktionsweise dieser Option, danke für Ihre Erklärung. Es gibt immer noch etwas, das ich nicht bekommen habe. Wie funktioniert es, wenn das Zertifikat von mehreren Geräten gemeinsam genutzt wird, da alle dieselbe CN haben?
Morreski
Ja, ich denke, Sie haben Recht - dies funktioniert basierend auf dem allgemeinen Namen des Zertifikats. Wir haben ein eindeutiges Zertifikat pro Benutzer. In Ihrer ursprünglichen Frage sagten Sie: "Wir möchten die Konfiguration des VPN-Servers nicht ändern, wenn wir dem System ein Gerät hinzufügen." Sie können ein übergeordnetes VPN-Zertifikat erstellen, das OpenVPN verwendet, und dann Unterzertifikate für jedes der Geräte erstellen. Auf diese Weise können Sie ein eindeutiges Zertifikat pro Gerät haben und müssen nicht jedes Mal an OpenVPN geändert werden, wenn Sie ein neues Gerät erhalten
jas_raj
Ich habe diesen Leitfaden verwendet, um alles einzurichten, und er funktioniert gut: jamielinux.com/docs/openssl-certificate-authority/… .
jas_raj
6

Angenommen, wir richten ein Unternehmens-VPN ein und möchten separate Zugriffsrichtlinien für drei verschiedene Benutzerklassen festlegen:

System administrators -- full access to all machines on the network
Employees -- access only to Samba/email server
Contractors -- access to a special server only

Der grundlegende Ansatz besteht darin, (a) jede Benutzerklasse in ihren eigenen virtuellen IP-Adressbereich zu unterteilen und (b) den Zugriff auf Computer zu steuern, indem Firewall-Regeln eingerichtet werden, die die virtuelle IP-Adresse des Clients eingeben.

Nehmen wir in unserem Beispiel an, wir haben eine variable Anzahl von Mitarbeitern, aber nur einen Systemadministrator und zwei Auftragnehmer. Unser IP-Zuweisungsansatz besteht darin, alle Mitarbeiter in einen IP-Adresspool aufzunehmen und dann dem Systemadministrator und den Auftragnehmern feste IP-Adressen zuzuweisen.

Beachten Sie, dass eine der Voraussetzungen für dieses Beispiel darin besteht, dass auf dem OpenVPN-Server eine Software-Firewall ausgeführt wird, mit der Sie bestimmte Firewall-Regeln definieren können. In unserem Beispiel wird davon ausgegangen, dass es sich bei der Firewall um Linux iptables handelt.

Lassen Sie uns zunächst eine virtuelle IP-Adresszuordnung nach Benutzerklasse erstellen:

Class   Virtual IP Range    Allowed LAN Access  Common Names  

Employees   10.8.0.0/24     Samba/email server at 10.66.4.4     [variable]

Sys Admins  10.8.1.0/24     Entire 10.66.4.0/24 subnet  sysadmin1

Contractors 10.8.2.0/24     Contractor server at 10.66.4.12     contractor1, contractor2

Als nächstes übersetzen wir diese Map in eine OpenVPN-Serverkonfiguration. Stellen Sie zunächst sicher, dass Sie die oben genannten Schritte ausgeführt haben, um das Subnetz 10.66.4.0/24 allen Clients zur Verfügung zu stellen (während wir das Routing so konfigurieren, dass der Clientzugriff auf das gesamte Subnetz 10.66.4.0/24 möglich ist, legen wir dies fest Zugriffsbeschränkungen mithilfe von Firewall-Regeln zum Implementieren der obigen Richtlinientabelle.

Definieren Sie zunächst eine statische Einheitennummer für unsere Tun-Schnittstelle, damit wir später in unseren Firewall-Regeln darauf verweisen können:

dev tun0

Definieren Sie in der Serverkonfigurationsdatei den Mitarbeiter-IP-Adresspool:

server 10.8.0.0 255.255.255.0

Fügen Sie Routen für die IP-Bereiche Systemadministrator und Auftragnehmer hinzu:

route 10.8.1.0 255.255.255.0
route 10.8.2.0 255.255.255.0

Da wir bestimmten Systemadministratoren und Auftragnehmern feste IP-Adressen zuweisen, verwenden wir ein Client-Konfigurationsverzeichnis ccd:

client-config-dir ccd

Platzieren Sie nun spezielle Konfigurationsdateien im ccdUnterverzeichnis, um die feste IP-Adresse für jeden Nicht-Mitarbeiter-VPN-Client wie folgt zu definieren.

ccd/sysadmin1 Datei:

    ifconfig-push 10.8.1.1 10.8.1.2

ccd/contractor1 Datei:

    ifconfig-push 10.8.2.1 10.8.2.2

ccd/contractor2 Datei:

    ifconfig-push 10.8.2.5 10.8.2.6

Jedes Paar von ifconfig-Push-Adressen repräsentiert die IP-Endpunkte des virtuellen Clients und Servers. Sie müssen aus aufeinanderfolgenden / 30 Subnetzen entnommen werden, um mit Windows-Clients und dem TAP-Windows-Treiber kompatibel zu sein. Insbesondere muss das letzte Oktett in der IP-Adresse jedes Endpunktpaars aus diesem Satz entnommen werden:

[  1,  2] [  5,  6] [  9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]

Damit ist die OpenVPN-Konfiguration abgeschlossen. Der letzte Schritt besteht darin, Firewall-Regeln hinzuzufügen, um die Zugriffsrichtlinie abzuschließen.

Quelle: https://openvpn.net/index.php/open-source/documentation/howto.html#policy

Aman Juman
quelle
4

Ich hatte einige Probleme beim Konfigurieren wie @jas_raj. Jetzt mache ich das nächste:

1) Erstellen Sie in / etc / openvpn einen neuen Ordner. Zum Beispiel " dir "

2) server.conf Zeile " client-config-dir dir / " hinzufügen

3) In "dir" müssen Sie eine neue Datei mit dem gleichen Namen erstellen, den Sie in Ihr Zertifikat geschrieben haben, und Folgendes eingeben:

ifconfig-push IP MASK

Zum Beispiel: ifconfig-push 10.0.0.10 255.0.0.0

jdmorei
quelle
Ich verstehe nicht, wie ich im Voraus wissen kann, welche Adresse mit dieser Methode welchem ​​Gerät zugewiesen wird.
Morreski
Weil abhängig von Ihrer VPN-Serverkonfiguration 2 Probleme auftreten können: 1) 1 Zertifikat für 1 Gerät 2) dasselbe Zertifikat, verschiedene Benutzer auf Ihrem Server
jdmorei