Forçar Tráfego Torrent através da VPN Split Tunnel

Nós mostramos a você como configurar o Split Tunnel da VPN no Ubuntu Server 14.04 LTS , agora trazemos a próxima seqüência nos guias do túnel dividido: o guia VPN Split Tunnel para sistemas systemd como o Debian 8 e o Ubuntu 16.04. Neste guia, mostraremos como configurar o Split Tunnel no Ubuntu Server 16.04 LTS , Debian 8,  Minibian  e Raspbian Jessie (no Raspberry Pi). Você poderá rotear seu tráfego de torrent pela sua conexão VPN, enquanto o restante terá acesso direto, ignorando a VPN. O tráfego da rede será separado de maneira elegante e segura.

É muito importante proteger sua privacidade online. Nós certamente recomendamos o uso de uma VPN (Virtual Private Network) com o OpenVPN. Felizmente, existem muitos servidores VPN pagos com excelente desempenho e ótimo preço. Leia sempre a sua Política de Privacidade, considere a qualidade do serviço pelo preço e escolha um que você confia. Neste guia, usaremos o acesso à Internet privada (PIA) como o provedor de VPN. Na minha experiência, configurar outros não será muito diferente.

Importante: Este guia foi escrito para sistemas Ubuntu Server 16.04 LTS e Debian 8 (como Minibian, Raspbian, Bananian) que usam serviços systemd. Ele pode funcionar em outras distribuições Linux, mas é garantido que funcionará no Ubuntu Server 16.04 LTS e Debian 8. Para sistemas que usam script upstart (como o Ubuntu Server 14.04 LTS), os scripts upstart são necessários em vez do serviço systemd. Se você estiver usando o Ubuntu Server 14.04 LTS, vá para o guia Ubuntu 14.04 do Tunnel Dividir VPN do Force Torrent Traffic .

As seções marcadas como Minibian são necessárias apenas se você estiver executando o Minibian. Usuários do Ubuntu Server 16.04 LTS devem ignorar essas partes (sempre será indicado na seção relevante).

Por que dividir túnel VPN?

Se você estiver executando um servidor doméstico baseado no Ubuntu Server e configurar seu cliente OpenVPN, será completamente encapsulado pela conexão VPN ativa. Mas e se nós gostaríamos de encapsular apenas o tráfego de poucos aplicativos sobre VPN (por exemplo, Transmissão ou Dilúvio) e permitir tudo o mais conexão direta? Isso é chamado de divisão de encapsulamento da conexão VPN. E se a sua conexão VPN quebrar porque o servidor VPN está offline? Sem regras de firewall adequadas, você voltará automaticamente para sua conexão direta com a Internet e imediatamente exporá seu endereço IP real. Isso coloca riscos de privacidade e anonimato!

Os benefícios do tunelamento de divisão da VPN

Ao controle

Você pode selecionar quais serviços / aplicativos devem ser encapsulados pela conexão VPN executando os serviços / aplicativos selecionados como usuário vpn, portanto, você pode proteger sua identidade.

Automação

A conexão VPN com o Split Tunneling é iniciada automaticamente em cada inicialização do sistema, reiniciada automaticamente quando o provedor de VPN estiver on-line novamente.

Maior segurança

Se a conexão VPN quebrar, o usuário vpn é “desconectado” da Internet (Automatic Kill Switch), se a conexão VPN for estabelecida novamente, o usuário vpn terá acesso à Internet novamente pela VPN. Isso garante que o seu endereço IP real nunca seja exposto publicamente, apenas o endereço IP atribuído pelo provedor de VPN é visível.

Maior conveniência

Você mantém sua conexão direta com a Internet para todos os outros usuários, ignorando a VPN para serviços / aplicativos que não exigem que você esconda seu endereço IP real

Mantenha o acesso remoto

Você ainda poderá gerenciar remotamente seus serviços por meio de proxy reverso!

Visão Geral da Instalação

