Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generic x86_64)
- Eth0 1.1.1.1/32 externe IP
- ipip-ipsec0 192.168.0.1/30 wird unser Tunnel sein
Miktoik: CCR 1009, RouterOS 6.46.5
- Eth0 10.0.0.2/30 interne IP vom Provider. Externe IP des Providers ist dynamisch.
- ipip-ipsec0 192.168.0.2/30 wird unser Tunnel sein
Wir werden den IPsec-Tunnel auf der Linux-Maschine mit racoon einrichten. Ich werde die Details nicht beschreiben, es gibt eine gute arbeiten .
Wir installieren die benötigten Pakete:
sudo install racoon ipsec-toolsWir konfigurieren racoon, das im Wesentlichen als IPsec-Server fungiert. Da Mikrotik im Hauptmodus keine zusätzliche Client-ID übertragen kann und die externe IP-Adresse, über die es sich mit Linux verbindet, dynamisch ist, ist die Nutzung eines Preshared Keys (Passwortauthentifizierung) nicht möglich, da das Passwort entweder mit der IP-Adresse des verbindenden Hosts oder mit der ID übereinstimmen muss.
Wir werden die Authentifizierung mittels RSA-Schlüsseln verwenden.
Der Daemon racoon verwendet Schlüssel im RSA-Format, während Mikrotik das PEM-Format verwendet. Wenn Schlüssel mit dem plainrsa-gen-Tool generiert werden, das mit racoon geliefert wird, ist es nicht möglich, den öffentlichen Schlüssel für Mikrotik mit diesem Tool in das PEM-Format zu konvertieren – es konvertiert nur in eine Richtung: PEM in RSA. Der mit plainrsa-gen generierte Schlüssel konnte weder von openssl noch von ssh-keygen gelesen werden, weshalb auch diese Tools keine Konvertierung durchführen können.
Wir werden einen PEM-Schlüssel mit openssl generieren und dann mit plainrsa-gen für racoon konvertieren:
# Генерируем ключ
openssl genrsa -out server-name.pem 1024
# Извлекаем публичный ключ
openssl rsa -in server-name.pem -pubout > server-name.pub.pem
# Конвертируем
plainrsa-gen -i server-name.pem -f server-name.privet.key
plainrsa-gen -i server-name.pub.pem -f server-name.pub.keyDie erhaltenen Schlüssel legen wir in den Ordner: /etc/racoon/certs/server. Wir vergessen nicht, den Besitzer auf den Benutzer festzulegen, unter dessen Namen der Daemon racoon läuft (normalerweise root) und die Berechtigungen auf 600 zu setzen.
Die Mikrotik-Konfiguration werde ich beim Verbinden über WinBox beschreiben.
Den Schlüssel server-name.pub.pem laden wir in Mikrotik hoch: Menü „Dateien“ — „Hochladen“.
Wir öffnen den Bereich „IP“ — „IPsec“ — Tab „Schlüssel“. Jetzt generieren wir die Schlüssel — Button „Schlüssel generieren“, dann exportieren wir den öffentlichen Schlüssel von Mikrotik „Export Pub. Key“, den wir aus dem Bereich „Dateien“ herunterladen können, mit der rechten Maustaste auf die Datei — „Download“.
Wir importieren den öffentlichen Schlüssel von racoon, „Import“, im Dropdown-Menü des Feldes „Dateiname“ suchen wir den zuvor hochgeladenen server-name.pub.pem.
Der öffentliche Schlüssel von Mikrotik muss konvertiert werden
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.keyund in den Ordner /etc/racoon/certs gelegt werden, ohne den Besitzer und die Berechtigungen zu vergessen.
Konfiguration von racoon mit Kommentaren: /etc/racoon/racoon.conf
log info; # Protokollierungsstufe, verwenden Sie Debug oder Debug2 während der Fehlersuche.
listen {
isakmp 1.1.1.1 [500]; # Adresse und Port, an dem der Daemon hören wird.
isakmp_natt 1.1.1.1 [4500]; # Adresse und Port, an dem der Daemon für Clients hinter NAT hören wird.
strict_address; # Führen Sie eine obligatorische Prüfung der Bindung an die oben angegebenen IP-Adressen durch.
}
path certificate "/etc/racoon/certs"; # Pfad zum Ordner mit Zertifikaten.
remote anonymous { # Abschnitt, der die Parameter für den Betrieb des Daemons mit ISAKMP und Aushandlung von Modi mit sich verbindenden Hosts festlegt. Da die IP, von der sich Mikrotik verbindet, dynamisch ist, verwenden wir anonymous, was die Verbindung von jeder Adresse aus erlaubt. Wenn die IP der Hosts statisch ist, kann eine bestimmte Adresse und ein Port angegeben werden.
passive on; # Setzt den "Servermodus" des Daemons, er wird keine Verbindungen initiieren.
nat_traversal on; # Aktiviert die Verwendung des NAT-T-Mode für Clients, wenn sie hinter NAT sind.
exchange_mode main; # Aushandlungsmodus für die Verbindung, in diesem Fall - Aushandlung.
my_identifier address 1.1.1.1; # Identifizieren Sie unseren Linux-Host über seine IP-Adresse.
certificate_type plain_rsa "server/server-name.priv.key"; # Privater Schlüssel des Servers.
peers_certfile plain_rsa "mikrotik.pub.key"; # Öffentlicher Schlüssel Mikrotik.
proposal_check claim; # Aushandlungsmodus für die ISAKMP-Tunnelparameter. Racoon verwendet die Werte des sich verbindenden Hosts (Initiators) für die Sitzungsdauer und die Schlüssellänge, wenn seine Sitzungsdauer größer ist oder die Schlüssellänge kürzer ist als die des Initiators. Wenn die Sitzungsdauer kürzer ist als die des Initiators, verwendet Racoon seinen eigenen Wert für die Sitzungsdauer und sendet die Nachricht RESPONDER-LIFETIME.
proposal { # ISAKMP-Tunnelparameter.
encryption_algorithm aes; # Verschlüsselungsmethode des ISAKMP-Tunnels.
hash_algorithm sha512; # Hash-Algorithmus, der für den ISAKMP-Tunnel verwendet wird.
authentication_method rsasig; # Authentifizierungsmethode für den ISAKMP-Tunnel - nach RSA-Schlüsseln.
dh_group modp2048; # Schlüssellänge für den Diffie-Hellman-Algorithmus bei der Aushandlung des ISAKMP-Tunnels.
lifetime time 86400 sec; # Sitzungsdauer.
}
generate_policy on; # Automatische Erstellung von ESP-Tunneln aus Anfragen des sich verbindenden Hosts.
}
sainfo anonymous { # Parameter für ESP-Tunnel, anonymous - die angegebenen Parameter werden als Standardparameter verwendet. Für verschiedene Clients, Ports und Protokolle können unterschiedliche Parameter festgelegt werden, die Zuordnung erfolgt anhand von IP-Adressen, Ports und Protokollen.
pfs_group modp2048; # Schlüssellänge für den Diffie-Hellman-Algorithmus für ESP-Tunnel.
lifetime time 28800 sec; # Gültigkeitsdauer der ESP-Tunnel.
encryption_algorithm aes; # Verschlüsselungsmethode der ESP-Tunnel.
authentication_algorithm hmac_sha512; # Hash-Algorithmus, der für die Authentifizierung der ESP-Tunnel verwendet wird.
compression_algorithm deflate; # Komprimieren von übertragenen Daten, nur ein Kompressionsalgorithmus wird angeboten.
}
Mikrotik-Konfiguration
Gehen wir zurück zum Abschnitt "IP" — "IPsec"
Registerkarte "Profile"
Parameter
Wert
Name
Nach Belieben (Standard ist default)
Hash-Algorithmus
sha512
Verschlüsselungsalgorithmus
aes-128
DH-Gruppe
modp2048
Proposhal_check
Antrag
Lebensdauer
1d 00:00:00
NAT Traversal
true (Häkchen setzen)
DPD
120
Maximale DPD-Fehler
5
Registerkarte "Peers"
Parameter
Wert
Name
Nach Belieben (weiter MyPeer)
Adresse
1.1.1.1 (IP der Linux-Maschine)
Lokale Adresse
10.0.0.2 (IP des WAN-Interfaces von Mikrotik)
Profil
default
Austauschmodus
main
Passiv
false
INITIAL_CONTACT senden
true
Registerkarte "Vorschlag"
Parameter
Wert
Name
Nach Belieben (weiter MyPeerProposal)
Auth. Algorithmen
sha512
Verschlüsselungsalgorithmen
aes-128-cbc
Lebensdauer
08:00:00
PFS-Gruppe
modp2048
Registerkarte "Identitäten"
Parameter
Wert
Peer
MyPeer
Auth. Methode
rsa key
Schlüssel
mikrotik.privet.key
Remote Key
server-name.pub.pem
Policy-Template-Gruppe
default
Nichtverfolgen-Kette
leer
Mein ID-Typ
auto
Remote ID-Typ
auto
Übereinstimmung nach
remote id
Modus-Konfiguration
leer
Richtlinie generieren
nein
Registerkarte "Richtlinien — Allgemein"
Parameter
Wert
Peer
MyPeer
Tunnel
true
Src. Adresse
192.168.0.0/30
Dest. Adresse
192.168.0.0/30
Protokoll
255 (alle)
Vorlage
false
Registerkarte "Richtlinien — Aktion"
Parameter
Wert
Aktionen
encrypt
Level
erforderlich
IPsec-Protokolle
esp
Vorschlag
MyPeerProposal
Wahrscheinlich haben Sie, wie ich, auf dem WAN-Interface snat/masquerade konfiguriert. Diese Regel muss angepasst werden, damit die ausgehenden IPsec-Pakete in unseren Tunnel geleitet werden:
Gehen Sie zu "IP" — "Firewall".
Registerkarte "NAT", öffnen Sie unsere Regel snat/masquerade.
Registerkarte "Erweitert"
Parameter
Wert
IPsec-Richtlinie
out: none
Starten Sie den Daemon racoon neu
sudo systemctl restart racoonWenn racoon beim Neustart nicht startet, liegt ein Fehler in der Konfiguration vor. Im Syslog gibt racoon Informationen über die Zeilennummer aus, in der der Fehler gefunden wurde.
Der Daemon racoon wird beim Start des Betriebssystems vor dem Hochfahren der Netzwerkschnittstellen gestartet, und wir haben in der Sektion listen die Option strict_address angegeben. Es ist notwendig, dies in die Datei des systemd-Units von racoon einzufügen.
/lib/systemd/system/racoon.service, в секцию [Unit], строку After=network.target.
Jetzt sollten unsere IPsec-Tunnel aktiv sein, sehen Sie sich die Ausgabe an:
sudo ip xfrm policy
src 192.168.255.0/30 dst 192.168.255.0/30
dir out priority 2147483648
tmpl src 1.1.1.1 dst "IP NAT, über den Mikrotik verbunden ist"
proto esp reqid 0 mode tunnel
src 192.168.255.0/30 dst 192.168.255.0/30
dir fwd priority 2147483648
tmpl src "IP NAT, über den Mikrotik verbunden ist" dst 1.1.1.1
proto esp reqid 0 mode tunnel
src 192.168.255.0/30 dst 192.168.255.0/30
dir in priority 2147483648
tmpl src "IP NAT, über den Mikrotik verbunden ist" dst 1.1.1.1
proto esp reqid 0 mode tunnelWenn die Tunnel nicht aktiv sind, schauen Sie sich das Syslog an oder verwenden Sie journalctl -u racoon.
Jetzt müssen die L3-Schnittstellen konfiguriert werden, damit der Datenverkehr geroutet werden kann. Es gibt verschiedene Optionen, wir werden IPIP verwenden, da Mikrotik dies unterstützt. Ich hätte VTI verwendet, aber leider ist es bei Mikrotik bisher nicht implementiert worden. IPIP unterscheidet sich dadurch, dass es zusätzlich Multicast kapseln und Markierungen (fwmark) auf die Pakete setzen kann, mit denen sie in iptables und iproute2 (policy-basiertes Routing) gefiltert werden können. Wenn maximale Funktionalität erforderlich ist, dann zum Beispiel GRE. Aber man sollte nicht vergessen, dass wir für die zusätzliche Funktionalität einen hohen Overhead bezahlen.
Eine Übersetzung einer guten Übersicht über Tunnel-Schnittstellen kann man sich ansehen .
Unter Linux:
# Создаем интерфейс
sudo ip tunnel add ipip-ipsec0 local 192.168.255.1 remote 192.168.255.2 mode ipip
# Активируем
sudo ip link set ipip-ipsec0 up
# Назначаем адрес
sudo ip addr add 192.168.255.1/30 dev ipip-ipsec0Jetzt können Routen für Netzwerke hinter dem Mikrotik hinzugefügt werden
sudo ip route add A.B.C.D/Prefix via 192.168.255.2Damit unser Schnittstelle und die Routen nach einem Neustart aktiviert werden, muss die Schnittstelle in /etc/network/interfaces beschrieben werden und dort im post-up die Routen hinzugefügt werden, oder alles in einer Datei, z.B. /etc/ipip-ipsec0.conf, geschrieben werden und diese über post-up aufgerufen werden. Vergessen Sie nicht, den Besitzer der Datei, die Berechtigungen und dass sie ausführbar gemacht wird.
Unter dem Cut ein Beispiel für eine Datei
#!/bin/bash
ip tunnel add ipip-ipsec0 local 192.168.255.1 remote 192.168.255.2 mode ipip
ip link set ipip-ipsec0 up
ip addr add 192.168.255.1/30 dev ipip-ipsec0
ip route add A.B.C.D/Prefix via 192.168.255.2Auf Mikrotik:
Bereich 'Interfaces', neuen Schnittstelle 'IP tunnel' hinzufügen:
Registerkarte 'IP tunnel' - 'Allgemein'
Parameter
Wert
Name
Ihrem Ermessen überlassen (weiteres IPIP-IPsec0)
MTU
1480 (wenn nicht angegeben, verringert Mikrotik MTU auf 68)
Lokale Adresse
192.168.0.2
Remote Adresse
192.168.0.1
Ipsec Geheimnis
Deaktivieren Sie das Feld (sonst wird ein neuer Peer erstellt)
Keepalive
Deaktivieren Sie das Feld (ansonsten wird das Interface ständig abgeschaltet, da Mikrotik ein eigenes Format für diese Pakete hat und es mit Linux nicht funktioniert)
DSCP
erben
Nicht fragmentieren
nein
TCP MSS klemmen
true
Schnellen Pfad erlauben
true
Bereich 'IP' - 'Adressen', Adresse hinzufügen:
Parameter
Wert
Adresse
192.168.0.2/30
Schnittstelle
IPIP-IPsec0
Jetzt können Routen zu Netzwerken hinter der Linux-Maschine hinzugefügt werden. Bei der Hinzufügung einer Route wird der Gateway unser IPIP-IPsec0 Interface sein.
PS
Da unser Linux-Server ein Transit-Server ist, macht es Sinn, den Parameter 'TCP MSS klemmen' für IPIP-Schnittstellen festzulegen:
Wir erstellen die Datei /etc/iptables.conf mit folgendem Inhalt:
*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMITund in /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf
Hinter dem Mikrotik funktioniert bei mir nginx (ip 10.10.10.1), machen wir es aus dem Internet zugänglich, fügen wir zu /etc/iptables.conf hinzu:
*nat
-A PREROUTING -d 1.1.1.1/32 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.10.10.1
#Auf Mikrotik muss in der Mangle-Tabelle eine Route mit der Zieladresse 192.168.0.1 für Pakete mit der Quelladresse 10.10.10.1 und den Ports 80, 443 hinzugefügt werden.
# Außerdem läuft auf Linux ein OpenVPN-Server 172.16.0.1/24, für Clients, die sich mit ihm als Gateway verbinden, gewähren wir Zugang zum Internet
-A POSTROUTING -s 172.16.0.0/24 -o eth0 -j SNAT --to-source 1.1.1.1
COMMIT Vergessen Sie nicht, die entsprechenden Berechtigungen in iptables hinzuzufügen, wenn Sie Paketfilter aktiviert haben.
Bleiben Sie gesund!
Quelle: habr.com
