Was brauche ich, um einen virtuellen IPSec-Adapter hinzuzufügen?

8

Ich versuche, eine IPsec-Verbindung manuell über die Konsole mit iproute2 einzurichten. Was ich brauche, ist eine virtuelle Schnittstelle (bestenfalls könnte auch eine virtuelle IP-Adresse ausreichen), die IPsec alles Eingehende transformiert (ESP / TUNNEL-MODUS) und an eth0 (auf meinem System namens em1) übergibt. Auf der anderen Seite entnimmt ein Peer das Paket von seinem eigenen Eth-Entschlüsseler und übergibt es einer virtuellen Schnittstelle auf der anderen Seite. Ich möchte also einen "normalen" IPSec-Tunnel einrichten.

Ich habe kein Problem mit der Richtlinie und der Sicherheitszuordnung, und die Konfiguration war einfach unter Verwendung der normalen Ethernet-Adressen der Systeme im Transportmodus, d. H.

ip xfrm policy add src 198.51.100.1 dst 198.51.100.2 dir out tmpl proto esp
ip xfrm state  add src 198.51.100.1 dst 198.51.100.2 spi 24501 proto esp enc des 0xAABBCCDDEEFF0011
ip xfrm state  add src 198.51.100.2 dst 198.51.100.1 spi 24501 proto esp enc des 0xAABBCCDDEEFF0022

und eine gegnerische Konfiguration auf dem Peer funktioniert ganz gut.

Jetzt habe ich versucht, eine virtuelle IP und eine Route zum anderen System mit einzurichten

ip address add 10.0.0.0 dev em1
ip route add to 10.0.0.2 via 10.0.0.1

und wieder umgekehrt auf der anderen Seite. Das funktioniert wieder gut. Dann habe ich die IPSec-Richtlinie und SA auf geändert

ip xfrm policy add src 10.0.0.1 dst 10.0.0.2 dir out tmpl src 198.51.100.1 dst 198.51.100.2 proto esp mode tunnel
ip xfrm state  add src 10.0.0.1 dst 10.0.0.2 spi 24501 proto esp enc des 0xAABBCCDDEEFF0011
ip xfrm state  add src 10.0.0.2 dst 10.0.0.1 spi 24501 proto esp enc des 0xAABBCCDDEEFF0022

Wenn ich jetzt versuche, tcpingden Peer zu erreichen, erhalte ich keine Antwort und setkey -PDsage mir, dass die Sicherheitsrichtlinie nie ausgelöst wurde. Jetzt versuche ich, eine funktionierende virtuelle Schnittstelle für den IPSec-Tunnel zu erstellen, aber ich weiß nicht, wie ich sie an die physische Schnittstelle binden soll und wie ich den Kernel dazu bringe, die Sicherheitsrichtlinie anzuwenden.

Für mich ist es wichtig, dass ich dies mit iproute2 lösen kann, da ich dies letztendlich aus einem C ++ - Programm heraus tun möchte und ich bereits die entsprechenden Klassen habe, die Netlink-Befehle im gleichen Stil wie der ipBefehl löschen (was ich damit machen kann ip, ich kann auch innerhalb meines Codes tun). Tatsächlich funktioniert der erste Teil bereits in meinem Programm und ich möchte im Übrigen dieselben Netlink-API-Funktionen verwenden.

Update Ich habe herausgefunden, dass der Status mit den Tunneladressen eingerichtet werden muss, damit die funktionierenden SAs funktionieren

ip xfrm state  add src 10.0.0.1 dst 10.0.0.2 spi 24501 proto esp enc des 0xAABBCCDDEEFF0011
ip xfrm state  add src 10.0.0.2 dst 10.0.0.1 spi 24501 proto esp enc des 0xAABBCCDDEEFF0022

während die Politik gleich bleibt. Jetzt wird die Richtlinie ausgelöst und ich sehe ein transformiertes Paket an einem Sniffing-Port. Auch iptables auf dem anderen Computer haben das Paket blockiert und ich habe es zum Testen deaktiviert.

Die eine Richtung scheint jetzt zu funktionieren, aber ich bekomme immer noch keine Antwort. Ich weiß auch nicht, ob das Problem noch irgendwie die Transformation, das Routing oder der Schnittstellenteil ist. Meine bevorzugte Lösung wäre immer noch eine mit einer virtuellen Schnittstelle, aber ich habe keine Ahnung, wie ich sie an eine physische binden soll, geschweige denn, ob die Transformation so funktionieren würde.

Marste
quelle

Antworten:

1

Normalerweise verwenden Sie einen Tunnel, der mit erstellt wurde ip tunnel add. Das Tunnelgerät bietet Ihnen ein virtuelles Gerät, das IP-Pakete in anderen IP-Paketen kapselt. Dann kann das gekapselte Paket mit IPsec verschlüsselt werden.

Sie können beispielsweise einen GRE- Tunnel erstellen, indem Sie:

ip tunnel add mytunnel mode gre remote 198.51.100.2
ip addr add 10.0.0.1 peer 10.0.0.2/31 dev mytunnel

Anschließend können Sie IPSec so konfigurieren, dass GRE-Pakete verschlüsselt werden (entweder im Allgemeinen oder nur zu diesem Ziel).

olav
quelle