Este é um guia avançado, mas todos os esforços foram feitos para torná-lo amigável para novos usuários com conhecimentos básicos de Linux. Se algo der errado, sinta-se à vontade para comentar ou postar no Fórum , faremos o melhor para ajudá-lo. Desde a publicação do guia VPN Split Tunnel para o Ubuntu Server 14.04 LTS, há muitos posts interessantes na seção do fórum.

Esta é a parte 1 do guia do túnel dividido. Neste guia, você criará e configurará o usuário vpn.

Na Parte 2 das próximas guias, você configurará seu cliente de torrent (Transmission or Deluge) para ser executado como o usuário da VPN.

Aqui está uma visão geral de todas as etapas da Parte 1 :

  • Instalar e configurar o OpenVPN (incluindo conexão automática ao servidor VPN no início do sistema)
  • Modifique o arquivo de configuração PIA para ajustar o Túnel Dividido
  • Configurar o servidor DNS para conexão VPN para evitar vazamento de DNS
  • Crie o usuário vpn que será tunelado por VPN
  • Use o iptables para marcar as regras de tráfego e roteamento do usuário vpn para rotear os pacotes marcados pela conexão VPN
  • Verifique se tudo está configurado e funcionando corretamente

Instalar o OpenVPN

Infelizmente, os repositórios do Ubuntu e do Debian nem sempre estão atualizados. Recomenda-se usar a versão mais recente do OpenVPN para garantir que você tenha as últimas correções de segurança (e possíveis atualizações). No caso do Ubuntu Server 16.04, o repositório oficial do OpenVPN sempre fornece a versão mais recente. No caso de CPUs ARM, como o Rasperry Pi rodando Raspbian ou Minibian, precisamos construir a versão mais recente, já que o repositório OpenVPN não fornece compilações para dispositivos baseados em ARM. É muito fácil construir o OpenVPN a partir da fonte (fique atento ao guia), até então, no Debian, Minibian e Raspbian você pode usar a versão disponível no repositório Debian.

Instalar o OpenVPN no Ubuntu Server 16.04 LTS

Se você estiver usando o Ubuntu Server 16.04 LTS, instalaremos o OpenVPN a partir do repositório oficial do OpenVPN. Primeiro importe a chave GPG pública usada para assinar os pacotes.

wget https://swupdate.openvpn.net/repos/repo-public.gpg -O - | sudo apt-key add -

Adicione o repositório do OpenVPN

echo "deb http://build.openvpn.net/debian/openvpn/stable xenial main" | sudo tee -a /etc/apt/sources.list.d/openvpn.list

Instalar o OpenVPN

sudo apt-get update
sudo apt-get install openvpn -y

Atualização: OpenVPN apt repository foi alterado, o guia foi atualizado com o novo endereço.

Instale o OpenVPN no Debian 8 (Minibian, Raspbian)

Como o repositório OpenVPN não suporta dispositivos baseados em ARM, temos duas opções. Use a versão OpenVPN disponível no repositório Debian (provavelmente versão bastante desatualizada), ou construa a versão mais recente do OpenVPN a partir da fonte, seguindo o nosso guia. Eu recomendo fortemente construir o OpenVPN para obter a versão mais recente. Se você decidir criar o OpenVPN a partir da fonte, pule as duas linhas abaixo.

Isto irá instalar o OpenVPN do repositório Debian (necessário apenas se você não compilou o OpenVPN a partir do código fonte)

apt-get update
apt-get install openvpn -y

Crie o serviço systemd para OpenVPN

O serviço systemd é idêntico para o Ubuntu Server 16.04 LTS e o Debian 8 e posterior (inclui Raspbian, Bananian, Minibian)

Nota: no Minibian você não precisa usar sudo

Com a transição para o systemd, o OpenVPN usa scripts de serviço systemd individuais para cada conexão, que podem ser iniciados e parados com o comando systemctl. É realmente uma ótima maneira de lidar com conexões, você pode ler mais sobre este link .

Crie o serviço systemd que iniciará a configuração necessária do OpenVPN no início do sistema

sudo nano /etc/systemd/system/[email protected]

Este script também reiniciará o serviço OpenVPN se o serviço foi encerrado por algum motivo, os logs serão localizados no syslog ( /var/log/syslog).

Copie e cole o seguinte

