tl; dr : adicione rota explícita ao host remoto do programa misterioso ( /32
).
Eu olhei para o manual do OpenVPN , mas ainda não está claro se ele pode fazer isso nativamente (via% código%). Por segurança, use scripts / programas com --route
e --up
. É importante observar que a modificação da configuração de roteamento exige raiz, o que você não tem quando o --down
está em execução se --down
também for especificado.
Para ser portável, o script / programa --user
precisaria fazer o seguinte, dependendo de como seu programa misterioso se conecta:
- Resolver endereço IP remoto do programa misterioso (
--up
) - Determinar o gateway (
$remote_addr
) para o endereço IP remoto - isso pode ou não ser o gateway padrão - Adicionar rota explícita como
$gateway
Dessa forma, funcionará corretamente com ip route add $remote_addr via $gateway
.
O script / programa --redirect-gateway
precisaria ser quase o mesmo, exceto que ele precisa excluir a rota.
Ao escrever um script (Bash), os problemas realmente começam no passo 1. Você só precisa do endereço IP e nada mais. Algo como --down
faria o truque, mas prefere endereços IPv6 muito, o que pode ou não ser apropriado. Outras ferramentas ( getent hosts
etc) não usam o resolvedor do sistema operacional, mas consultam diretamente o DNS, o que pode não ser o que você deseja (pense em dig +short
).
O segundo passo é relativamente fácil em qualquer SO ( /etc/hosts
etc), mas no Windows. No Windows, você precisa programar o algoritmo para encontrar você mesmo a rota mais específica.
Se você acha que tudo está estático (endereço IP remoto, endereço IP do próximo salto), também é possível usar ip route get
:
route 1.2.3.4 255.255.255.255 10.1.2.3
... onde --route
é o host remoto do programa de mistério e 1.2.3.4
é o próximo salto de roteamento para alcançá-lo.
Outra solução é não usar 10.1.2.3
, significando que a interface de rede VPN será completamente desligada quando o OpenVPN perder sua conexão. Isso tem uma implicação muito séria: o tráfego irá vazar assim que a conexão for interrompida.