O que eu preciso para adicionar um adaptador IPsec virtual?

8

Estou tentando configurar uma conexão IPsec manualmente a partir do console com o iproute2. O que eu preciso é de uma interface virtual (na melhor das hipóteses, um endereço IP virtual também pode ser suficiente) que IPsec-transforma tudo o que entra (ESP / TUNNEL MODE) e passa para a eth0 (no meu sistema chamado em1). Por outro lado, um colega pega o pacote de seus próprios decifradores eth e o entrega a uma interface virtual do outro lado. Então eu quero estabelecer um túnel IPsec "normal".

Não tenho nenhum problema com a política e o SA e a configuração foi fácil usando os endereços Ethernet normais dos sistemas no modo de transporte, ou seja,

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

e uma configuração adversária no par funciona muito bem.

Agora tentei configurar um IP virtual e uma rota para o outro sistema com

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

e vice versa no outro lado. Isso funciona novamente bem. Então eu alterei a política IPsec e SA para

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

Quando eu agora tento tcping o par eu não obtenho resposta e setkey -PD me diz que a política de segurança nunca foi acionada. Agora estou tentando fabricar uma interface virtual funcional para lidar com o túnel IPsec, mas não sei como vinculá-lo à interface física e como faço para que o kernel aplique a política de segurança.

É vital para mim que eu possa resolver isso com o iproute2, já que eu quero fazer isso de um programa C ++ e já tenho as classes apropriadas que descartam os comandos do Netlink do mesmo estilo que o comando ip (o que Eu posso fazer com ip , eu também posso fazer dentro do meu código). Na verdade, a primeira parte já funciona no meu programa e eu quero usar as mesmas funções da API do Netlink para o resto.

Atualizar Eu descobri que o estado precisava ser configurado com os endereços de túnel para que as SAs de trabalho fossem

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

enquanto a política permanece a mesma. Agora a política é acionada e vejo um pacote transformado em uma porta sniffing. Também o iptables na outra máquina bloqueou o pacote e eu o desativei para teste.

Então, a direção parece funcionar agora, mas ainda não recebo resposta. Eu também não sei se o problema é ainda de alguma forma a transformação, o roteamento ou a parte da interface. Minha solução preferida ainda seria uma incluindo uma interface virtual, mas não tenho a menor ideia de como vinculá-la a uma interface física, muito menos se a transformação funcionasse dessa maneira.

    
por Marste 05.12.2013 / 18:56

1 resposta

1

Normalmente, o que você usa é um túnel, criado usando ip tunnel add . O dispositivo de túnel fornece um dispositivo virtual que encapsula pacotes IP dentro de outros pacotes IP. Em seguida, o pacote encapsulado pode ser criptografado usando IPsec.

Por exemplo, você pode criar um túnel GRE usando:

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

Em seguida, você pode configurar o IPSec para criptografar pacotes do GRE (em geral ou apenas para esse destino).

    
por 13.06.2015 / 23:21