Você pode definir uma política de repasse .
ATUALIZAÇÃO: conforme observado por @ecdsa, com strongswan > = 5.5.2, há um método mais fácil , olhe para o final se a sua versão puder usá-lo.
Exemplo com alguns IPs aleatórios. Antes de qualquer alteração 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:
# 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, ele deve ser usado em qualquer reinício posterior. Você agora tem (além de qualquer túnel):
# ipsec status
Shunted Connections:
ignorelan: 10.0.0.0/24 === 10.0.0.0/24 PASS
[...]
Agora, o túnel sendo estabelecido ou não, você recebe de volta a rota correta (manipulada por strongswan, portanto, na tabela 220, não (apenas) table main (anymore)):
# 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 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 correspondentes à realidade (por exemplo: máscara de rede incorreta) nas configurações de passagem, espere resultados incorretos para o "shunt" (como o IP de origem esperado, mas passando pela placa de rede errada), .
UPDATE : o plug-in bypass-lan é mais fácil usar, especialmente com ambientes dinâmicos.
Em vez de adicionar novas entradas conn
, ative-a (por exemplo, no Debian Buster (não estável), edite o /etc/strongswan.d/charon/bypass-lan.conf e defina load = yes (ex .: charon.plugins .bypass-lan.load = sim)). Por padrão, toda interface é desviada, ou seja, 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
para a (s) interface (s) que você não quer que ignore túneis ou, senão, defina interfaces_use
para a (s) interface (s) desejada (s) para contornar túneis. Por exemplo:
interface_use = lxcbr0
Entraremos neste exemplo depois de 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 essa interface quando o IPv6 estiver em uso).
No entanto, um outro método (hackiano) seria ignorar a tabela 220 do strongswan: em vez de quaisquer configurações strongs, o mesmo seria alcançado (para essas 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.