[Unit]
# HTPC Guides - www.htpcguides.com
Description=OpenVPN connection to %i
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO
After=network.target

[Service]
RuntimeDirectory=openvpn
PrivateTmp=true
KillMode=mixed
Type=forking
ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid
PIDFile=/run/openvpn/%i.pid
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/etc/openvpn
Restart=on-failure
RestartSec=3
ProtectSystem=yes
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw

[Install]
WantedBy=multi-user.target

Pressione Ctrl + X, Y e Enter para salvar.

Agora habilite o [email protected] que acabamos de criar

sudo systemctl enable [email protected]

Pacotes de Verificação Dupla para Distros Debian Minimais

No Debian 8, Raspbian e Minibian o procedimento é exatamente o mesmo que no Ubuntu Server 16.04 LTS, exceto que precisamos instalar alguns pacotes adicionais. Se você estiver usando o Ubuntu Server 16.04 LTS, apenas pule esta parte Minibiana do guia e prossiga para a próxima seção Criar Arquivo de Configuração PIA para Split Tunneling.

Primeiro, recomendo atualizar o firmware RPi para a versão mais recente executando

apt-get update
apt-get install rpi-update

Em seguida, atualize o firmware

rpi-update

seguido por um reboot

reboot

Em seguida, verifique se o Minibian está atualizado, execute

apt-get upgrade -y
apt-get dist-upgrade -y

Dependendo da sua instalação atual do Debian ou Minibian, alguns dos pacotes abaixo podem já estar disponíveis. Nesse caso, você ainda pode emitir com segurança os comandos de instalação abaixo.

apt-get install nano sudo apt-utils iptables curl resolvconf

Agora sua instalação mínima do Debian está pronta para prosseguir com a configuração do Split Tunnel da VPN.

Criar arquivo de configuração PIA para túnel de divisão

O próximo passo é modificar o arquivo de configuração fornecido pela PIA para ajustá-lo para o Split Tunneling. Neste guia, usaremos o servidor VPN da Suécia, mas você poderá usar qualquer um dos servidores disponíveis – mais sobre isso depois. Para melhor desempenho de VPN (especialmente para torrents), eu recomendo fortemente o uso do protocolo UDP e não do TCP.

Obtenha os certificados necessários para PIA

Se o unzip não estiver instalado no seu servidor, basta instalar com

sudo apt-get install unzip -y

Baixe o arquivo da PIA, vamos precisar apenas dos certificados

cd /tmp
sudo wget https://www.privateinternetaccess.com/openvpn/openvpn.zip
sudo unzip openvpn.zip

Copie os certificados PIA necessários

sudo cp crl.rsa.2048.pem ca.rsa.2048.crt /etc/openvpn/

Criar arquivo de configuração PIA modificado para túnel de divisão

Fazemos as seguintes alterações no arquivo de configuração PIA padrão:

  • Adicione route-noexec para evitar que o servidor envie “redirecionamento de gateway” e faça o cliente enviar todo o tráfego pela VPN por padrão.
    • Isso é necessário para o Split Tunneling funcionar.
  • Adicione auth-nocache para evitar a colocação de senhas em cache na memória.
  • Adicione a chamada para o arquivo login.txt com o nome de usuário e senha para possibilitar o login automático.
  • Adicione script-security 2 para permitir que o cliente chame scripts externos (para cima e para baixo).
  • Chame o primeiro script, iptables.sh, para marcar os pacotes para o usuário da VPN (o OpenVPN permite apenas uma ligação).
  • Adicione script, update-resolv-conf, para restaurar servidores DNS ao desconectar da VPN.

Você pode alterar o nome do host destacado em vermelho para o servidor de sua escolha. Para obter a lista de locais e nomes de host disponíveis, consulte o site da PIA e selecione o nome de host de sua escolha.

Estamos editando o arquivo openvpn.conf, que é iniciado pelo serviço systemd que criamos anteriormente ([email protected]). Desta forma nós garantimos que os scripts up e down que fizemos também são executados com o serviço systemd do OpenVPN que é reiniciado.

Crie o arquivo de configuração do OpenVPN

