Use a conexão VPN apenas para aplicativos selecionados

39

Eu tenho acesso a uma VPN e quero usá-la apenas para alguns aplicativos, não todos.

Por exemplo:
Se eu conectar a uma VPN, quero que apenas os aplicativos Opera e Newsbin usem essa conexão VPN. Todos os outros aplicativos, como o Outlook, devem usar a conexão normal à Internet (enquanto a VPN estiver conectada / aberta).

Afaik, isso não é possível, mas não tenho certeza. Então, portanto, minha pergunta: é factível?

dirkt
fonte

Respostas:

-1

Não, não é. Bem, não usando meios normais. Roteamento é roteamento. O roteamento opera abaixo do modelo OSI. O que você precisa acontecer é que ele esteja ciente no nível do aplicativo (acima), para que possa detectar qual programa você está usando etc. Os roteadores NORMAL não permitem configurar rotas com base em aplicativos ou números de porta.

Eu acho que é possível. Os roteadores podem ver as portas para que você possa filtrá-las pelo número da porta e enviar o tráfego para diferentes rotas. Tenho certeza de que li algo há um tempo atrás com roteadores Cisco que podem fazer isso. Eles não são baratos e são roteadores de negócios que exigem muita configuração e acho que você quer algo simples para uso doméstico.

Em resumo, é o roteador que precisaria desse recurso e seu padrão básico para uso doméstico, mesmo as empresas não suportam esses recursos. Somente a linha avançada da Cisco e da Sonicwalls oferece esses recursos.

Mucker
fonte
36

É possível fazer isso, pelo menos no Linux (e também estou pensando em BSD e OS X). Você pode fazer isso:

  • Crie um usuário exra para todo o tráfego da VPN.
  • Crie uma tabela de roteamento extra com 1 rota padrão via VPN.
  • Configure o Netfilter através de Iptables para usar a outra tabela de roteamento para todo o tráfego originado de uma ID de usuário específica.
  • Execute os aplicativos que devem usar a VPN com seu próprio usuário. Por exemplo, com 'sudo'.

Existem scripts para realizar as etapas acima aqui ou há outro guia aqui .

