Eu tenho um computador com uma interface Ethernet extra somente local, com uma sub-rede privada. Quando uma VPN StrongSwan é estabelecida, não consigo acessar essa sub-rede.
Esta é a configuração local 'esquerda' (estabelecida poralgo):
conn ikev2-<rightip>
fragmentation=yes
rekey=no
dpdaction=clear
keyexchange=ikev2
compress=no
dpddelay=35s
ike=aes128gcm16-prfsha512-ecp256!
esp=aes128gcm16-ecp256!
right=<rightip>
rightid=<rightip>
rightsubnet=0.0.0.0/0
rightauth=pubkey
leftsourceip=%config
leftauth=pubkey
leftcert=daves.crt
leftfirewall=yes
left=%defaultroute
auto=add
A sub-rede em questão é 10.0.0.0/24. %defaultroute resolve para um endereço em 192.168.0.0/24.
'left' e 'leftsubnet' não parecem as opções certas para isso, mas não vejo nada melhor. Tentei configurar leftsubnet para 10.0.0.0/24 e para !10.0.0.0/24.
Como excluo uma sub-rede local de uma conexão VPN StronSwan?
Como inspeciono a configuração da rota de uma conexão?
Responder1
Você pode definir umpolítica de passagem.
ATUALIZAÇÃO: conforme observado por @ecdsa, com Strongswan >= 5.5.2 há ummétodo mais fácil, veja no final se sua versão pode utilizá-lo.
Exemplo com alguns IPs aleatórios. Antes de qualquer mudança e túnel:
# ip route get 10.0.0.55
10.0.0.55 dev lxcbr0 src 10.0.0.77 uid 0
Depois de estabelecer o túnel, o problema:
# ip route get 10.0.0.55
10.0.0.55 via 192.168.0.1 dev eth0 table 220 src 192.168.0.44 uid 0
Adicionando esta configuração a /etc/ipsec.conf
:
conn ignorelan
left=127.0.0.1 #prevents usage in peers selection algorithm
leftsubnet=10.0.0.0/24
rightsubnet=10.0.0.0/24
authby=never
type=passthrough
auto=route
e recarregando-o:
# ipsec reload
deve ativá-lo imediatamente. Se não (desta vez), você pode fazer:
# ipsec route ignorelan
'ignorelan' shunt PASS policy installed
De qualquer forma, deve ser usado em qualquer reinicialização posterior. Agora você tem (além de qualquer túnel):
# ipsec status
Shunted Connections:
ignorelan: 10.0.0.0/24 === 10.0.0.0/24 PASS
[...]
Agora, com o túnel sendo estabelecido ou não, você recebe de volta a rota correta (tratada pelo Strongswan, portanto na tabela 220, não (apenas) na tabela principal (mais)):
# ip route get 10.0.0.55
10.0.0.55 dev lxcbr0 table 220 src 10.0.0.77 uid 0
cache
Com um túnel ativado para 0.0.0.0/0, haveria um resultado semelhante a este na tabela 220:
# ip route show table 220
default via 192.168.0.1 dev eth0 proto static src 192.168.0.44
10.0.0.0/24 dev lxcbr0 proto static src 10.0.0.77
192.168.0.0/24 dev eth0 proto static src 192.168.0.44
Se você não colocar rotas que correspondam à realidade (por exemplo: máscara de rede errada) nas configurações de passagem, espere resultados errados para o "shunt" (como o IP de origem esperado, mas passando pela placa de rede errada), então tome cuidado.
ATUALIZAR: oplugin bypass-lané mais fácil de usar, especialmente em ambientes dinâmicos.
Em vez de adicionar novas conn
entradas, ative-o (por exemplo, no Debian buster (não estável), edite /etc/strongswan.d/charon/bypass-lan.conf e defina load=yes (ou seja: charon.plugins.bypass-lan.load =sim) ). Por padrão, todas as interfaces são desviadas, o que significa que um túnel seria estabelecido, mas não seria usado por padrão. Portanto, basta definir interfaces_ignore
ou interfaces_use
de acordo. Você deve definir interfaces_ignore
as interfaces que desejanão queropara ignorar túneis ou, então, definir interfaces_use
para a(s) interface(s) que vocêquererpara contornar túneis. Por exemplo:
interface_use = lxcbr0
Entraremos neste exemplo depois ipsec start
, como no método anterior:
# ip route show table 220
10.0.0.0/24 dev lxcbr0 proto static src 10.0.0.77
(mas também considerará rotas IPv6 relacionadas a esta interface quando o IPv6 estiver em uso).
No entanto, um outro método (hackish) seria ignorar a tabela 220 do cisne forte: em vez de quaisquer configurações de cisne forte, o mesmo seria alcançado (para estas perguntas e exemplos) com:
ip rule add priority 219 to 10.0.0.0/24 lookup main
Ele usará a tabela de roteamento padrão (principal) com a rede de destino em vez de continuar para a próxima entrada usando a tabela 220 do Strongswan.