Estou tentando configurar uma conexão IPsec manualmente no 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) para que o IPsec transforme o ingresso de tudo (ESP / TUNNEL MODE) e o entregue ao eth0 (no meu sistema chamado em1). No outro conjunto, um par pega o pacote de seu próprio eth decifra-o 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 configurá-lo com facilidade 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 de adversário no par funciona muito bem.
Agora eu 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 novamente vice-versa do outro lado. Isso novamente funciona bem. Depois alterei a política IPsec e o 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 agora tento tcping
o par, não recebo 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á-la à 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, pois, em última análise, quero fazer isso em um programa C ++ e já tenho as classes apropriadas que eliminam os comandos do Netlink do mesmo estilo que o ip
comando (o que eu posso fazer com ip
, eu também pode fazer dentro do meu código). De fato, a primeira parte já funciona no meu programa e eu quero usar as mesmas funções da API Netlink para o resto.
Atualização Eu descobri que o estado precisava ser configurado com os endereços do túnel para que as SAs funcionais 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 de farejamento. Também o iptables na outra máquina bloqueou o pacote e eu o desabilitei para teste.
Então, a única direção parece funcionar agora, mas ainda não recebi resposta. 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 nenhuma idéia de como vinculá-la a uma física, muito menos se a transformação funcionasse dessa maneira.