sudo nano /etc/openvpn/openvpn.conf

Copie e cole o seguinte, ajuste o país que deseja usar substituindo sweden.privateinternetaccess.com

client
dev tun
proto udp
remote sweden.privateinternetaccess.com 1198
resolv-retry infinite
nobind
persist-key
persist-tun
cipher aes-128-cbc
auth sha1
tls-client
remote-cert-tls server
auth-user-pass /etc/openvpn/login.txt
auth-nocache
comp-lzo
verb 1
reneg-sec 0
crl-verify /etc/openvpn/crl.rsa.2048.pem
ca /etc/openvpn/ca.rsa.2048.crt
disable-occ
script-security 2
route-noexec

#up and down scripts to be executed when VPN starts or stops
up /etc/openvpn/iptables.sh
down /etc/openvpn/update-resolv-conf

Pressione Ctrl + X, Y e Enter para salvar e sair.

Faça o Login Automático do OpenVPN no Serviço Iniciar

O nome de usuário e a senha do PIA serão armazenados em um arquivo login.txt, assim o OpenVPN pode se conectar automaticamente no início do serviço. Crie o arquivo txt

sudo nano /etc/openvpn/login.txt

Digite seu nome de usuário e senha PIA

USERNAME
PASSWORD

Pressione Ctrl + X, Y para salvar e sair.

Configurar servidores DNS de VPN para impedir vazamentos de DNS

Em seguida, vamos impedir o vazamento de DNS. Os vazamentos de DNS geralmente são a principal razão pela qual sua identidade real é exposta, mesmo se estiver usando uma VPN. Você pode ler mais sobre vazamentos de DNS aqui e testá-los  aqui . O script update-resolv-conf que acompanha o OpenVPN aplicará automaticamente os servidores DNS preferidos quando o OpenVPN se conectar.

Esse script garantirá que, ao usar o OpenVPN, você não esteja sujeito a vazamentos de DNS. Usaremos os Servidores DNS da PIA (209.222.18.222 e 209.222.18.218) e os do Google (8.8.8.8) como uma terceira opção. Você está livre para usar os servidores DNS que você confia e prefere. É aconselhável alterar o DNS local para um público, mesmo se você não estiver usando VPN. Se você estiver atrás de um roteador (e provavelmente o é), também é uma boa prática configurar o endereço DNS público no roteador também.

Nota: verifique se você está usando um IP estático em sua máquina ou DHCP reservado, também conhecido como DHCP estático. Não configure o IP estático em seu servidor, pois o resolvconf não funcionará. Você deve definir o IP estático do seu roteador!

Abra o arquivo update-resolv-conf

sudo nano /etc/openvpn/update-resolv-conf

Localize esta parte

# foreign_option_1='dhcp-option DNS 193.43.27.132'
# foreign_option_2='dhcp-option DNS 193.43.27.133'
# foreign_option_3='dhcp-option DOMAIN be.bnc.ch'

