Estou tentando configurar um gateway IPsec (strongSwan) em um Raspberry Pi 2.
O Pi já estava fornecendo vários serviços na LAN usando um endereço IP privado.
Minha tentativa inicial de transformá-lo em um gateway IPsec envolveu apenas adicionar um endereço IP público à mesma interface ( eth0
) e ativar o strongSwan SA nesse novo endereço. Isso funciona, e depois de ativar o módulo pcrypt
, consegui obter um throughput de decodificação de ~ 80Mbps, o que realmente é muito bom considerando todas as coisas.
Então decidi tentar isolar o material strongSwan em um namespace de rede separado. Eu fiz ip netns add vpn
, criei um macvlan
device em eth0
e, em seguida, incluí-lo no namespace vpn
. Eu então corro ip netns exec vpn ipsec start
e tudo funciona de novo.
No entanto, pcrypt
parece não estar mais ativo dentro do namespace e a taxa de transferência cai para aproximadamente ~ 25Mbps. Eu geralmente habilito pcrypt
usando crconf
, conforme esta instrução . Quando invocado dentro do namespace, ele continua falhando com um erro de netlink. A execução de strace crconf
fornece esta preciosidade:
socket(PF_NETLINK, SOCK_RAW, NETLINK_CRYPTO) = 3
setsockopt(3, SOL_SOCKET, SO_SNDBUF, [32768], 4) = 0
setsockopt(3, SOL_SOCKET, SO_RCVBUF, [1048576], 4) = 0
bind(3, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
getsockname(3, {sa_family=AF_NETLINK, pid=997, groups=00000000}, [12]) = 0
send(3, "socket(PF_NETLINK, SOCK_RAW, NETLINK_CRYPTO) = 3
setsockopt(3, SOL_SOCKET, SO_SNDBUF, [32768], 4) = 0
setsockopt(3, SOL_SOCKET, SO_RCVBUF, [1048576], 4) = 0
bind(3, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
getsockname(3, {sa_family=AF_NETLINK, pid=997, groups=00000000}, [12]) = 0
send(3, "%pre%%pre%%pre%%pre%U27V%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 20, 0) = -1 ECONNREFUSED (Connection refused)
%pre%%pre%%pre%U27V%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 20, 0) = -1 ECONNREFUSED (Connection refused)
Portanto, o kernel está recusando uma conexão com o soquete NETLINK_CRYPTO
dentro do namespace da rede.
PERGUNTA: Como eu permito uma conexão com NETLINK_CRYPTO
do meu namespace de rede?