Estou tentando configurar o Strongswan para o tunelamento dividido da VPN.
O que eu quero é apenas as sub-redes 10.88.0.0/16
e 10.0.200.0/24
é acessível através do túnel VPN. Todo o resto é tratado através default gateway
da rede.
Todos os clientes recebem um endereço IP pertencente à 10.0.201.0/24
sub-rede.
No meu arquivo de configuração tenho entre outros o seguinte:
# Default login method
eap-defaults {
remote {
auth = eap-radius
id = %any
eap_id = %any
}
}
connections
{
conn-unix : conn-defaults, eap-defaults {
children {
net {
local_ts = 10.0.200.0/24, 10.88.0.0/16
}
esp_proposals = aes128gcm128-x25519
}
pools = IkeVPN-ipv4
proposals = aes128-sha256-x25519
}
conn-windows : conn-defaults, eap-defaults {
children {
net {
local_ts = 10.0.200.0/24, 10.88.0.0/16
}
esp_proposals = aes256-sha256-prfsha256-modp1024
}
proposals = aes256-sha256-prfsha256-modp1024
pools = IkeVPN-ipv4
}
}
pools
{
IkeVPN-ipv4 {
addrs = 10.0.201.0/24
dns = 10.0.88.2
}
}
Quando faço login pela VPN, é possível fazer ping nos hosts pertencentes a 10.88.0.0/16
e 10.0.200.0/24
, para que eu saiba que posso usar o túnel VPN.
No entanto:
Se eu tentar acessar qualquer outro recurso na Internet enquanto ainda estiver conectado à VPN, não consigo nem mesmo pingar o endereço IP pertencente a esse recurso.
Na minha tabela de roteamento no meu computador Windows, posso encontrar as seguintes entradas:
Eu sei que quando você tem duas rotas para uma determinada sub-rede, como 0.0.0.0/0
na tabela de roteamento, qualquer regra com a métrica mais baixa vence e o tráfego é encaminhado usando essa regra.
No entanto não quero que o servidor VPN instale uma rota padrão via VPN, mas apenas informe que as sub-redes 10.88.0.0/16
e 10.0.200.0/24
tem que ser roteado via VPN.
O que eu quero é que eu veja uma tabela de roteamento mais próxima disso sem ter que editar a tabela de roteamento manualmente em cada cliente VPN:
Então, como eu vou fazer isso?
Acontece que meu problema com o tunelamento dividido foi colocado em uma área completamente diferente, pois tenho 2 roteadores em casa, então minha rede doméstica é algo como: ISP <-> R1 <-> R2 <-> Me.
... e R1 foi configurado para um endereço IP no intervalo 10.0.0.0/24.
Quando você desabilita o roteamento padrão no cliente VPN do Windows, ele adiciona uma rota baseada em classe, portanto, no meu caso, ele adicionará uma rota que envia tudo para 10.0.0.0/8 por VPN, o que obviamente entraria em conflito com a configuração no roteador R1.
É por isso que queria remover completamente a rota 10.0.0.0/8 e enviar rotas para as sub-redes
10.88.0.0/16
e10.0.200.0/16
sobre VPN.Acontece que é factível.
O roteamento baseado em classe é removido habilitando
disable class based routing
quando você desabilitadefault routing
no cliente VPN.No Strongswan, você precisa encaminhar a solicitação dhcp dos clientes para um servidor DHCP que implementou o RFC3442.
Portanto, na minha configuração acima, tenho que substituir todas as ocorrências de
pools = IkeVPN-ipv4
compools = dhcp
estrongswan.conf
adicionar o seguinte à subseção de plugins de charon:Eu posso então excluir toda a
pools
seção na parte inferior da minha configuração.Existem mais algumas opções disponíveis que podem ser lidas aqui .
O guia do Strongswan da dica @ecdsa forneceu algumas informações, mas esse guia é específico do Windows, portanto, não informa como lidar com dispositivos Linux, MacOS ou Android. No entanto, o RFC3442 tratará do caso genérico.
Em poucas palavras, o que o RFC3442 diz é que você deve enviar as duas opções de dhcp a seguir:
Basicamente você tem que codificar cada rota como um array de int usando a seguinte sintaxe:
x,y1,y2,y3,y4,z1,z2,z3,z4
Onde:
Se houver mais de uma rota a ser enviada via DHCP, você terá que adicionar outra sequência semelhante à acima na cauda do primeiro roteador.
De acordo com a documentação do Strongswan, posso substituir o gateway padrão pelo
0.0.0.0
.Isso significa que minha rota para
10.0.200.0/24
é codificada como24,10,0,200,0,0,0,0
e10.88.0.0/16
é codificada para16,10,88,0,0,0,0
.Combinando os dois me dá
24,10,0,200,0,0,0,0,16,10,88,0,0,0,0
, o que me leva à seguinte configuração emISC DHCP server
:Espero que isso ajude quem está lutando com o túnel dividido.