Aqui está um guia detalhado para rotear a transmissão por uma VPN (usando um servidor VPN que você possui.

Freeaqingme
fonte
Muito mais fácil no Linux: crie um espaço para nome da rede, conecte a VPN a esse espaço para nome, execute aplicativos que devem usar o espaço para nome na VPN. Você pode até executar duas cópias do mesmo aplicativo, uma usando a VPN e outra usando a conexão direta.
dirkt 12/09
15

Você pode usar o Firewall do Windows para fazer isso (desde que esteja usando o Windows 7 ou Vista) - escrevi um guia sobre isso

  1. Conecte-se à sua VPN como faria normalmente.

  2. Abra o Centro de Rede e Compartilhamento - clique com o botão direito do mouse no ícone de conexão com a Internet na barra de tarefas e escolha "Abrir Centro de Rede e Compartilhamento" (veja abaixo)

  3. Você deve ver (pelo menos) duas redes listadas em "Exibir suas redes ativas" - sua conexão VPN e uma chamada "Rede" - também conhecida como conexão ISP. Verifique se a sua VPN é uma "Rede pública" e sua conexão com o provedor de serviços de Internet é "Rede doméstica". Se você precisar alterar uma das conexões, clique nela e uma janela de opções será exibida (veja abaixo).

  4. Vá para o Painel de controle e clique em Sistema e segurança (veja abaixo).

  5. Na janela resultante, clique em Firewall do Windows (veja abaixo).

  6. Na janela Firewall do Windows, clique em Configurações avançadas no painel esquerdo (veja abaixo). Nota: Você deve estar logado como administrador para fazer alterações nas configurações do firewall.

  7. Você deverá ver uma janela intitulada Firewall do Windows com Segurança Avançada. Nesta janela, clique em Regras de entrada (veja abaixo).

  8. No painel direito, você verá uma opção para uma nova regra. Clique nele (veja abaixo).

  9. No Assistente de nova regra de entrada (que deve aparecer), faça o seguinte:

    • Escolha Programa e clique em Avançar.

    • Escolha o programa para o qual deseja bloquear todo o tráfego, exceto na conexão VPN, e clique em Avançar.

    • Escolha Bloquear a conexão.

    • Marque Domínio e Privado. Verifique se Public está desmarcado.

  10. Repita a etapa 9 para regras de saída.

divagar
fonte
11
Isso realmente responde à pergunta? Sim, isso impede que o aplicativo funcione se não estiver na VPN, mas todo o tráfego ainda passa pela VPN, não é?
Jason Coyne
3
@pramble Então, todo o tráfego ainda passa pela vpn?
Nsij22
Parece trabalhar. Apenas testei ..
Faiz
Isso não corrige. Este é um cenário muito simples. Quero que todo o meu material relacionado ao trabalho passe pela VPN (conexões do SQL Server, Slack etc.), mas desejo que meu navegador da Web (Facebook, Soundcloud etc., basicamente todo o tráfego da porta 80) NÃO passe pela VPN . O Windows é péssimo se isso não for possível.
Triynko 8/01/19
@Triynko Seu cenário é muito diferente do cenário solicitado pelo OP. Após conectar-se à VPN, você pode apenas definir as rotas correspondentes aos itens relacionados ao trabalho, ou seja, usar o gateway VPN para todas as sub-redes ou IPs relacionados ao trabalho. O tráfego de roteamento originado de aplicativos específicos é mais difícil de alcançar.
speakr 25/07
4

Você pode fazer isso com namespaces de rede no GNU / Linux.

Veja como executar o OpenVPN e um único aplicativo em um espaço para nome separado:

Crie o namespace da rede líquida:

ip netns add myvpn

Inicie a interface de loopback no espaço para nome (caso contrário, muitas coisas não funcionam como o esperado ...)

ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up

Crie interfaces de rede virtual que permitirão que o OpenVPN (no espaço de nomes) acesse a rede real e configure a interface no espaço de nomes (vpn1) para usar a interface fora do espaço de nomes (vpn0) como gateway padrão

ip link add vpn0 type veth peer name vpn1
ip link set vpn0 up
ip link set vpn1 netns myvpn up
ip addr add 10.200.200.1/24 dev vpn0
ip netns exec myvpn ip addr add 10.200.200.2/24 dev vpn1
ip netns exec myvpn ip route add default via 10.200.200.1 dev vpn1

Habilite o roteamento IPv4 e o NAT para a interface no espaço para nome. Como minha interface padrão é sem fio, uso wl + (que pode corresponder a wlan0, wlp3s0 etc.) em iptables para a interface de saída; se você usa uma interface com fio, provavelmente deve usar en + (ou br + para uma interface com ponte)

iptables -A INPUT \! -i vpn0 -s 10.200.200.0/24 -j DROP
iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o wl+ -j MASQUERADE
sysctl -q net.ipv4.ip_forward=1

Configure o servidor de nomes para usar dentro do espaço para nome

mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf

Quase pronto, agora devemos ter acesso total à rede no espaço para nome

ip netns exec myvpn ping www.google.com

Por fim, inicie o OpenVPN no espaço para nome

ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf

Quando tun0 estiver no namespace, você estará pronto para iniciar o programa que queria!

while ! ip netns exec myvpn ip a show dev tun0 up; do sleep .5; done
ip netns exec myvpn sudo -u $MYSELF popcorntime

Artigo SOURCE.

Também há um script de wrapper no artigo de origem que você pode adaptar às suas necessidades.

PocketSam
fonte
3

Eu fiz isso no Windows. A idéia é vincular os pacotes de rede de saída à interface da VPN. As pessoas sugerem o ForceBindIP por isso, mas graças a esta resposta , tenho uma idéia para usar o proxy. A desvantagem desse método é que seus aplicativos precisam ter suporte a proxy ou você precisará usar um proxy (veja aqui e aqui ). A vantagem é que dessa maneira você poderá limitar o uso da VPN no navegador a domínios específicos usando FoxyProxy ou complementos similares.

Uso o 3proxy no modo SOCKS e vinculo sua interface externa ao IP da VPN. O OpenVPN é usado para a conexão VPN.

No meu arquivo .ovpn ( client, dev tun) adicionei estas linhas:

route-nopull
route 0.0.0.0 0.0.0.0 vpn_gateway
pull-filter ignore "dhcp-option DNS "
script-security 2
up 'c:\path\to\up.cmd'
down 'c:\path\to\down.cmd'

route-nopullpara ignorar as rotas enviadas pelo servidor. No seu caso, pode ser necessário comentar o redirecionamento de gateway.

route para adicionar uma rota para essa interface, sem essa linha, ela não será usada mesmo que o aplicativo esteja associado a ela.

pull-filterpreservar o DNS empurrado que, caso contrário, será eliminado route-nopulljunto com as rotas empurradas. Esta opção é suportada a partir do OpenVPN 2.4. Se você precisar usar o OpenVPN 2.3 (versão mais recente do Windows XP), precisará adicionar duas dhcp-option DNS x.x.x.xlinhas com IPs codificados.

script-security 2 para permitir scripts.

up roteiro:

cd %~dp0
echo auth none> 3proxy-openvpn.conf
echo internal 127.0.0.1>> 3proxy-openvpn.conf
echo external %4>> 3proxy-openvpn.conf
echo socks>> 3proxy-openvpn.conf
start /b 3proxy.exe 3proxy-openvpn.conf

down roteiro:

taskkill /f /im 3proxy.exe

Portanto, depois que você se conectar à VPN usando essa configuração, o 3proxy.exeprocesso será iniciado e um proxy SOCKS5 limitado por host local com capacidade de resolução de DNS será executado na 1080porta, agora basta configurar seu aplicativo para usar o localhost:1080proxy SOCKS.

do utilizador
fonte
Estou recebendo Options error: option 'route' cannot be used in this context ([PUSH-OPTIONS])e Options error: option 'redirect-gateway' cannot be used in this context ([PUSH-OPTIONS]). No entanto, esta solução funciona. Se você ignorar os apóstrofos para baixo e para cima script, use barras invertidas duplas:c:\\path\\to\\script
chx
1

Se você está no linux e usa o openVPN , o VPNShift funciona perfeitamente.

thouliha
fonte
Não poste a mesma resposta em várias perguntas. Se a mesma informação realmente responder a ambas as perguntas, uma pergunta (geralmente a mais recente) deve ser fechada como duplicata da outra. Você pode indicar isso votando para fechá-lo como duplicado ou, se você não tiver reputação suficiente para isso, levante uma bandeira para indicar que é uma duplicata. Caso contrário, adapte sua resposta a essa pergunta e não cole a mesma em vários lugares.
DavidPostill
4
O fato de ser "a mesma resposta para várias perguntas" é tão importante? A pergunta existe, ainda não está sinalizada como duplicada e é uma boa resposta, por isso merece existir. Obrigado @thouliha 🙂.
Ronan Jouchet 19/10/19
0

Basta acessar a VPN através de uma máquina virtual.

  1. Crie uma VM e, em seguida, de dentro da VM ...
  2. Instale os aplicativos 'selecionados'
  3. Configure a VPN

Use os aplicativos 'selecionados' da VM em vez de usá-los na máquina host.

PS: Você precisa conceder acesso de rede à VM através da máquina host, é claro.

drowa
fonte
Isso apenas menciona uma abordagem já descrita em detalhes em outras respostas.
precisa saber é o seguinte
1
@ fixer1234: ninguém mencionou máquinas virtuais.
drack
Você pode expandir sua resposta para algo mais acionável (explique como)? Veja as outras respostas no tópico para ter uma idéia do nível de detalhe. Apenas fornecer uma dica para uma direção seguir seria um comentário, o que requer um pouco mais de rep.
fixer1234
Eu tentei um comentário primeiro, mas o sistema não me permitiu, porque tenho menos de 50 pontos. Vou tentar expandir a resposta então.
dr
Essa é a idéia que me surgiu e funciona bem, sem nenhuma configuração de roteamento complicada no lado do sysadmin.
pwned
0

Sei que esta é uma resposta muito tardia que acabei de encontrar, mas, caso seja relevante para alguém, tive a mesma circunstância em que queria executar meu tráfego de trabalho através da VPN, mas não queria que meu tráfego pessoal fosse roteado pelos seus servidores proxy e tal. Então, eu estava executando o Win7 naquela época, mas eles ainda estavam executando o WinXP em muitos de seus sistemas. Eventualmente, eles me deram um segundo PC para executar o trabalho, que resolveu o problema (uma caixa de interruptores conectada aos dois PCs, poderia apenas ir e voltar), mas antes disso eu executei um Virtual XP que eu configurei como meu sistema operacional. Gostaria de entrar na VPN a partir da referida VM para conectar-me ao trabalho, o que deixaria o tráfego pessoal do SO livre das restrições de trabalho e espionagem.

Warren Colvett
fonte