De quoi ai-je besoin pour ajouter un adaptateur IPsec virtuel?

8

J'essaie de configurer une connexion IPsec manuellement à partir de la console avec iproute2. Ce dont j'ai besoin, c'est d'une interface virtuelle (au mieux, une adresse IP virtuelle pourrait également être suffisante) qui transforme IPsec en entrant tout (MODE ESP / TUNNEL) et la remet à eth0 (sur mon système appelé em1). Sur l'autre ensemble, un pair prend le paquet de son propre eth le déchiffre et le remet à une interface virtuelle de l'autre côté. Je veux donc établir un tunnel IPsec "normal".

Je n'ai aucun problème avec la politique et SA, et la configuration a été facile en utilisant les adresses Ethernet normales des systèmes en mode transport, c'est-à-dire

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

et une configuration d'adversaire sur le pair fonctionne très bien.

Maintenant, j'ai essayé de configurer une adresse IP virtuelle et une route vers l'autre système avec

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

et vice versa de l'autre côté. Cela fonctionne encore bien. Ensuite, j'ai modifié la stratégie IPsec et SA pour

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

Quand j'essaie maintenant au tcpingpair, je n'obtiens aucune réponse et setkey -PDme dit que la politique de sécurité n'a jamais été déclenchée. Maintenant, j'essaie de fabriquer une interface virtuelle fonctionnelle pour gérer le tunnel IPsec, mais je ne sais pas comment le lier à l'interface physique et comment obtenir du noyau qu'il applique la politique de sécurité.

Il est vital pour moi que je puisse résoudre ce problème avec iproute2, car je veux finalement le faire à partir d'un programme C ++ et j'ai déjà les classes appropriées qui suppriment les commandes Netlink du même style que la ipcommande (ce que je peux faire avec ip, je peut également faire dans mon code). En fait, la première partie fonctionne déjà à partir de mon programme et je veux utiliser les mêmes fonctions API Netlink pour le reste.

Mise à jour J'ai compris que l'état devait être configuré avec les adresses de tunnel pour que les SA de travail soient

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

tandis que la politique reste la même. Maintenant, la politique est déclenchée et je vois un paquet transformé sur un port de reniflement. De plus, iptables sur l'autre machine a bloqué le paquet et je l'ai désactivé pour les tests.

Donc, la seule direction semble fonctionner maintenant, mais je n'ai toujours pas de réponse. Je ne sais pas non plus si le problème est encore en quelque sorte la transformation, le routage ou la partie interface. Ma solution préférée serait toujours celle comprenant une interface virtuelle, mais je n'ai aucune idée de la façon de la lier à une interface physique, et encore moins si la transformation fonctionnerait de cette façon.

Marste
la source

Réponses:

1

Normalement, vous utilisez un tunnel créé à l'aide de ip tunnel add. Le périphérique tunnel vous donne un périphérique virtuel qui encapsule les paquets IP à l'intérieur d'autres paquets IP. Ensuite, le paquet encapsulé peut être chiffré à l'aide d'IPsec.

Par exemple, vous pouvez créer un tunnel GRE en utilisant:

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

Ensuite, vous pouvez configurer IPSec pour crypter les paquets GRE (soit en général, soit uniquement vers cette destination).

olav
la source