Substitua a peça destacada em vermelho, certifique-se de descomentar (remova o # do começo) estas 3 linhas, e preste atenção na terceira linha onde você precisa substituir DOMAIN pelo DNS.

Deve ser exatamente assim

foreign_option_1='dhcp-option DNS 209.222.18.222'
foreign_option_2='dhcp-option DNS 209.222.18.218'
foreign_option_3='dhcp-option DNS 8.8.8.8'

Pressione Ctrl + X, Y e Enter para salvar.

Seu DNS está configurado para o OpenVPN para evitar vazamentos de DNS.

Split Tunneling com iptables e tabelas de roteamento

Usaremos o iptables para marcar pacotes de um usuário (no nosso caso, o usuário vpn) e, em seguida, usar tabelas de roteamento para rotear esses pacotes marcados através da interface OpenVPN, enquanto permitir que os pacotes não marcados acessem diretamente a Internet.

Criar usuário vpn

Crie o usuário vpn. Todos os aplicativos que você deseja encapsular pela VPN serão executados como este usuário, especialmente o cliente de torrent escolhido (Transmissão ou Dilúvio). No final deste guia, você verá os links para os nossos guias sobre como configurar a Transmissão e o Dilúvio com o Split Tunneling.

Crie um usuário vpn sem opção de login

sudo adduser --disabled-login vpn

Sugiro deixar em branco os dados pessoais, basta prosseguir com Enter e finalmente responder Y para criar o usuário vpn. Nós desativamos o login para o usuário vpn por razões de segurança, não há necessidade de fazer login no sistema como o usuário vpn.

Nós vamos usar o usuário vpn para executar serviços (como o cliente Torrent), é recomendado adicionar seu usuário regular ao grupo vpn e o usuário vpn ao grupo do usuário regular para evitar quaisquer problemas de permissão.

Substitua usernamepelo usuário que você gostaria de adicionar ao grupo vpn

sudo usermod -aG vpn username

Substitua groupcom o nome do grupo do seu usuário regular que você gostaria de adicionar o usuário vpn para

sudo usermod -aG group vpn

Obter informações de roteamento para o script iptables

Precisamos do IP local e do nome da interface de rede. Novamente, verifique se você está usando um IP estático em sua máquina ou DHCP reservado, também conhecido como DHCP estático, mas configurado em seu roteador!

ip route list

A saída será semelhante a esta

default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.110

eth0é a interface de rede (NETIF) e 192.168.1.110é o endereço IP local (LOCALIP). Você precisará inserir esses dois no seguinte script, que vamos criar agora.

ATUALIZAÇÃO (8 de novembro de 2016): graças a um feedback do nosso membro Jesus, estamos agora abordando uma vulnerabilidade relacionada à implementação do Split Tunnel da VPN. Se as credenciais de login PIA não estiverem corretas, o OpenVPN não estabelecerá a conexão VPN, portanto as regras de firewall não serão aplicadas (já que o OpenVPN executará scripts somente em uma conexão bem-sucedida). O resultado é não ter o kill switch ativado (regras iptables carregadas) e o usuário vpn tem acesso direto à Internet. Para evitar esse cenário, implementaremos uma regra de firewall permanente para bloquear o acesso do usuário da vpn à Internet até que o túnel OpenVPN esteja ativo e funcionando, e os scripts necessários sejam iniciados. Isso impedirá qualquer vazamento de IP, mesmo que nenhuma conexão ao PIA seja possível por qualquer motivo.

Flush current iptables rules

sudo iptables -F

Adicione a seguinte regra, que bloqueará o acesso do usuário da vpn à Internet (exceto o dispositivo de loopback). Observe que, se você configurou o Split Tunnel com um usuário diferente, em seguida, vpn, altere a vpn marcada em vermelho para o usuário que você usou.

sudo iptables -A OUTPUT ! -o lo -m owner --uid-owner vpn -j DROP

Agora instale o iptables-persistent para salvar esta regra única que será sempre aplicada no início de cada sistema.

sudo apt-get install iptables-persistent -y

Durante a instalação, o iptables-persistent solicitará que você salve as regras atuais do iptables /etc/iptables/rules.v4como visto na imagem, aceite isso com YES

iptables_persistent_split_tunnel-min

Agora, quando o sistema é iniciado, o usuário vpn não consegue acessar a Internet. Se o serviço OpenVPN for iniciado com êxito, essa regra será limpa (somente até a próxima reinicialização do sistema) e as regras do Túnel de Divisão serão aplicadas.

iptables Script para vpn User

O primeiro script marcará os pacotes para o usuário vpn, o segundo script cuidará do roteamento adequado.

Crie o script iptables

sudo nano /etc/openvpn/iptables.sh

Copie o seguinte no script iptables.sh e certifique-se de inserir a interface de rede e o IP local que identificamos e marcamos com vermelho e azul, respectivamente.

Você pode ver os comentários de cada seção sobre a função da parte específica do script. Se você estiver interessado em mais detalhes sobre o iptables, um bom ponto de partida é a Documentação Oficial do Ubuntu .

Lembre-se, este script irá liberar suas regras existentes do iptables (incluindo o UFW), portanto, você precisa anexar suas próprias regras a este script se precisar de regras de firewall adicionais.

#! /bin/bash
# Niftiest Software – www.niftiestsoftware.com
# Modified version by HTPC Guides – www.htpcguides.com

export INTERFACE="tun0"
export VPNUSER="vpn"
export LOCALIP="192.168.1.110"
export NETIF="eth0"

# flushes all the iptables rules, if you have other rules to use then add them into the script
iptables -F -t nat
iptables -F -t mangle
iptables -F -t filter

# mark packets from $VPNUSER
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark
iptables -t mangle -A OUTPUT ! --dest $LOCALIP -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT --dest $LOCALIP -p udp --dport 53 -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT --dest $LOCALIP -p tcp --dport 53 -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT ! --src $LOCALIP -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT -j CONNMARK --save-mark

# allow responses
iptables -A INPUT -i $INTERFACE -m conntrack --ctstate ESTABLISHED -j ACCEPT

# block everything incoming on $INTERFACE to prevent accidental exposing of ports
iptables -A INPUT -i $INTERFACE -j REJECT

# let $VPNUSER access lo and $INTERFACE
iptables -A OUTPUT -o lo -m owner --uid-owner $VPNUSER -j ACCEPT
iptables -A OUTPUT -o $INTERFACE -m owner --uid-owner $VPNUSER -j ACCEPT

# all packets on $INTERFACE needs to be masqueraded
iptables -t nat -A POSTROUTING -o $INTERFACE -j MASQUERADE

# reject connections from predator IP going over $NETIF
iptables -A OUTPUT ! --src $LOCALIP -o $NETIF -j REJECT

# Start routing script
/etc/openvpn/routing.sh

exit 0

Pressione Ctrl + X, Y e Enter para salvar e sair.

Faça o executável do script iptables

sudo chmod +x /etc/openvpn/iptables.sh

Script de Regras de Roteamento para os Pacotes Marcados

Com as regras de roteamento, configuramos a rota para os pacotes que acabamos de marcar com o primeiro script. Você pode ler mais sobre as tabelas de roteamento no seguinte link .

Crie o script de roteamento

sudo nano /etc/openvpn/routing.sh

Cole o seguinte script que torna a rota padrão após a VPN a interface de loopback, efetivamente anulando o tráfego se a conexão VPN cair.

#! /bin/bash
# Niftiest Software – www.niftiestsoftware.com
# Modified version by HTPC Guides – www.htpcguides.com

VPNIF="tun0"
VPNUSER="vpn"
GATEWAYIP=$(ifconfig $VPNIF | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}' | egrep -v '255|(127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})' | tail -n1)
if [[ `ip rule list | grep -c 0x1` == 0 ]]; then
ip rule add from all fwmark 0x1 lookup $VPNUSER
fi
ip route replace default via $GATEWAYIP table $VPNUSER
ip route append default via 127.0.0.1 dev lo table $VPNUSER
ip route flush cache

