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 username
pelo usuário que você gostaria de adicionar ao grupo vpn
sudo usermod -aG vpn username
Substitua group
com 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.v4
como visto na imagem, aceite isso com YES
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-conf
para 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.conf
para remover update-resolv-conf
da chamada
sudo nano /etc/openvpn/openvpn.conf
Localize a linha down /etc/openvpn/update-resolv-conf
e 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.sh
script 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-conf
e 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-conf
nada, 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 address
, netmask
e gateway
já 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.