
Anfangsparameter:
- Der Hauptsitz des Unternehmens mit zwei Grenzproxys Kerio Control v.9.2.9 Build 3171 (hinter Kerio befindet sich ein Cisco 3550-Switch, der die Konfiguration des lokalen Netzwerks des Büros bestimmt).
- Jedes Kerio verfügt über zwei Kanäle mit Lastausgleich bis zum ISP (im Diagramm - ISP Nr. 1 und ISP Nr. 2) mit statischen weißen IPs.
- Von der Seite des Remote-Büros wurde MikroTik 951G-2HnD (OS v.6.43.11) installiert.
- Zwei ISPs kommen zu MikroTik (im Diagramm sind ISP # 3 und ISP # 4).
Zum Zeitpunkt des Schreibens war die Verbindung zu den Anbietern sowohl in der Zentrale als auch in der Gegenstelle Twisted Pair.
Die Liste der Aufgaben:
- Stellen Sie eine IPSec-VPN-Verbindung zwischen MikroTik und Kerio Control her, wobei MikroTik der Initiator sein wird.
- Stellen Sie die Fehlertoleranz der VPN-Verbindung sicher, d. H. Zusätzlich zu der Tatsache, dass MikroTik die Leistung seiner ISPs überwachen muss (Artikel hier ), muss es auch die Verfügbarkeit jedes Kerio-Servers überwachen und den Zugriff bestimmen, über welchen Kanal (über welchen ISP von Kerio) die Verbindung hergestellt wird.
- Bieten Sie die Möglichkeit, die Netzwerkadresse zu ändern, mit der MikroTik eine Verbindung zu Kerio herstellt. Dies liegt an der Tatsache, dass sich Kerio und kein Router im Hauptquartier der "Grenze" befinden.
Was bekommen wir am Ausgang?
- Wenn MikroTik (ScheduleStartup) gestartet wird, wird ein Kanal zum Unternehmensnetzwerk organisiert (der Kanal wird von MikroTik initiiert), sodass ein Remotebenutzer mit Unternehmensressourcen arbeiten kann, ohne Kerio Client zu starten und ohne eine zusätzliche VPN-Verbindung über das Betriebssystem einzurichten.
- MikroTik implementiert Failover, das automatisch zu einem Live-ISP wechselt.
- Sie können Prioritäten für Verbindungspunkte zum Unternehmensnetzwerk festlegen, indem Sie die Zugehörigkeit von Peers ändern, die für die Verbindung mit Kerio Control zu der einen oder anderen Richtlinienvorlagengruppe in MikroTik konfiguriert sind.
- MikroTik kann die Leistung von Kerio Control-Servern automatisch überwachen. Wenn die Verbindung zum Prioritätspunkt unterbrochen wird, wechseln Sie unabhängig zum Live-Kanal.
- Wenn Ihre Kerio Control-Server auf externen DNS-Servern veröffentlicht werden, kann MikroTik Änderungen an ihren IP-Adressen verfolgen (z. B. wenn sich Ihr Anbieter ändert) und unabhängig Änderungen an seiner Konfiguration vornehmen (scriptSetIPSecSADstAddrFromDNS).
Ich muss sofort sagen, dass dieser Artikel kein Tutorial ist (im Prinzip habe ich mich erst zwei Monate (Ende 2017) vor der Erstellung der Konfiguration mit Routern und insbesondere mit MikroTik vertraut gemacht) und die Fragen „Warum?“ Nicht behandelt. Es wird hier sein Die Beschreibung der Arbeitskonfiguration von MikroTik, die in einem realen Unternehmen verwendet wird, wird gegeben.
Hinweis:- Um Kommentare in russischer Sprache beim Übertragen von Skriptcode an MikroTik beizubehalten, stellen Sie vor dem Kopieren von Text in den Puffer und vor dem Einfügen aus dem Puffer sicher, dass das russische Tastaturlayout aktiviert ist.
- Wenn Sie feststellen, dass Protokollierungsskripte überflüssig sind, können Sie Zeilen mit "Protokollwarnung" und "Protokollfehler" auskommentieren oder löschen.
- Möglicherweise bemerken Sie auch auskommentierte "Protokollwarnung" und "Protokollfehler" im Code. Dies ist ein Versuch, die Möglichkeit hinzuzufügen, die Protokollierung auf Englisch zu verwenden ...
Also fangen wir an:
Grundparameter:- Das Netzwerk der übergeordneten Organisation (hinter Kerio) ist 192.168.77.0/24 (hier verwenden wir die Adresse des Netzwerks, in dem sich Kerio im Unternehmensnetzwerk befindet).
- Filialnetz (hinter MikroTik) - 192.168.11.0/24
- Das Netzwerk, dem das Zweigstellennetzwerk zugeordnet wird, wenn eine Verbindung zu Kerio Control Nr. 1 - 192.168.22.0/24 hergestellt wird
- Das Netzwerk, dem das Zweigstellennetzwerk zugeordnet wird, wenn eine Verbindung zu Kerio Control # 2 - 192.168.33.0/24 hergestellt wird
- IP-Adresse aus dem ISP # 1-Pool (Kerio # 1) - 11.11.11.111
- IP-Adresse aus dem ISP # 2-Pool (Kerio # 1) - 22.22.22.111
- IP-Adresse aus dem ISP # 1-Pool (Kerio # 2) - 11.11.11.222
- Die IP-Adresse aus dem ISP # 2-Pool (Kerio # 2) lautet 22.22.22.222
- IP-Adresse aus dem ISP # 3-Pool (MikroTik) - 33.33.33.111
- IP-Adresse aus dem ISP # 4-Pool (MikroTik) - 44.44.44.111
Als erstes müssen Sie DDNS auf MikroTik aktivieren:
/ip cloud set ddns-enabled=yes
Aufgrund der Tatsache, dass MikroTik keine statische weiße IP-Adresse hat, basiert die weitere Arbeit der Konfiguration und der Skripte auf der Verwendung von DDNS.
Auch IP ---> Cloud wird verwendet, um die externe IP-Adresse von MikroTik zu bestimmen, von der aus im Internet gesucht wird.
Konfigurieren wir nun Kerio Control # 1, damit wir später nicht mehr darauf zurückkommen:
Wir gehen zum Abschnitt "Schnittstellen" und fügen die neue "VPN-Tunnel" -Schnittstelle hinzu ...
Tunnelkonfiguration in Kerio Control1. Weisen Sie der Schnittstelle im Feld Name einen Namen zu.
2. Stellen Sie den Schalter auf "Passiv - akzeptiert nur eingehende Verbindungen";
3. Geben Sie Leave "IPSec" ein.
4. Die Registerkarte "Authentifizierung":
- 4.1 Geben Sie im Feld "Vordefinierter Schlüssel:" die Schlüsselphrase ein, die für die Verbindung verwendet werden soll.
- Hinweis:
Ich empfehle kategorisch, alle Schlüsselphrasen in allen VPN-Tunneln festzulegen, die auf einem bestimmten Kerio-Server erstellt wurden!
Dies liegt an der Tatsache, dass Kerio einen schwebenden Fehler hat, der im Folgenden ausgedrückt wird.
Stellen Sie sich vor, dass in der Kerio-Konfiguration, wie in meinem Fall, mehrere "VPN-Tunnel" -Schnittstellen für die Verbindung mit MikroTik konfiguriert sind, die sich nur in den Einstellungen im Feld "Lokale ID:" voneinander unterscheiden (wird unten erläutert).
Wenn Sie also einen eingehenden Tunnel erstellen (ich werde es so nennen), unabhängig davon, welche externe IP-Adresse Kerio mit MikroTik in Verbindung setzt, aktiviert Kerio (aus irgendeinem Grund) die erste Schnittstelle, auf die gestoßen wird, und ob die IP-Adresse in den Einstellungen angegeben ist Der Tunnel auf der Kerio-Seite unterscheidet sich von dem, auf den sich MikroTik bezieht. Der Tunnel ist nicht organisiert.
Und wenn für alle Tunnel unterschiedliche Schlüsselphrasen angegeben sind, hört dieses Problem auf. - 4.2 Geben Sie im Feld "Lokale ID:" die IP-Adresse aus dem ISP # 1-Adresspool (im Beispiel 11.11.11.111) ein, der der Kerio Control # 1-WAN-Schnittstelle zugewiesen ist, auf die MikroTik zugreifen wird.
- 4.3 Geben Sie im Feld „Remote ID:“ den FQDN ein, den unser MikroTik von DDNS erhalten hat (IP ---> Cloud ---> DNS-Name). Mit dieser Einstellung ist es uns egal, wie ISP MikroTik auf Kerio zugreift.
- 4.4 Wählen Sie im Feld "Phase 1-Verschlüsselung (IKE):" aes128-sha1-modp2048 aus der Liste aus;
- 4.5 Wählen Sie im Feld "Phase 2-Verschlüsselung (ESP):" 3des-sha1-modp2048 aus der Liste aus;
- Hinweis:
Bearbeiten der Standardeinstellungen über die Schaltfläche "Ändern ...";
Beide Chiffren werden nach der „wissenschaftlichen Stochermethode“ ausgewählt.
5. Die Registerkarte "Remote-Netzwerke":
Hier geben wir die IP-Adresse des lokalen Netzwerks ein, das MikroTik beim Herstellen einer Verbindung zu diesem bestimmten Kerio Control-Server verwendet (im Beispiel - 192.168.22.0/24).
Wichtig! In allen anderen (in meinem Fall wird es durch die Anzahl der ISPs von Kerio bestimmt) Tunneln auf MikroTik, auf diesem Kerio-Server muss dieselbe IP-Adresse angegeben werden!
Ich möchte Sie daran erinnern, dass dies auf die Notwendigkeit zurückzuführen ist, die Route zu diesem Netzwerk vom Hauptsitznetzwerk aus zu konfigurieren.
6. Die Registerkarte "Lokale Netzwerke":
- 6.1 Deaktivieren Sie das Kontrollkästchen "Automatisch erkannte lokale Netzwerke verwenden".
- 6.2 Aktivieren Sie das Kontrollkästchen "Benutzerdefinierte Netzwerke verwenden:" und fügen Sie der Liste der Netzwerke die Netzwerkadresse hinzu, die den gesamten Adressbereich abdeckt, der im lokalen Netzwerk hinter Kerio Control verwendet wird (im Beispiel - 192.168.0.0/16).
Wir wiederholen alle obigen Schritte für den zweiten Tunnel auf demselben Kerio-Server.
Die zweite Tunneleinstellung unterscheidet sich nur durch die Verwendung einer anderen Passphrase (Abschnitt 4.1) und einer anderen externen IP-Adresse aus dem ISP # 2-Adresspool (Abschnitt 4.2) (im Beispiel 22.22.22.111).
Die Einstellungen für Kerio Control Nr. 2 sind mit den oben beschriebenen identisch, mit Ausnahme der auf der Registerkarte Remote-Netzwerke (S. 5) (im Beispiel 192.168.33.0/24) angegebenen Netzwerkadresse und dementsprechend der IP-Adressen im Feld Lokale ID: ( Abschnitt 4.2), der aus den IP-Adressen ausgewählt werden sollte, die den Kerio Control # 2-WAN-Schnittstellen zugewiesen sind (im Beispiel 11.11.11.222 und 22.22.22.222).
Als Nächstes erstellen wir eine Zulassungsregel zum Pingen unseres Kerio von MikroTik ...
Ping-Regel in Kerio ControlWir gehen zum Abschnitt "Verkehrsregeln" und erstellen eine neue Regel mit den folgenden Parametern:
- Quelle - Geben Sie den FQDN an, den unser MikroTik von DDNS erhalten hat.
- Ziel - Firewall
- Service - Ping;
- Sie können auch die IP-Version (IPv4) angeben, dies ist jedoch nicht erforderlich.
Wir speichern die Regel unter einem für Sie verständlichen Namen und ziehen sie ganz nach oben in die Liste der Regeln.
Wir wiederholen das gleiche Verfahren auf dem zweiten Kerio-Server.
Vergessen Sie nicht, die Routen im Netzwerk hinter MikroTik in Switches oder Routern an der Seite der Zentrale zu registrieren, damit das Netzwerk der Zentrale weiß, wohin der Verkehr geleitet werden soll (in meinem Fall sind dies zwei statische Routen in den Netzwerken 192.168.22.0/24 und 192.168.33.0/24).
Von der Zentrale aus haben wir alles getan, jetzt wechseln wir zu MikroTik.
Beginnen wir mit der Erstellung der grundlegenden Konfigurationsobjekte zum Organisieren und Testen des VPN-Tunnels.
Der erste Schritt besteht darin, eine lokale Subnetz-Adressliste zu erstellen. Wir werden es in Firewall-Regeln verwenden.
/ip firewall address-list # MikroTik, # IP- DHCP add address=192.168.11.0/24 list="Local subnet" # , MikroTik # VPN- Kerio Control #1 # ( VPN- Kerio Control #1, # " ") add address=192.168.22.0/24 list="Local subnet" # , MikroTik # VPN- Kerio Control #2 # ( VPN- Kerio Control #2, # " ") add address=192.168.33.0/24 list="Local subnet"
Erstellen Sie als Nächstes eine Zulassungsregel für IKE-Verkehr und platzieren Sie sie ganz oben in der Regelliste.
add action=accept chain=input comment="VPN Allow IKE" dst-port=500 protocol=udp
Fügen Sie dann dem Firewall-Filter zwei Regeln für die Arbeit mit VPN-Verkehr hinzu ...
/ip firewall filter add action=accept chain=forward comment="VPN In IpSec" dst-address-list=\ "Local subnet" ipsec-policy=in,ipsec src-address=192.168.0.0/16 \ src-address-list="!Local subnet" add action=accept chain=forward comment="VPN Out" dst-address=192.168.0.0/16 \ dst-address-list="!Local subnet" src-address-list="Local subnet"
... und verschieben Sie sie an eine Position unmittelbar
über der Drop-Regel , die eingehenden Datenverkehr von außerhalb des LAN verhindert. In meiner Standardkonfiguration war es mit dem Kommentar "defconf: alles löschen, was nicht aus dem LAN kommt"
Gehen Sie zur Firewall Mangle und erstellen Sie die folgenden Regeln:
/ip firewall mangle # , # ... add action=mark-connection chain=prerouting comment="VPN In" \ new-connection-mark=VPN_conn_in passthrough=no src-address=192.168.0.0/16 \ src-address-list="!Local subnet" # ... add action=mark-routing chain=output comment="VPN In" connection-mark=\ VPN_conn_in new-routing-mark=VPN_route_in passthrough=yes # MikroTik . # NAT. add action=mark-connection chain=postrouting comment="VPN Out" dst-address=\ 192.168.0.0/16 dst-address-list="!Local subnet" new-connection-mark=\ VPN_conn_out passthrough=no
Als nächstes stellen wir in Firewall NAT fest:
/ip firewall nat # MikroTik # , # Kerio- (: Kerio Control #1 - 192.168.22.0/24, Kerio Control #2 - 192.168.33.0/24) # ! # comment=KerioVpnNatOut ! add action=netmap chain=srcnat comment=KerioVpnNatOut connection-mark=\ VPN_conn_out to-addresses=192.168.22.0/24 # MikroTik # MikroTik add action=netmap chain=dstnat comment=KerioVpnNatIn connection-mark=\ VPN_conn_in to-addresses=192.168.11.0/24 # MikroTik Kerio- add action=accept chain=srcnat comment=KerioVpnNatPing out-interface-list=WAN protocol=icmp
Wichtig! Diese Regeln sollten über den Maskierungsregeln platziert werden.
Jetzt gehen wir zum Abschnitt IP ---> IPSec, wo wir eine Richtlinie, einen Peer, Richtlinienvorlagengruppen (ich werde ihren Zweck später besprechen) und einen Vorschlag zum Einrichten der Phase-2-Verschlüsselung erstellen müssen.
IP IPSec Vorschlag /ip ipsec proposal add enc-algorithms=3des name=KerioVPNProposal#01 pfs-group=modp2048
ip ipsec-Richtliniengruppe /ip ipsec policy group add name=1 add name=2 add name=3 add name=4
ip ipsec peer /ip ipsec peer add address=11.11.11.111/32 comment=vs01-i01-01.domain.ru exchange-mode=\ main-l2tp local-address=33.33.33.111 my-id=\ fqdn:mikrotik.sn.mynetname.net policy-template-group=1 profile=\ profile_4 secret=pass1111
IP IPSec-Richtlinie /ip ipsec policy add comment=KerioVPNPolicy dst-address=192.168.77.0/24 proposal=KerioVPNProposal#01 \ sa-dst-address=11.11.11.111 sa-src-address=33.33.33.111 src-address=\ 192.168.22.0/24 tunnel=yes
Kommentar:
1. / ip ipsec-Vorschlag - Geben Sie im Feld "Phase 2-Verschlüsselung (ESP):" dieselben Verschlüsselungsparameter ein, die wir bei der Konfiguration von Kerio Control angegeben haben.
Hinweis:Beachten Sie den Parameter "name = KerioVPNProposal # 01".
Es ist nicht erforderlich, diesen Namen speziell zu verwenden. Wenn Sie sich jedoch für die Verwendung eines anderen Namens entscheiden, müssen Sie nach dem Ändern die Einstellung der zugehörigen IPSec-Richtlinie überprüfen und gegebenenfalls ändern sowie den zugewiesenen Wert der Variablen DefKerioPropName im Skript scriptCheckActiveVpnServer ändern, der erläutert wird Rede weiter.
(Tatsächlich werden die meisten Namen und Kommentare von Objekten in der beschriebenen Konfiguration in Skripten verwendet. Das Umbenennen kann daher zu Unannehmlichkeiten führen, da Änderungen am Skriptcode vorgenommen werden müssen. Ich werde versuchen, im Text entsprechende Notizen zu machen, um die Suche nach solchen Objekten zu erleichtern.)
2. / ip ipsec-Richtliniengruppe
Die Erstellung von Gruppen beruht auf der Tatsache, dass wir in Zukunft ihre Namen (1, 2, ... n) in Skripten verarbeiten und sie verwenden, um die IP-Adressen der Kerio-Server zu priorisieren, auf die wir zugreifen werden.
Ich erstelle vier Gruppen gleichzeitig. Ich habe zwei ISPs mit jeweils zwei externen IPs von Kerio. Derzeit verwenden wir nur eine Gruppe.
3. / ip ipsec peer
Geben Sie in Peer Folgendes an:
- Adresse - IP-Adresse von Kerio, die mit MikroTik kontaktiert wird. Die gleiche Adresse, die wir in die / ip ipsec-Richtlinie sa-dst-address eingegeben haben, sollte nur mit der Maske "/ 32" angegeben werden.
- Lokale Adresse - IP-Adresse von MikroTik, von der aus auf Kerio zugegriffen wird. Die gleiche Adresse, die wir in der / ip ipsec-Richtlinie sa-src-address eingegeben haben, sollte angegeben werden.
- Auth. Methode - Wählen Sie "Pre Shared Key" aus der Liste aus.
- Austauschmodus - Wählen Sie main-l2tp aus der Liste aus.
- Wenn diese Option aktiviert ist, deaktivieren Sie das Kontrollkästchen "Passiv".
- Geheimnis - Geben Sie die Passphrase, die wir bei der Konfiguration der VPN-Schnittstelle unter Kerio eingegeben haben, auf der Registerkarte "Authentifizierung" in das Feld "Vordefinierter Schlüssel:" ein.
- Richtlinienvorlagengruppe - Wählen Sie aus der Liste die Gruppe aus, die wir zuvor mit dem Namen "1" erstellt haben.
- Deaktivieren Sie NAT Traversal.
- Mein ID-Typ - Wählen Sie den Wert "fqdn" aus der Liste aus.
- Meine ID - Geben Sie den von MikroTik in DDNS zugewiesenen vollqualifizierten Domänennamen ein.
- Wählen Sie auf der Registerkarte "Verschlüsselung" die Verschlüsselungsparameter aus, die wir bei der Konfiguration der VPN-Schnittstelle unter Kerio eingegeben haben, auf der Registerkarte "Authentifizierung" im Feld "Phase 1 (IKE) -Verschlüsselung:".
- Kommentar ( Warnung! Wird in Skripten verwendet! ).
In dem Kommentar gebe ich den vollständigen technischen vollqualifizierten Domänennamen meiner Server an, die auf den DNS-Servern veröffentlicht sind, die meine äußere Zone bedienen.
Zusätzlich zur Verwendung dieser Konfiguration kann ich so die Informationen zu den externen IP-Adressen der verwendeten Kerio-Server auf dem neuesten Stand halten (ich muss nur die IP-Adresse auf dem externen DNS-Server ändern und sie wird automatisch in MikroTik geändert (Artikel
hier )).
Für diejenigen, die zu faul sind, um zu verstehen, zitiere ich den Arbeitscode:
/system script add dont-require-permissions=no name=scriptSetIPSecSADstAddrFromDNS owner=\ admin policy=read,write
Skriptliste scriptSetIPSecSADstAddrFromDNS :if ([:len [/system script job find script=SetIPSecSADstAddrFromDNS]]>1) do={ :error } :local DnsNameFromComment :local ResolvedIpFromComment :local ResolvedIpWithMaskFromComment :local IpPeerAddr :foreach IpSecPeerCount in=[/ip ipsec peer find] do={ :set DnsNameFromComment [/ip ipsec peer get $IpSecPeerCount comment] :if ($DnsNameFromComment!="") do={ :do { :set ResolvedIpFromComment [:resolve $DnsNameFromComment] :set ResolvedIpWithMaskFromComment ($ResolvedIpFromComment . "/32") :set IpPeerAddr [/ip ipsec peer get $IpSecPeerCount address] :if ($ResolvedIpWithMaskFromComment!=$IpPeerAddr) do={ :log warning ("[SetIPSecSADstAddrFromDNS] " . DnsNameFromComment . " IP- " . $IpPeerAddr . " " . $ResolvedIpFromComment) #:log warning ("[SetIPSecSADstAddrFromDNS] In the peer to the server " . DnsNameFromComment . " changed IP address from " . $IpPeerAddr . " on " . $ResolvedIpFromComment) /ip ipsec peer set $IpSecPeerCount address=$ResolvedIpWithMaskFromComment } } on-error={ :set ResolvedIpFromComment "unknown" :log error ("[SetIPSecSADstAddrFromDNS] " . $DnsNameFromComment) #:log error ("[SetIPSecSADstAddrFromDNS] Cant resolve name " . $DnsNameFromComment) } } } :log warning ("[SetIPSecSADstAddrFromDNS] IP- VPN- ") #:log warning ("[SetIPSecSADstAddrFromDNS] The IP-addresses of the VPN-servers are checked")
Die Grundregel, die für den Kommentar in Peers gilt, lautet, dass der Name mit Buchstaben und / oder Zahlen ohne Leerzeichen beginnen muss, gefolgt von einem
obligatorischen Bindestrich ("-"), gefolgt von einer beliebigen Anzahl beliebiger Zeichen.
Ich benutze folgendes Format:
vsNN-pNN-NN.domain.ru
Wo:
vsNN - vpn-server #NN (Dieser Teil des Kommentars wird in Skripten verarbeitet und in IP ---> Firewall ---> Adresslisten verwendet (siehe unten));
pNN - ISP #NN;
NN - Seriennummer der externen IP-Adresse im Adresspool, die mir vom Anbieter auf Kerio ausgestellt wurde;
4. / ip ipsec-Richtlinie
In der Politik definieren wir:
- Dst. Adresse - Netzwerkadresse hinter Kerio (dst-Adresse);
- Src. Adresse - Die Netzwerkadresse, an die MikroTik sein lokales Netzwerk (src-Adresse) maskiert (siehe IP-Einstellungen ---> Firewall ---> NAT unten). Diese Netzwerkadresse ist auf der Kerio-Seite sichtbar (wir haben sie bei der Konfiguration der VPN-Schnittstelle in Kerio auf der Registerkarte Remote-Netzwerke angegeben).
- Protokoll - 255 (alle);
- Aktion - verschlüsseln;
- Level - erfordern;
- IPSec-Protokolle - esp;
- setze den Parameter tunnel = yes;
- SA Src. Adresse - Die externe IP-Adresse von MikroTik, von der aus auf Kerio zugegriffen wird (sa-src-Adresse);
- SA Dst. Adresse - IP-Adresse von Kerio, an die MikroTik kontaktiert wird (sa-dst-Adresse);
- Vorschlag - Geben Sie den Wert ein, der dem Parameter name im Abschnitt / ip ipsec-Vorschlag zugewiesen wurde (in dieser Konfiguration - KerioVPNProposal # 01).
- Kommentar ( Warnung! Wird in Skripten verwendet! ) - KerioVPNPolicy.
Wenn alles richtig gemacht wurde, sollte nach dem Speichern der Richtlinie der Wert "Established" im Feld "PH2 State" angezeigt werden, der die Installation eines VPN-Kanals zwischen MikroTik und Kerio anzeigt.
Sie können dies überprüfen, indem Sie den Status der VPN-Schnittstelle in Kerio Control überprüfen. Dort sollte im Feld "Information" gegenüber der Schnittstelle, zu der die Verbindung hergestellt wird, die Aufschrift "Verbindung zu IP_Ihr_MikroTik wird hergestellt" angezeigt.
Wir fahren fort ...
Jetzt erstellen wir Peers für alle verbleibenden IP-Adressen von Kerio-Servern (in meiner Konfiguration müssen drei weitere Peers erstellt werden).
Dazu müssen wir alle in Absatz 3 angegebenen Schritte wiederholen (/ ip ipsec peer), aber die folgenden Änderungen beachten:
- Adresse - Ändern Sie die IP-Adresse von Kerio.
- Geheimnis - Geben Sie die Passphrase ein, die sich auf die zu erstellende Verbindung bezieht (pass2222, pass3333, ... passNNNN).
- Richtlinienvorlagengruppe - Wählen Sie die nächste Gruppe in der Liste aus der Liste aus (2, 3, ... n).
Hinweis:Anschließend können Sie die Priorität Ihrer Server jederzeit ändern, indem Sie die Gruppe in den Peer-Einstellungen ändern.
- Kommentar - In meinem Fall wird der FQDN eines anderen Kerio-Servers geändert.
Alle anderen Parameter werden wie beim ersten Fest eingegeben. Diejenigen, die geändert werden müssen, werden von Skripten verarbeitet und können vorerst unverändert kopiert werden.
Der letzte Schritt der Konfiguration vor dem Verbinden von Skripten mit der Arbeit besteht darin, MikroTik als Repository für Konstanten zu verwenden, die wir in Skripten verwenden werden ...
Fügen Sie den Firewall-Adresslisten zwei Listen hinzu (
Warnung! Wird in Skripten verwendet! ):
/ip firewall address-list add address=192.168.22.0/24 list=vs01 add address=192.168.33.0/24 list=vs02
In ihnen geben wir die Adressen von Netzwerken unter Bezugnahme auf Kerio-Server-Namenspräfixe an, in die wir ausgehenden VPN-Verkehr abbilden.
Um die Arbeit all dieser Schande zu automatisieren, fügen wir zwei Skripte und drei Zeitpläne hinzu
(wenn Sie sich entscheiden, die Skripte umzubenennen, vergessen Sie nicht, die entsprechenden Änderungen am Code vorzunehmen) .
/system script add dont-require-permissions=no name=scriptFunctionsList owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon
Skriptliste scriptFunctionsList # IP --> Cloud DNS- # : # # $start (true/false); # # "" "updated" :global subUpdateCloudDns do={ put ($start); :if ($start=false) do={ set $CloudDnsStatus; # set $m 1; log warning ("[subUpdateCloudDns] ---> DDNS ---> "); #log warning ("[subUpdateCloudDns] ---> DDNS status ---> CHECK STARTED"); do { log warning ("[subUpdateCloudDns] ---> DDNS , ---> " . $m); [/ip cloud force-update]; delay 30000ms; set $CloudDnsStatus ([/ip cloud get status]); set $m ($m+1); :if ($CloudDnsStatus="updated") do={ log warning ("[subUpdateCloudDns] ---> DDNS ---> " . $CloudDnsStatus); #log warning ("[subUpdateCloudDns] ---> DDNS status ---> " . $CloudDnsStatus); } else={ log error ("[subUpdateCloudDns] ---> DDNS ---> " . $CloudDnsStatus); #log error ("[subUpdateCloudDns] ---> DDNS status ---> " . $CloudDnsStatus); } } while=(($CloudDnsStatus!="updated") and ($m<10)); return ($CloudDnsStatus); } } # IP --> Cloud # : # # 0 - ; # 1 - , ; # 2 - :global subCheckCloudDDNS do={ set $CloudDnsActive ([/ip cloud get ddns-enabled]); # - ( $m=0 ) set $m 0; :if ($CloudDnsActive=yes) do { # IP--->Cloud ( $m=1 ) set $m ($m+1); set $CloudDnsStatus ([/ip cloud get status]); # IP- ( IP--->Cloud DNS) set $CloudDnsIP ([/ip cloud get public-address]); set $CheckIpAddr ([resolve [/ip cloud get dns-name]]); :if ($CloudDnsIP!=$CheckIpAddr) do={ # IP ( MikroTik )... set $CloudDnsStatus "updating..."; } :if ($CloudDnsStatus="updated") do { # IP--->Cloud ( $m=2 ) set $m ($m+1); } } return ($m); } # # : # # $ScriptName ( ) :global subRepeatScript do={ put ($ScriptName); :if ($ScriptName!="") do { [/system script run $ScriptName]; } } # VPN- # # IP- VPN- :global subGetVpnServers do={ # IP- VPN- :foreach IpSecPeerId in=[/ip ipsec peer find passive!=yes] do={ set $CheckIpAddr [/ip ipsec peer get $IpSecPeerId address]; :if ($CheckIpAddr!="") do={ set $MaskPos [find $CheckIpAddr "/"]; set $GroupFromPeer ([/ip ipsec peer get $IpSecPeerId policy-template-group]); set $IpFromPeer ([pick $CheckIpAddr 0 $MaskPos]); set $VpnServersList ($VpnServersList, {{$GroupFromPeer; $IpFromPeer}}); } } return ($VpnServersList); } # # # ID :global subDisableIpSecPeers do={ # ... , (passive=false) ... :foreach IpSecPeerId in=[/ip ipsec peer find passive!=yes] do={ log warning ("[IP IPSec Peer] ---> ---> " . [/ip ipsec peer get $IpSecPeerId comment]); #log warning ("[IP IPSec Peer] ---> processed peer on ---> " . [/ip ipsec peer get $IpSecPeerId comment]); # address ... set $CheckIpAddr [/ip ipsec peer get $IpSecPeerId address]; :if ($CheckIpAddr!="") do={ # address , IP- ... set $MaskPos ([find $CheckIpAddr "/"]); set $CheckIpAddr ([pick $CheckIpAddr 0 $MaskPos]); # ... IPSec- :foreach IpSecPolicyId in=[/ip ipsec policy find sa-dst-address=$CheckIpAddr] do={ :if ($IpSecPolicyId!="") do={ :if ([/ip ipsec policy get $IpSecPolicyId disabled]!=yes) do={ [/ip ipsec policy disable $IpSecPolicyId]; log warning ("[IP IPSec Policy] ---> " . [/ip ipsec policy get $IpSecPolicyId comment] . " "); #log warning ("[IP IPSec Policy] ---> policy " . [/ip ipsec policy get $IpSecPolicyId comment] . " deactivated"); } # ID set $IdList ($IdList, $IpSecPolicyId); } } } # : , :if ([/ip ipsec peer get $IpSecPeerId disabled]!=yes) do={ [/ip ipsec peer disable $IpSecPeerId]; log warning ("[IP IPSec Peer] ---> " . [/ip ipsec peer get $IpSecPeerId comment] . " ---> "); #log warning ("[IP IPSec Peer] ---> " . [/ip ipsec peer get $IpSecPeerId comment] . " ---> deactivated"); } } return ($IdList); } # # : # # $PeerID (ID VPN-); # $PolIdList ( ID $subDisableIpSecPeers); # $CloudIP (IP MikroTik DDNS); # $SrcIP (src-address VPN-) :global subEnableIpSecPeers do={ put ($PeerID); put ($PolIdList); put ($CloudIP); :if (($PeerID!="")&&($PeerID!=nil)&&($PolIdList!="")&&($PolIdList!=nil)&&($CloudIP!="")&&($CloudIP!=nil)) do={ # VPN- set $ActiveVPN [/ip ipsec peer get $PeerID address]; :if ($ActiveVPN!="") do={ # , IP- set $MaskPos [find $ActiveVPN "/"]; set $ActiveVPN ([pick $ActiveVPN 0 $MaskPos]); } # , :if ([/ip ipsec peer get $PeerID disabled]=yes) do={ delay 5000ms; [/ip ipsec peer enable $PeerID]; log warning ("[IP IPSec Peer] ---> peer ---> " . [/ip ipsec peer get $PeerID address]); #log warning ("[IP IPSec Peer] ---> activated peer on ---> " . [/ip ipsec peer get $PeerID address]); } # ID PolIdList, , Src. Address, SA Src. Address SA Dst. Address, :foreach IpSecPolicyId in=$PolIdList do={ :if ($IpSecPolicyId!="") do={ :if ([/ip ipsec policy get $IpSecPolicyId src-address]!=$SrcIP) do={ [/ip ipsec policy set $IpSecPolicyId src-address=$SrcIP]; log warning ("[IP IPSec Policy] ---> src-address"); #log warning ("[IP IPSec Policy] ---> src-address changed"); } :if ([/ip ipsec policy get $IpSecPolicyId sa-src-address]!=$CloudIP) do={ [/ip ipsec policy set $IpSecPolicyId sa-src-address=$CloudIP]; log warning ("[IP IPSec Policy] ---> sa-src-address"); #log warning ("[IP IPSec Policy] ---> sa-src-address changed"); } :if ([/ip ipsec policy get $IpSecPolicyId sa-dst-address]!=$ActiveVPN) do={ [/ip ipsec policy set $IpSecPolicyId sa-dst-address=$ActiveVPN]; log warning ("[IP IPSec Policy] ---> sa-dst-address"); #log warning ("[IP IPSec Policy] ---> sa-dst-address changed"); } :if ([/ip ipsec policy get $IpSecPolicyId disabled]=yes) do={ delay 3000ms; [/ip ipsec policy enable $IpSecPolicyId]; log warning ("[IP IPSec Policy] ---> "); #log warning ("[IP IPSec Policy] ---> policy activated"); # DNS- [/ip dns cache flush] } } } } } # ID # : # # $PeerIP (IP ); # $CloudIP (IP MikroTik DDNS); # $action (enable/disable/skip) # # ID, , :global subGetPoliciesByPeer do={ put ($PeerIP); put ($CloudIP); put ($action); :if (($action="")||($action=nil)) do={ set $action "skip"; } :foreach IpSecPolicyId in=[/ip ipsec policy find sa-dst-address=$PeerIP] do={ :if ($IpSecPolicyId!="") do={ # $action=disable, :if (([/ip ipsec policy get $IpSecPolicyId disabled]!=yes)&&($action="disable")) do={ [/ip ipsec policy disable $IpSecPolicyId]; log warning ("[IP IPSec Policy] ---> "); #log warning ("[IP IPSec Policy] ---> policy deactivated"); } # $CloudIP sa-src-address!=$CloudIP ( ISP), sa-src-address :if (($CloudIP!="")&&($CloudIP!=nil)&&([/ip ipsec policy get $IpSecPolicyId sa-src-address]!=$CloudIP)) do={ [/ip ipsec policy disable $IpSecPolicyId]; [/ip ipsec policy set $IpSecPolicyId sa-src-address=$CloudIP]; log warning ("[IP IPSec Policy] ---> ---> sa-src-address ---> " . $CloudIP); #log warning ("[IP IPSec Policy] ---> policy deactivated ---> new sa-src-address ---> " . $CloudIP); # , Kerio delay 30000ms; } # $action=enable, :if (([/ip ipsec policy get $IpSecPolicyId disabled]=yes)&&($action="enable")) do={ [/ip ipsec policy enable $IpSecPolicyId]; log warning ("[IP IPSec Policy] ---> "); #log warning ("[IP IPSec Policy] ---> policy activated"); # DNS- [/ip dns cache flush] } # ID set $IdList ($IdList, $IpSecPolicyId); } } return ($IdList); } # local-address # : # # $PeerID (ID VPN-); # $CloudIP (IP MikroTik DDNS) :global subCheckPeerLocalIp do={ put ($PeerID); put ($CloudIP); :if (($PeerID!="")&&($PeerID!=nil)&&($CloudIP!="")&&($CloudIP!=nil)) do={ # DDNS-IP :if ([/ip ipsec peer get $PeerID local-address]!=$CloudIP) do={ [/ip ipsec peer set $PeerID local-address=$CloudIP]; log warning ("[IP IPSec Peer] ---> local-address"); #log warning ("[IP IPSec Peer] ---> local-address changed"); } } }
/system script add dont-require-permissions=no name=scriptCheckActiveVpnServer owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon
scriptCheckActiveVpnServer :if ([:len [/system script job find script=scriptCheckActiveVpnServer]]>1) do={ :error } # scheduleStartup # , :global subCheckCloudDDNS :global subCheckPeerLocalIp :global subDisableIpSecPeers :global subEnableIpSecPeers :global subGetPoliciesByPeer :global subGetVpnServers :global subUpdateCloudDns :local CheckIP :local CheckPeer # DDNS ( ) :local CloudDnsStatus ([:put [$subCheckCloudDDNS]]) :local Exit false :local DefMikroTikSrcNet 192.168.11.0/24 :local DefKerioDstNet 192.168.77.0/24 :local DefKerioPropName KerioVPNProposal#01 :local DefKerioPolName KerioVPNPolicy :local IpSecPolicyId :local KerioName :local KerioVpnNatRuleName KerioVpnNatOut :local m :local n 1 :local PeerCount 0 :local PeerDisabled :local PingCount 3 :local PingResult :local PoliciesList :local PublicIp :local VpnServersList # DDNS , , IP- MikroTik :if ($CloudDnsStatus=0) do={ # Cloud DDNS , :log error ("[schedule CheckActiveVpnServer] ---> VPN- Cloud DDNS! (IP -> Cloud)") # :log error ("[schedule CheckActiveVpnServer] ---> to connect to the VPN server, you need to activate Cloud DDNS! (IP -> Cloud)") :error } :if ($CloudDnsStatus=1) do={ # Cloud DDNS , , ( ) :set CloudDnsStatus [:put [$subUpdateCloudDns start=false]] :if ($CloudDnsStatus="updated") do={ :set CloudDnsStatus 2 } } :if ($CloudDnsStatus=2) do { # Cloud DDNS ... # IP DDNS :set PublicIp [/ip cloud get public-address] # VPN- , ( ) :set VpnServersList ([:put [$subGetVpnServers]]) # :foreach VpnIpId in=$VpnServersList do={ :set PeerCount ($PeerCount+1) } # VPN- DDNS-IP ( , VPN- ) :while (($Exit!=true)&&$n<=$PeerCount) do={ :foreach VpnIpId in=$VpnServersList do={ # IP- VPN- :if (($VpnIpId->0)=$n) do={ :set CheckIP ($VpnIpId->1) :if ($CheckIP!="") do={ # IP :set PingResult ([:put [/ping address=$CheckIP count=$PingCount src-address=$PublicIp]]) :if ($PingResult=$PingCount) do={ :log warning ("[schedule CheckActiveVpnServer] ---> DDNS-IP ---> " . $PublicIp . " ---> VPN-IP ---> " . $CheckIP . " ---> Ping Result ---> " . $PingResult) # IP , IP- :set CheckPeer (:put [/ip ipsec peer find address=($CheckIP . "/32")]) :if ($CheckPeer!="") do={ # , src- (IP ---> Firewall ---> Address Lists), Kerio # Kerio :set KerioName [/ip ipsec peer get $CheckPeer comment] # ( , FQDN Kerio KerioName-Parameter1-...-Parameter_n :if ($KerioName!="") do={ # :set m ([find $KerioName "-"]) # KerioName :set KerioName ([pick $KerioName 0 $m]) # Firewall -> Address List ( : # Name ---> KerioName (eg srv1) # Address ---> DefMikroTikSrcNet (eg 192.168.99.0/24)) :set m [/ip firewall address-list find list=$KerioName] :set DefMikroTikSrcNet ([/ip firewall address-list get $m address]) } # ... Kerio :set IpSecPolicyId (:put [/ip ipsec policy find comment="$DefKerioPolName"]) # , # ( ) :if ($IpSecPolicyId="") do={ [/ip ipsec policy add disabled=yes dst-address=$DefKerioDstNet proposal=$DefKerioPropName sa-dst-address=$CheckIP sa-src-address=$PublicIp src-address=$DefMikroTikSrcNet tunnel=yes comment=$DefKerioPolName place-before=0] :log warning ("[schedule CheckActiveVpnServer] ---> " . $DefKerioPolName . " ---> ") #:log warning ("[schedule CheckActiveVpnServer] ---> created policy " . $DefKerioPolName . " ---> default parameters used") } else={ # , src-address, . :if ($DefMikroTikSrcNet!=[/ip ipsec policy get $IpSecPolicyId src-address]) do={ [/ip ipsec policy set $IpSecPolicyId src-address=$DefMikroTikSrcNet]; :log warning ("[schedule CheckActiveVpnServer] ---> " . $DefKerioPolName . " ---> src-address ---> " . $DefMikroTikSrcNet) #:log warning ("[schedule CheckActiveVpnServer] ---> policy " . $DefKerioPolName . " changed ---> src-address changed to ---> " . $DefMikroTikSrcNet) } } # :set m # NAT- Kerio :set m [/ip firewall nat find comment=$KerioVpnNatRuleName] :if ($m!="") do={ # src-address ipsec, Kerio :if ([/ip firewall nat get $m to-addresses]!=$DefMikroTikSrcNet) do={ [/ip firewall nat set $m to-addresses $DefMikroTikSrcNet] :log warning ("[IP Firewall NAT] ---> ---> " . $KerioVpnNatRuleName) #:log warning ("[IP Firewall NAT] ---> netmap rule changed ---> " . $KerioVpnNatRuleName) } } # ... local-address IP MikroTik, ( ) :put [$subCheckPeerLocalIp PeerID=$CheckPeer CloudIP=$PublicIp] # ... :set PeerDisabled ([/ip ipsec peer get $CheckPeer disabled]) :if ($PeerDisabled=true) do={ # ... # ( ) :set PoliciesList ([:put [$subDisableIpSecPeers]]) # VPN- ( ) :put [$subEnableIpSecPeers PeerID=$CheckPeer PolIdList=$PoliciesList CloudIP=$PublicIp SrcIP=$DefMikroTikSrcNet] } else={ # ... # , ( ) :set PoliciesList ([:put [$subGetPoliciesByPeer PeerIP=$CheckIP CloudIP=$PublicIp SrcIP=$DefMikroTikSrcNet action="enable"]]) } :set Exit true } } else={ :log error ("[schedule CheckActiveVpnServer] ---> DDNS-IP ---> " . $PublicIp . " ---> VPN-IP ---> " . $CheckIP . " ---> Ping Result ---> " . $PingResult) } } } } :set n ($n+1) } }
/system scheduler add interval=1h name=scheduleCheckIPSecSADstAddrFromDNS on-event=\ "/system script run scriptSetIPSecSADstAddrFromDNS" policy=read,write \ start-date=oct/30/2017 start-time=00:10:00 add name=scheduleStartup on-event=":global StartupScript true :global RepeatRun false /system script run scriptFunctionsList" policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ start-time=startup add interval=5m name=scheduleCheckActiveVpnServer on-event=\ "/system script run scriptCheckActiveVpnServer" policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ start-date=nov/29/2017 start-time=00:00:00
scheduleStartup :global StartupScript true :global RepeatRun false /system script run scriptFunctionsList
scheduleCheckIPSecSADstAddrFromDNS /system script run scriptSetIPSecSADstAddrFromDNS
scheduleCheckActiveVpnServer /system script run scriptCheckActiveVpnServer
:MikroTik DNS- , Kerio Control, MikroTik, IP ---> DNS ---> Static…
- !
, …
Vielen Dank für Ihre Aufmerksamkeit!
ps
:- « ?:»;
- ;
- IP- , ISP, ;
- « :»;