# run update-resolv-conf script to set VPN DNS
/etc/openvpn/update-resolv-conf

exit 0

Pressione Ctrl + X, Y e Enter para salvar e sair.

Finalmente, torne o script executável

sudo chmod +x /etc/openvpn/routing.sh

Configurar roteamento VPN de túnel dividido

Vamos precisar de uma tabela de roteamento adicionando o nome da tabela ao arquivo rt_tables (no nosso caso é vpn). Abra rt_tables

sudo nano /etc/iproute2/rt_tables

Adicione a tabela de usuários vpn na parte inferior do arquivo

200     vpn

Deve ser semelhante a isto:

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
200     vpn

Pressione Ctrl + X, Y e Enter para salvar e sair.

Alterar filtragem de caminho inverso

Por fim, precisamos alterar o nível padrão de filtragem de caminho reverso para garantir que o kernel direcione o tráfego corretamente. Por padrão, ele é configurado para o valor 1, que é “modo estrito”. Não é necessário desabilitar completamente o filtro de caminho reverso (ajuste para “0”), mas precisamos ajustá-lo para o nível 2, “modo solto”.

Crie um arquivo de filtro de caminho reverso para o usuário vpn

sudo nano /etc/sysctl.d/9999-vpn.conf

Copie o seguinte, certifique-se de usar o nome correto da interface de rede na terceira linha marcada com vermelho (lembre-se do comando ip route list de antes e da saída, no nosso caso foi eth0)

