Rotas para duas conexões openvpn (hosts diferentes) no mesmo cliente

2

Estou tentando fazer vários túneis no mesmo cliente e, depois de uma conexão bem-sucedida ao servidor openvpn, apliquei algumas rotas para os túneis criados sem sucesso. Meu primeiro túnel funciona, mas o segundo não funciona. Estou fazendo assim:

Rotas antes de não fazer nada

default         192.168.1.1     0.0.0.0         UG    0      0        0 enp3s0
link-local      *               255.255.0.0     U     1000   0        0 enp3s0
192.168.1.0     *               255.255.255.0   U     0      0        0 enp3s0

Primeiro túnel

France.ovpn

client
dev tun
proto udp
remote france.privateinternetaccess.com
lport 1190
resolv-retry infinite
persist-key
persist-tun
cipher aes-128-cbc
auth sha1
tls-client
remote-cert-tls server
auth-user-pass /etc/openvpn/piaauth.txt
comp-lzo
verb 1
reneg-sec 0
crl-verify /etc/openvpn/crl.rsa.2048.pem
ca /etc/openvpn/ca.rsa.2048.crt
disable-occ
lport 1189
rport 1198

|

sudo /usr/sbin/openvpn --config /etc/openvpn/France.ovpn --dev tun0 --route-noexec


sudo route add -net 10.88.10.1 gw 10.88.10.5 netmask 255.255.255.255 dev tun0
sudo route add -net 10.88.10.5 gw * netmask 255.255.255.255 dev tun0
sudo route add -net 128.0.0.0 gw 10.88.10.5 netmask 128.0.0.0 dev tun0
sudo route add -net 172.98.67.121 gw 192.168.1.1 netmask 255.255.255.255 enp3s0

Rotas após o primeiro túnel

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    0      0        0 enp3s0
10.88.10.1      10.88.10.5      255.255.255.255 UGH   0      0        0 tun0
10.88.10.5      *               255.255.255.255 UH    0      0        0 tun0
128.0.0.0       10.88.10.5      128.0.0.0       UG    0      0        0 tun0
link-local      *               255.255.0.0     U     1000   0        0 enp3s0
172.98.67.121   192.168.1.1     255.255.255.255 UGH   0      0        0 enp3s0
192.168.1.0     *               255.255.255.0   U     0      0        0 enp3s0

Tudo funciona perfeito

Agora eu tento com isso:

Norway.ovpn

client
dev tun
proto udp
remote no.privateinternetaccess.com
resolv-retry infinite
persist-key
persist-tun
cipher aes-128-cbc
auth sha1
tls-client
remote-cert-tls server
auth-user-pass /etc/openvpn/piaauth.txt
comp-lzo
verb 1
reneg-sec 0
crl-verify /etc/openvpn/crl.rsa.2048.pem
ca /etc/openvpn/ca.rsa.2048.crt
disable-occ
lport 1187
rport 1198

sudo /usr/sbin/openvpn --config /etc/openvpn/Norway.ovpn --route-noexec

sudo route add -net 10.39.10.1 gw 10.39.10.5 netmask 255.255.255.255 dev tun1
sudo route add -net 10.39.10.5 gw * netmask 255.255.255.255 dev tun1
sudo route add -net 108.61.123.81 gw 192.168.1.1 netmask 255.255.255.255 enp3s0

Rotas agora:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    0      0        0 enp3s0
10.39.10.1      10.39.10.5      255.255.255.255 UGH   0      0        0 tun1
10.39.10.5      *               255.255.255.255 UH    0      0        0 tun1
10.8.10.1       10.8.10.5       255.255.255.255 UGH   0      0        0 tun0
10.8.10.5       *               255.255.255.255 UH    0      0        0 tun0
108.61.123.81.c 192.168.1.1     255.255.255.255 UGH   0      0        0 enp3s0
128.0.0.0       10.8.10.5       128.0.0.0       UG    0      0        0 tun0
link-local      *               255.255.0.0     U     1000   0        0 enp3s0
172.98.67.121   192.168.1.1     255.255.255.255 UGH   0      0        0 enp3s0
192.168.1.0     *               255.255.255.0   U     0      0        0 enp3s0

E eu acho que o problema vem depois de tentar adicionar a última rota:

sudo route add -net 128.0.0.0 gw 10.39.10.5 netmask 128.0.0.0 dev tun1

porque eu usei 128.0.0.0 anteriormente com tun0. Eu tentei mudá-lo para algo diferente como 252.0.0.0 ou 224.0.0.0 por exemplo, mas não funciona. E se eu tentar com o 128.0.0.0 o tun1 funciona mas o tun0 não. O que devo fazer para que os dois túneis funcionem ao mesmo tempo?

    
por suarsenegger 19.12.2016 / 14:23

1 resposta

1

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.

Referências

por 19.12.2016 / 20:37