Eu quero fazer o seguinte (se for possível):
Tenha 1 navegador (digamos Firefox) normalmente - todo o tráfego usa minha VPN. Tenha outro navegador (digamos Chrome) onde todo o tráfego contorna a VPN.
Já configurei um PC com uma VPN usando OpenVPN e entendo como adicionar rotas estáticas para que o acesso a endereços IP específicos ignore a VPN.
Eu pensei que o que eu quero fazer pode ser possível configurando um servidor proxy (Squid) que roteia todo o tráfego fora da VPN e, em seguida, configure o navegador Chrome para usar esse servidor proxy. A menos que haja uma maneira melhor/mais fácil?
Mas não sei como fazer isso e configurar o Squid/routes apesar de fazer muita leitura e experimentação (não sou especialista em redes), nem consegui encontrar nenhum recurso para me dizer como (ou se é possível) .
Qualquer ajuda ou links para informações apreciadas.
Eu acho que o melhor seria não mudar nada na sua configuração atual, mas aproveitar os namespaces do Linux . Você pode usar ferramentas como nsjail ou Firejail por conveniência.
A ideia seria configurar um namespace dedicado para esse outro navegador que deveria ignorar a VPN, com suas próprias regras de roteamento. Isso é tudo que você precisa, altere as regras de roteamento para que ele use sua interface Ethernet regular em vez da interface tun criada pelo OpenVPN.
O outro benefício é o isolamento de seus aplicativos. Ao limitar o escopo e os recursos que eles podem ver, você os isola efetivamente uns dos outros.
Usar o Firejail aqui é como eu faria aproximadamente - eu encorajo você a ler o documento para ajustar a configuração para o resultado desejado. O Firejail vem com perfis prontos para uso para aplicativos comuns, para que possa iniciar imediatamente o sandboxing de seus navegadores e outros aplicativos.
Existe também uma ferramenta de configuração de GUI (firetools), mas minha sugestão seria experimentar o Firejail com apenas um aplicativo em vez de reconfigurar todo o seu ambiente.
Aqui está um PoC usando Python (supondo que você tenha o pacote netifaces instalado).
Como você pode ver, o Python vê apenas uma interface (além da interface de loopback). eth0-11182 é, obviamente, uma interface virtual que existe apenas dentro do namespace atual.
Leitura sugerida: Guia de sandboxing do Firefox
Eu não usei
squid
, mas pelo que entendi é apenas um proxy comum, portanto, ao instalá-lo em seu computador, ele ainda segue as regras de roteamento do seu sistema operacional.Eu tentaria a seguinte configuração:
Depois de ter esta configuração configurada, seus navegadores não usariam a VPN por padrão, e você pode configurar um deles para ir pelo servidor proxy usando o endereço de sub-rede OpenVPN do servidor.
Nota1: Você deve usar o proxy através do endereço de sub-rede OpenVPN e não seu IP público.
Nota2: Não permita tráfego para a porta do servidor proxy de fora da sub-rede OpenVPN, pode ser obtido usando iptables ou não abrindo a porta usando as regras do seu provedor de nuvem
ATUALIZAR:
Ao usar um serviço de VPN externo (por exemplo: nordVPN) você não tem acesso à máquina que executa o servidor OpenVPN e isso torna a solução acima inválida, pois você não pode instalar nada na máquina que executa o servidor OpenVPN.
É possível instalar o serviço proxy em outro dispositivo da sua sub-rede local, e alguns roteadores (ex: mikrotik ) disponibilizam esse recurso. Mas isso fará com que a solução funcione apenas em um local específico com essa configuração.
Obrigado por todas as ideias e comentários até agora. Eu (ainda) não consegui
firejail
trabalhar com a VPN ativa (sugestão @Anonymous). Mas segui a sugestão vinculada por @ofirule especificamente esta resposta para usar grupos de controle.Essa resposta tem um link para um script de shell completo para fazer tudo automaticamente, mas eu queria fazer as coisas manualmente, pelo menos para começar, para poder acompanhar e ter certeza de que sabia exatamente o que estava mudando. Então, seguindo o Manual HowTo lá vou postar abaixo exatamente o que eu fiz para qualquer outra pessoa.
Observe que minha interface de rede é denominada enp0s31f6 e meu IP de gateway é 192.168.0.1 Acho que essas são as duas únicas coisas específicas que podem precisar ser alteradas para outras pessoas após isso:
Eu (ainda) não entendo completamente todos os itens acima, mas funciona! :-) Executando o firefox através do
cgexec
comando, posso verificar meu IP no firefox com a VPN ativa e posso ver que relata meu IP público real e não o IP da VPN. Também provei que esse método funciona executando um serviço de streaming de rádio que estava tendo problemas ao trabalhar com a VPN - agora funciona absolutamente bem ignorando a VPN.