net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.eth0.rp_filter = 2

Pressione Ctrl + X, Y e Enter para salvar e sair.

Para aplicar as novas regras sysctl, execute:

sudo sysctl --system

Testando o túnel de divisão da VPN

Eu recomendo uma reinicialização do sistema, e se tudo foi configurado corretamente, você deve ter um serviço OpenVPN em execução habilitado para o usuário vpn e todos os outros usuários em seu servidor devem ter acesso direto à Internet. Agora vamos verificar se tudo está correto.

Teste o serviço OpenVPN

Entre como seu usuário regular através do SSH, e verifique o status do serviço OpenVPN

sudo systemctl status [email protected]

Isso deve retornar algo assim

[email protected] - OpenVPN connection to client
 Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled)
 Active: active (running) since Mon 2016-09-05 11:25:18 CEST; 1 day 4h ago
 Docs: man:openvpn(8)
 https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
 https://community.openvpn.net/openvpn/wiki/HOWTO
 Process: 3223 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn
 Main PID: 3266 (openvpn)
 CGroup: /system.slice/system-openvpn.slice/[email protected]
 └─3266 /usr/sbin/openvpn --daemon ovpn-client --status /run/openvpn/client.status 10 --cd /etc/openvpn

Sep 05 11:25:21 server ovpn-client[3266]: OPTIONS IMPORT: route options modified
Sep 05 11:25:21 server ovpn-client[3266]: OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified

O Systemd fornece uma visão geral muito boa sobre o estado do serviço. No exemplo acima, você pode ver que o serviço está ativo (em execução), exatamente como precisamos.

Se o serviço não estiver em execução, você poderá verificar se há um log do erro /var/log/syslog . Para solucionar problemas, você pode definir o detalhamento de saída no arquivo openvpn.conf para um nível superior. Defina-o como 3 e verifique o syslog novamente. Você sempre pode pedir ajuda na seção do fórum . Lembre-se de definir o nível de verbosidade de volta para 1 se você não precisar mais de logs detalhados.

Verifique o endereço IP

Usando a sessão SSH para o usuário regular, verifique o endereço IP

curl ipinfo.io

Ele retornará seu IP e, dependendo da quantidade de informação fornecida, o país deverá ser listado em cada caso. Obviamente, deve ser o seu ISP agora e sua localização.

Agora verifique o endereço IP do usuário vpn com

sudo -u vpn -i -- curl ipinfo.io

Se tudo correu bem, deve retornar o endereço IP e o país do servidor VPN selecionado. Se você usou o servidor da Suécia, o país deve ser “SE”. É muito importante que o endereço IP para o usuário vpn seja diferente do IP do seu usuário regular.

No meu caso para o usuário vpn e usando o servidor da Suécia PIA eu tenho a seguinte saída

