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
MikroTik: CCR 1009, RouterOS 6.46.5
- Eth0 10.0.0.2/30 interne IP vom Anbieter. Externe IP ist dynamisch und NAT vom Anbieter.
- ipip-ipsec0 192.168.0.2/30 wird unser Tunnel sein
Wir werden den IPsec Tunnel auf der Linux-Maschine mit racoon aufbauen. Ich werde die Einzelheiten nicht beschreiben, es gibt ein gutes u .
Notwendige Pakete installieren:
sudo install racoon ipsec-toolsWir konfigurieren racoon, das bedingt als ipsec Server fungieren wird. Da MikroTik im Hauptmodus keinen zusätzlichen Client-Identifikator übertragen kann und die externe IP-Adresse, über die er sich mit Linux verbindet, dynamisch ist, kann ein preshared key (Passwort-Authentifizierung) nicht verwendet werden, da das Passwort entweder mit der IP-Adresse des verbindenden Hosts oder mit dem Identifikator übereinstimmen muss.
Wir werden die Authentifizierung über RSA-Schlüssel verwenden.
Der Daemon racoon verwendet Schlüssel im RSA-Format, während Mikrotik im PEM-Format arbeitet. Wenn wir die Schlüssel mit dem mit racoon gelieferten Tool plainrsa-gen generieren, können wir den öffentlichen Schlüssel für Mikrotik nicht in das PEM-Format konvertieren – es konvertiert nur in eine Richtung: von PEM nach RSA. Der mit plainrsa-gen erzeugte Schlüssel konnte von weder openssl noch ssh-keygen gelesen werden, daher kann auch mit diesen Tools keine Konvertierung durchgeführt werden.
Wir generieren den PEM-Schlüssel mit openssl und konvertieren ihn anschließend für racoon mit plainrsa-gen:
# Генерируем ключ
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 speichern wir im Ordner: /etc/racoon/certs/server. Vergessen Sie nicht, den Besitzer auf den Benutzer zu setzen, unter dessen Namen der Daemon racoon ausgeführt wird (normalerweise root), und die Berechtigungen auf 600 zu setzen.
Die Konfiguration von Mikrotik werde ich beim Anschluss über WinBox beschreiben.
Den Schlüssel server-name.pub.pem laden wir in Mikrotik hoch: Menü „Dateien“ — „Hochladen“.
Wir öffnen den Bereich „IP“ — „IP sec“ — Tab „Schlüssel“. Jetzt generieren wir die Schlüssel — auf die Schaltfläche „Schlüssel generieren“, dann exportieren wir den öffentlichen Schlüssel von Mikrotik mit „Öffentlichen Schlüssel exportieren“, den Sie im Bereich „Dateien“ herunterladen können, indem Sie mit der rechten Maustaste auf die Datei klicken — „Herunterladen“.
Wir importieren den öffentlichen Schlüssel von racoon, „Importieren“, im Dropdown-Menü des Feldes „Dateiname“ suchen wir die zuvor hochgeladene 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 legen, dabei Eigentümer und Berechtigungen nicht vergessen.
Racoon-Konfiguration mit Kommentaren: /etc/racoon/racoon.conf
log info; # Protokollebene, verwenden Sie Debug oder Debug2 für die Fehlersuche.
listen {
isakmp 1.1.1.1 [500]; # Adresse und Port, an dem der Dienst lauschen wird.
isakmp_natt 1.1.1.1 [4500]; # Adresse und Port, an dem der Dienst für Clients hinter NAT lauschen wird.
strict_address; # Führen Sie eine verpflichtende Überprüfung der Bindung an die oben genannten IPs durch.
}
path certificate "/etc/racoon/certs"; # Pfad zum Ordner mit den Zertifikaten.
remote anonymous { # Abschnitt, der die Parameter für die Zusammenarbeit des Dienstes mit ISAKMP und den Modusverhandlungen mit den verbundenen Hosts festlegt. Da die IP, von der Mikrotik sich verbindet, dynamisch ist, verwenden wir anonymous, was Verbindungen von jeder Adresse erlaubt. Wenn die IP der Hosts statisch ist, kann eine bestimmte Adresse und ein bestimmter Port angegeben werden.
passive on; # Stellt den "Server"-Modus des Dienstes ein, er wird keine Verbindungen initiieren.
nat_traversal on; # Aktiviert die Verwendung des NAT-T-Modus für Clients, wenn sie sich hinter NAT befinden.
exchange_mode main; # Modus für den Austausch von Verbindungsparametern, in diesem Fall - die Vereinbarung.
my_identifier address 1.1.1.1; # Identifizieren Sie unseren Linux-Host nach seiner 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 von Mikrotik.
proposal_check claim; # Modus zur Vereinbarung der ISAKMP-Tunnelparameter. Racoon nutzt die Werte des sich verbindenden Hosts (Initiators) für die Vertragslaufzeit und Schlüssellänge, wenn dessen Laufzeit länger oder seine Schlüssellänge kürzer ist als die des Initiators. Wenn die Laufzeit kürzer ist als die des Initiators, verwendet Racoon seine eigenen Werte für die Laufzeit und sendet die Nachricht RESPONDER-LIFETIME.
proposal { # Parameter des ISAKMP-Tunnels.
encryption_algorithm aes; # Verschlüsselungsmethode des ISAKMP-Tunnels.
hash_algorithm sha512; # Hash-Algorithmus, der für den ISAKMP-Tunnel verwendet wird.
authentication_method rsasig; # Authentifizierungsmodus für den ISAKMP-Tunnel - basierend auf RSA-Schlüsseln.
dh_group modp2048; # Schlüssellänge für den Diffie-Hellman-Algorithmus bei der Vereinbarung des ISAKMP-Tunnels.
lifetime time 86400 sec; # Gültigkeitsdauer der Sitzung.
}
generate_policy on; # Automatische Erstellung von ESP-Tunneln aus der Anfrage, die vom verbundenden Host eingegangen ist.
}
sainfo anonymous { # Parameter für ESP-Tunnel, anonymous - angegebene Parameter werden als Standardparameter verwendet. Für verschiedene Clients, Ports, Protokolle können unterschiedliche Parameter festgelegt werden, das Mapping erfolgt nach IP-Adressen, Ports, 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; # Übertragen Sie komprimierte Daten, der Komprimierungsalgorithmus Vorschlag ist nur einer.
}
Mikrotik-Konfiguration
Zurück zum Bereich "IP" — "IPsec"
Tab "Profile"
Parameter
Bedeutung
Name
Nach Ihrem Ermessen (standardmäßig default)
Hash-Algorithmus
sha512
Verschlüsselungsalgorithmus
aes-128
DH-Gruppe
modp2048
Proposal_check
beanspruchen
Lebensdauer
1d 00:00:00
NAT Traversal
true (Häkchen setzen)
DPD
120
DPD maximale Fehleranzahl
5
Tab "Peers"
Parameter
Bedeutung
Name
Nach Ihrem Ermessen (weiter als MyPeer)
Adresse
1.1.1.1 (IP der Linux-Maschine)
Lokale Adresse
10.0.0.2 (IP des WAN-Interfaces des Mikrotik)
Profil
default
Austauschmodus
main
Passiv
false
INITIAL_CONTACT senden
true
Tab "Proposal"
Parameter
Bedeutung
Name
Nach Ihrem Ermessen (weiter als MyPeerProposal)
Auth. Algorithmen
sha512
Verschlüsselungsalgorithmen
aes-128-cbc
Lebensdauer
08:00:00
PFS-Gruppe
modp2048
Tab "Identitäten"
Parameter
Bedeutung
Peer
MyPeer
Auth. Methode
rsa key
Schlüssel
mikrotik.privet.key
Remote Key
server-name.pub.pem
Richtlinienvorlagen-Gruppe
default
Notrack Chain
leer
Mein ID-Typ
auto
Remote ID-Typ
auto
Übereinstimmung Nach
Remote-ID
Moduskonfiguration
leer
Richtlinie generieren
nein
Tab "Policies — General"
Parameter
Bedeutung
Peer
MyPeer
Tunnel
true
Src. Adresse
192.168.0.0/30
Zieladresse
192.168.0.0/30
Protokoll
255 (alle)
Vorlage
false
Tab "Policies — Action"
Parameter
Bedeutung
Aktionen
encrypt
Ebene
erforderlich
IPsec-Protokolle
esp
Vorschlag
MyPeerProposal
Wahrscheinlich haben Sie, genau wie ich, auf dem WAN-Interface snat/masquerade konfiguriert. Diese Regel muss korrigiert werden, damit die ausgehenden IPsec-Pakete in unseren Tunnel geleitet werden:
Gehen Sie zum Bereich "IP" — "Firewall".
Tab "NAT", öffnen Sie unsere snat/masquerade-Regel.
Tab "Erweitert"
Parameter
Bedeutung
IPsec-Richtlinie
out: none
Den Racoon-Daemon neu starten
sudo systemctl restart racoonWenn der 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 racoon-Dämon wird beim Starten des Betriebssystems vor dem Hochfahren der Netzwerkinterfaces aktiviert. In der Sektion listen haben wir die Option strict_address angegeben, daher muss sie in die Datei des systemd-Units racoon hinzugefügt werden.
/lib/systemd/system/racoon.service, в секцию [Unit], строку After=network.target.
Jetzt sollten unsere IPsec-Tunnel aktiv sein. Schauen wir uns 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 "NAT-IP, über das sich Mikrotik verbindet"
proto esp reqid 0 mode tunnel
src 192.168.255.0/30 dst 192.168.255.0/30
dir fwd priority 2147483648
tmpl src "NAT-IP, über das sich Mikrotik verbindet" 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 "NAT-IP, über das sich Mikrotik verbindet" dst 1.1.1.1
proto esp reqid 0 mode tunnelWenn die Tunnel nicht aktiviert sind, überprüfen Sie syslog oder verwenden Sie journalctl -u racoon.
Jetzt müssen die L3-Schnittstellen konfiguriert werden, um den Traffic zu routen. Es gibt verschiedene Optionen, wir werden IPIP verwenden, da dies von Mikrotik unterstützt wird. Ich würde VTI nutzen, aber leider wurde es von Mikrotik bisher nicht implementiert. Im Gegensatz zu IPIP kann es zusätzlich Multicast kapseln und mit fwmark-Tags versehen, um Pakete zu filtern, was in iptables und iproute2 (policy-basiertes Routing) möglich ist. Wenn maximale Funktionalität erforderlich ist, könnte beispielsweise GRE in Betracht gezogen werden. Aber man sollte nicht vergessen, dass zusätzliche Funktionalität mit höherem Overhead verbunden ist.
Eine gute Übersicht über Tunnel-Schnittstellen können Sie hier einsehen .
Auf 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 Mikrotik hinzugefügt werden
sudo ip route add A.B.C.D/Prefix via 192.168.255.2Damit unsere Schnittstelle und Routen nach einem Neustart aktiv sind, muss die Schnittstelle in /etc/network/interfaces beschrieben werden und Routen dort im post-up hinzugefügt werden. Alternativ kann alles in einer Datei, zum Beispiel /etc/ipip-ipsec0.conf, festgelegt werden und über post-up aufgerufen werden. Vergessen Sie nicht, den Dateiinhaber, die Berechtigungen zu beachten und sie ausführbar zu machen.
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:
Eintrag «IP Tunnel» — «Allgemein»
Parameter
Bedeutung
Name
Nach Ihrem Ermessen (weiterer Verlauf IPIP-IPsec0)
MTU
1480 (wenn nicht angegeben, beginnt Mikrotik, die MTU auf 68 zu reduzieren)
Lokale Adresse
192.168.0.2
Remote Adresse
192.168.0.1
Ipsec Geheimnis
Deaktivieren Sie das Feld (ansonsten wird ein neuer Peer erstellt)
Keepalive
Deaktivieren Sie das Feld (ansonsten wird das Interface ständig abgeschaltet, da Mikrotik ein eigenes Format dieser Pakete hat, das nicht mit Linux funktioniert)
DSCP
erben
Nicht Fragmentieren
nein
Clamp TCP MSS
true
Schneller Pfad erlauben
true
Abschnitt «IP» — «Adressen», fügen Sie die Adresse hinzu:
Parameter
Bedeutung
Adresse
192.168.0.2/30
Schnittstelle
IPIP-IPsec0
Jetzt können Routen im Netzwerk hinter dem Linux-Server hinzugefügt werden. Beim Hinzufügen der Route wird das Gateway unser IPIP-IPsec0 Interface sein.
PS
Da unser Linux-Server als Transit fungiert, macht es Sinn, den Parameter Clamp TCP MSS für IPIP-Interfaces festzulegen:
Erstellen Sie 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
Im Netzwerk hinter Mikrotik läuft bei mir nginx (IP 10.10.10.1). Um es aus dem Internet zugänglich zu machen, fügen wir in /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 für Pakete mit der Quelladresse 10.10.10.1 und den Ports 80, 443 hinzugefügt werden, mit dem Ziel 192.168.0.1.
# Ebenso funktioniert auf Linux der OpenVPN-Server 172.16.0.1/24. Den Clients, die sich darüber verbinden, gewähren wir Internetzugang.
-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.
Gesundheit!
Quelle: habr.com
