Tabela de roteamento principal
Somente 1 rota padrão é possível por tabela de roteamento. Se você quiser adicionar as rotas à tabela de roteamento main
, será necessário decidir qual gateway será usado como rota padrão.
Quando redirect-gateway def1
é usado, o OpenVPN adiciona duas rotas (mais específicas) (cada uma delas correspondendo a metade do intervalo de endereço IP) à tabela de roteamento principal que substitui a rota padrão sem excluí-la:
0.0.0.0/1 via 10.8.0.1 dev tun0 # network 0.0.0.0 mask 128.0.0.0
default via 10.0.2.2 dev eth0 # network 0.0.0.0 mask 0.0.0.0
128.0.0.0/1 via 10.8.0.1 dev tun0 # network 128.0.0.0 mask 128.0.0.0
O mesmo se aplica a estas duas rotas de substituição. Não é possível adicionar outra rota com 0.0.0.0/1
ou 128.0.0.0/1
à tabela de roteamento main
.
Roteamento com base em política
Eu suspeito que o que você quer fazer é configurar algum tipo de tunelamento dividido. Ele pode ser obtido usando o roteamento baseado em políticas da seguinte forma, assumindo que os dispositivos tun0
e tun1
são usados.
Primeiro, adicione mais 2 tabelas de roteamento:
echo "100 tun0" >> /etc/iproute2/rt_tables
echo "101 tun1" >> /etc/iproute2/rt_tables
Crie um script /etc/openvpn/route-up.sh
para adicionar rotas automaticamente quando o openvpn se conectar:
#!/bin/bash
RULE_EXIST=$(ip rule list | grep "from ${ifconfig_local}" | wc -l)
if [ $RULE_EXIST -ne 0 ]; then
ip rule del from "${ifconfig_local}" lookup "${dev}"
fi
ip rule add from "${ifconfig_local}" lookup "${dev}"
ip route add default via "${route_vpn_gateway}" dev "${dev}" table "${dev}"
Executar chmod +x /etc/openvpn/route-up.sh
Adicione as linhas aos arquivos de configuração do cliente OpenVPN:
route-noexec
route-up /etc/openvpn/route-up.sh
script-security 2
Agora conecte-se com os dois clientes e verifique as tabelas de roteamento:
root@debian:/etc/openvpn# ip route show
default via 10.0.2.2 dev eth0
10.0.2.0/24 dev eth0 scope link src 10.0.2.15
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2
root@debian:/etc/openvpn# ip route show table tun0
default via 10.8.0.1 dev tun0
root@debian:/etc/openvpn# ip route show table tun1
default via 10.0.2.2 dev eth0
root@debian:/etc/openvpn# ip rule show
0: from all lookup local
32762: from 10.8.0.2 lookup tun0
32763: from 10.0.2.15 lookup tun1
32766: from all lookup main
32767: from all lookup default
Agora você precisa decidir o que fazer. Por exemplo, para ativar o balanceamento de carga simples, adicione a seguinte rota:
ip route del default
ip route add default scope global nexthop via 10.8.0.1 dev tun0 weight 1 \
nexthop via 10.0.2.2 dev eth0 weight 1
Depois disso, a tabela de roteamento principal é a seguinte:
root@debian:/etc/openvpn# ip route show
default
nexthop via 10.8.0.1 dev tun0 weight 1
nexthop via 10.0.2.2 dev eth0 weight 1
10.0.2.0/24 dev eth0 scope link src 10.0.2.15
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2
Usando o roteamento baseado em políticas, você pode fazer coisas legais. Veja as referências abaixo para mais ideias.
Depuração de script OpenVPN
Adicione isso ao script route-up.sh
para ajudar na depuração e ver quais variáveis estão disponíveis:
log=/tmp/ovpn.log
exec >>"$log" 2>&1
chmod 666 "$log" 2>/dev/null
printenv
Em seguida, execute tail -f /tmp/ovpn.log
ao se conectar.