{
  "ip": "X.XXX.XXX.XX",
  "hostname": "No Hostname",
  "city": "",
  "region": "",
  "country": "SE",
  "loc": "59.3294,18.0686",
  "org": "AS57858 Inter Connects Inc"

Obviamente, a parte “x.xxx.xxx.xx” é o meu endereço IP da VPN atribuído, que é diferente do meu IP público, e você pode ver o país como SE, que é a Suécia.

Verifique o servidor DNS

Finalmente, verifique se o DNS para VPN está configurado corretamente, digite

sudo -u vpn -i -- cat /etc/resolv.conf

A saída deve ser

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 209.222.18.222
nameserver 209.222.18.218
nameserver 8.8.8.8

Se você vir os servidores DNS acima, seu DNS para VPN está configurado corretamente.

ATUALIZAÇÃO (15 de julho de 2019): como configurar com IP estático

Muitos usuários relataram problemas ao usar o Split Tunnel ao usar o IP estático configurado no Ubuntu Server 16.04 ou no Debian 8. Fiz alguns testes e, para sistemas IP estáticos, eu recomendaria usar a seguinte configuração.

Uma nota sobre IP estático e esta atualização é necessária para sua configuração: por IP estático quero dizer se a instalação do Ubuntu Server ou Debian está configurada com IP estático em interfaces de rede (como alguns dos provedores VPS), e NÃO que você tenha definido um IP estático do seu roteador para o seu servidor! O último é chamado de reserva DHCP ou DHCP estática , quando o servidor está configurado como DHCP; seu roteador sempre atribui o mesmo endereço IP a um computador específico em sua LAN (simplesmente: a função DHCP do roteador atribui o IP estático ao endereço MAC exclusivo da NIC do servidor). Se você estiver usando uma reserva DHCP ou DHCP estática, deverá concluir as etapas do guia e não usar a solução alternativa abaixo.

Se você precisar inserir IP, Netmask e Gateway em seu servidor, precisará usar esse método descrito nesta seção. A principal diferença em relação ao método descrito no guia é que não usaremos update-resolv-confpara DNS, mas configuramos os dois servidores DNS primários do PIA, e o terceiro servidor DNS do Google nas interfaces de rede. Proceda da seguinte forma:

Editar openvpn.confpara remover update-resolv-confda chamada

sudo nano /etc/openvpn/openvpn.conf

Localize a linha  down /etc/openvpn/update-resolv-confe desative esta linha colocando um #no início. Deve ficar assim:

# down /etc/openvpn/update-resolv-conf

Pressione Ctrl + X, Y e Enter para salvar e sair.

Próximo routing.shscript de edição , onde desabilitaremos a chamada paraupdate-resolv-conf

sudo nano /etc/openvpn/routing.sh

Localize a linha (deve estar no final do script): /etc/openvpn/update-resolv-confe coloque um #no início da linha. Deve ficar assim:

# run update-resolv-conf script to set VPN DNS
# /etc/openvpn/update-resolv-conf

Pressione Ctrl + X, Y e Enter para salvar e sair.

Você pode deixar de fora a seção Configurar servidores DNS de VPN para interromper o DNS , se você ainda não tiver concluído. Se sim, não há problema, pois não usaremos update-resolv-confnada, apenas desativamos a chamada do script.

Configurar IP estático para o seu servidor

Esta parte é realmente algo que você já deveria ter configurado quando instalou seu servidor, já que você precisa configurar o endereço IP, a máscara de rede e o gateway aqui. Por favor, use as instruções do seu provedor de VPS ou ISP sobre como fazer isso (se não for feito automaticamente para você, como acontece com muitos VPS).

O que precisamos fazer aqui é adicionar uma entrada DNS para garantir que o sistema esteja usando os servidores DNS PIA e o terceiro servidor do Google. Lembre-se, é muito importante usar um servidor DNS em que você confia, e eu sugiro não usar os servidores DNS do seu ISP.

Editar interfaces

sudo nano /etc/network/interfaces

Você deve ver algo como este, onde addressnetmaskgatewayjá deve estar preenchido.

# Loopback device:
auto lo
iface lo inet loopback
iface lo inet6 loopback

# device: eth0
auto  eth0
iface eth0 inet static
 address   5.X.XXX.XXX 
 netmask   255.255.255.224
 gateway   5.X.XXX.XXX 

Aqui você precisa adicionar a linha do servidor DNS após a entrada do gateway, deve ficar assim (não mude mais nada). Lembre-se, você pode usar outros servidores DNS, mas certifique-se de usar um que você confia.

# Loopback device:
auto lo
iface lo inet loopback
iface lo inet6 loopback

# device: eth0
auto  eth0
iface eth0 inet static
 address   5.X.XXX.XXX 
 netmask   255.255.255.224
 gateway   5.X.XXX.XXX
 dns-nameservers 209.222.18.222 209.222.18.218 8.8.8.8

Pressione Ctrl + X, Y e Enter para salvar e sair.

É isso aí, agora reinicie o sistema e o Split Tunnel deve funcionar com a resolução de nomes DNS usando servidores DNS seguros.

Conclusão

Parabéns, agora você configurou seu Ubuntu Server 16.04 LTS ou Debian 8 para VPN com Split Tunneling. 

Rolar para cima