O OpenVPN pode criar a rota padrão se ela não existir?

2

Nota

Esta questão foi originalmente perguntada sobre o OpenVPN não definir um gateway padrão se ainda não existir um, mesmo que você especifique --redirect-gateway local ou --redirect-gateway def1 . A partir do 2.4.1 , o OpenVPN faz defina um gateway padrão com essa opção, quer já exista ou não, por isso, é obsoleto se você estiver usando essa versão.

Observe que a versão do OpenVPN no Ubuntu Zesty é a 2.4.0 e não tem essa alteração. Mas a versão do Artful é instalada sem problemas no Zesty.

Eu criei um namespace de rede no Ubuntu 14.04.5, com um plano para executar uma VPN dentro dele (usando o OpenVPN 2.3.2 e um arquivo de configuração). A ideia é que nenhum tráfego possa ser roteado para fora do namespace até que a VPN esteja em execução.

Eu implementei isso não criando uma rota padrão e, em vez disso, colocando o endereço IP do servidor VPN na lista de permissões. Então minha tabela de roteamento parece:

# ip netns exec testns ip route add A.B.C.D/32 via 10.200.200.1 dev veth1
# ip netns exec testns ip route show
10.200.200.0/24 dev veth1  proto kernel  scope link  src 10.200.200.2 
A.B.C.D via 10.200.200.1 dev veth1 

Observe que 10.200.200.1 é o endereço de veth0 , a outra extremidade da interface virtual veth1 ( 10.200.200.2 ). Confirmei que minhas regras iptables e o encaminhamento de IP no namespace raiz funcionam para obter tráfego dentro e fora do namespace testns quando há uma rota para ele. A.B.C.D é o endereço do servidor VPN.

Para trazer a VPN para cima, eu corro ip netns exec testns openvpn abcd.ovpn . Este arquivo de configuração contém uma diretiva pull e a configuração push ed do servidor contém:

PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1,dhcp-option[...]

Mas, um pouco depois, vejo:

NOTE: unable to redirect default gateway -- Cannot read current default gateway from system

E, consequentemente, não há nenhuma rota padrão configurada no meu namespace testns .

De acordo com o manual, redirect-gateway def1 não tenta substituir a rota padrão, apenas cria duas novas 0.0.0.0/1 e 128.0.0.0/1 . Como não ter uma rota padrão impede que eles sejam criados? E como posso obter o OpenVPN para rotear automaticamente todo o tráfego através da VPN quando uma rota padrão não existe inicialmente?

    
por detly 09.09.2016 / 00:08

2 respostas

3

According to the manual, redirect-gateway def1 doesn't try to replace the default route, it just creates two new ones 0.0.0.0/1 and 128.0.0.0/1. How does not having a default route prevent these from being created?

Se o OpenVPN apenas substituísse o gateway padrão, ele não conseguiria mais chegar ao ponto final do mesmo nível por meio desse gateway original. Então, o que ele faz primeiro é olhar para o gateway padrão e definir uma rota de host explícita para seu ponto final de ponto através desse gateway.

A página man do OpenVPN é bastante explícita sobre isso:

--redirect-gateway flags...

Automatically execute routing commands to cause all outgoing IP traffic to be redirected over the VPN. This is a client-side option.

This option performs three steps:

(1) Create a static route for the --remote address which forwards to the pre-existing default gateway. This is done so that (3) will not create a routing loop.

(2) Delete the default gateway route.

(3) Set the new default gateway to be the VPN endpoint address (derived either from --route-gateway or the second parameter to --ifconfig when --dev tun is specified).

When the tunnel is torn down, all of the above steps are reversed so that the original default route is restored.

Você então pergunta

how can I get OpenVPN to automatically route all traffic through the VPN when a default route doesn't initially exist?

Uma rota deve existir (em algum lugar) para que o cliente OpenVPN chegue ao seu terminal ponto a ponto (ou seja, o servidor). Portanto, seja qual for o caminho, você precisará implementar as três tarefas descritas acima em um script --up . Você precisará escrever este script, é claro.

    
por 16.09.2016 / 17:26
1

Duas opções de trabalho:

  • Defina um gateway padrão falso (por exemplo, 127.0.0.1) e permita que o OpenVPN o sobrescreva.
  • Use um script post run para definir o gateway usando ip route
por 16.09.2016 / 17:01