Pesquisa de site

Instalação e configuração de servidor e cliente OpenVPN no Debian 7


Este artigo detalha como obter conectividade IPv6 no OpenVPN usando o Debian Linux. O processo foi testado no Debian 7 em um KVM VPS com conectividade IPv6 como servidor e um desktop Debian 7. Os comandos devem ser executados como root.

O que é OpenVPN?

OpenVPN é um programa VPN que usa SSL/TLS para criar conexões VPN criptografadas e seguras, para rotear seu tráfego de Internet, evitando assim a espionagem. A VPN aberta é altamente capaz de atravessar firewalls de forma transparente. Na verdade, se a situação exigir, você pode executá-lo na mesma porta TCP do HTTPS (443), tornando o tráfego indistinguível e, portanto, praticamente impossível de bloquear.

O OpenVPN pode usar uma variedade de métodos, como chaves secretas pré-compartilhadas, certificados ou nomes de usuário/senhas, para permitir que os clientes se autentiquem no servidor. OpenVPN usa o protocolo OpenSSL e implementa muitos recursos de segurança e controle, como autenticação de resposta a desafios, capacidade de logon único, recursos de balanceamento de carga e failover e suporte a vários daemons.

Por que usar o OpenVPN?

Pense em comunicações seguras – pense em OpenVPN. Se você não quer que ninguém bisbilhote seu tráfego de Internet, use o OpenVPN para rotear todo o seu tráfego através de um túnel seguro e altamente criptografado.

Isto é especialmente importante ao conectar-se a redes Wi-Fi públicas em aeroportos e outros locais. Você nunca pode ter certeza de quem está bisbilhotando seu tráfego. Você pode canalizar seu tráfego através de seu próprio servidor OpenVPN para evitar espionagem.

Se você estiver em algum dos países que monitoram rotineiramente todo o seu tráfego e bloqueiam sites à vontade, você pode usar o OpenVPN pela porta TCP 443, para torná-lo indistinguível do tráfego HTTPS. Você pode até combinar o OpenVPN com outras estratégias de segurança, como encapsular seu tráfego OpenVPN em um túnel SSL, para superar as técnicas de inspeção profunda de pacotes que podem identificar assinaturas OpenVPN.

Requisitos de sistema

OpenVPN requer requisitos mínimos para funcionar. Um sistema com 64 MB de RAM e 1 GB de espaço em disco rígido é suficiente para executar o OpenVPN. OpenVPN é executado em quase todos os principais sistemas operacionais.

Instalação e configuração do OpenVPN no Debian 7

Instale OpenVPN no servidor mestre

Execute o seguinte comando para instalar o OpenVPN.

apt-get install openvpn

Por padrão, os scripts easy-rsa são instalados no diretório ‘/usr/share/easy-rsa/’. Portanto, precisamos copiar esses scripts para o local desejado, ou seja, /root/easy-rsa.

mkdir /root/easy-rsa
cp -prv /usr/share/doc/openvpn/examples/easy-rsa/2.0 /root/easy-rsa

Gerar certificado CA e chave CA

Abra o arquivo ‘vars’ e faça as seguintes alterações, mas antes de fazer alterações sugiro que você faça backup do arquivo original.

cp vars{,.orig}

Usando seu editor de texto, configure os valores padrão para easy-rsa. Por exemplo.

KEY_SIZE=4096
KEY_COUNTRY="IN"
KEY_PROVINCE="UP"
KEY_CITY="Noida"
KEY_ORG="Home"
KEY_EMAIL="[email "

Aqui, estou usando uma chave de 4096 bits. Você pode usar uma chave de 1024, 2048, 4096 ou 8192 bits conforme desejado.

Exporte os valores padrão executando o comando.

source ./vars

Limpe todos os certificados gerados anteriormente.

./clean-all

Em seguida, execute o seguinte comando para gerar o certificado CA e a chave CA.

./build-ca

Gere o certificado do servidor executando o comando. Substitua o ‘nome do servidor’ pelo nome do seu servidor.

./build-key-server server-name

Gere o certificado Diffie Hellman PEM.

./build-dh

Gere o certificado do cliente. Substitua o ‘nome do cliente’ pelo nome do seu cliente.

./build-key client-name

Gere o código HMAC.

openvpn --genkey --secret /root/easy-rsa/keys/ta.key

Copie os certificados para as máquinas cliente e servidor da seguinte forma.

  1. Certifique-se de que ca.crt esteja presente no cliente e no servidor.
  2. A chave ca.key deve estar no cliente.
  3. O servidor requer server.crt, dh4096.pem, server.key e ta.key.
  4. client.crt, client.key e ta.key devem estar no cliente.

Para configurar as chaves e certificados no servidor, execute os comandos.

mkdir -p /etc/openvpn/certs
cp -pv /root/easy-rsa/keys/{ca.{crt,key},server-name.{crt,key},ta.key,dh4096.pem} /etc/openvpn/certs/

Configurando o servidor OpenVPN

Agora você precisa configurar o servidor OpenVPN. Abra o arquivo ‘/etc/openvpn/server.conf‘. Faça as alterações conforme descrito abaixo.

script security 3 system
port 1194
proto udp
dev tap

ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/server-name.crt
key /etc/openvpn/certs/server-name.key
dh /etc/openvpn/certs/dh4096.pem
tls-auth /etc/openvpn/certs/ta.key 0

server 192.168.88.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

keepalive 1800 4000

cipher DES-EDE3-CBC # Triple-DES
comp-lzo

max-clients 10

user nobody
group nogroup

persist-key
persist-tun

#log openvpn.log
#status openvpn-status.log
verb 5
mute 20

Habilite o encaminhamento de IP no servidor.

echo 1 > /proc/sys/net/ipv4/ip_forward

Execute o seguinte comando para configurar o OpenVPN para iniciar na inicialização.

update-rc.d -f openvpn defaults

Inicie o serviço OpenVPN.

service openvpn restart

Instale OpenVPN no cliente

Execute o seguinte comando para instalar o OpenVPN na máquina cliente.

apt-get install openvpn

Usando um editor de texto, defina a configuração do cliente OpenVPN em ‘/etc/openvpn/client.conf‘, no cliente. Um exemplo de configuração é o seguinte:

script security 3 system
client
remote vpn_server_ip
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/client.crt
key /etc/openvpn/certs/client.key
cipher DES-EDE3-CBC
comp-lzo yes
dev tap
proto udp
tls-auth /etc/openvpn/certs/ta.key 1
nobind
auth-nocache
persist-key
persist-tun
user nobody
group nogroup

Execute o seguinte comando para configurar o OpenVPN para iniciar na inicialização.

update-rc.d -f openvpn defaults

Inicie o serviço OpenVPN no cliente.

service openvpn restart

Quando você estiver satisfeito com o bom funcionamento do OpenVPN no IPv4, veja como fazer o IPv6 funcionar no OpenVPN.

Fazendo o IPv6 funcionar com OpenVPN no servidor

Adicione as seguintes linhas ao final do arquivo de configuração do servidor ‘/etc/openvpn/server.conf’.

client-connect /etc/openvpn/client-connect.sh
client-disconnect /etc/openvpn/client-disconnect.sh

Esses dois scripts constroem/destroem o túnel IPv6 cada vez que um cliente se conecta/desconecta.

Aqui está o conteúdo de client-connect.sh.

#!/bin/bash
BASERANGE="2a00:dd80:003d:000c"
ifconfig $dev up
ifconfig $dev add ${BASERANGE}:1001::1/64
ip -6 neigh add proxy 2a00:dd80:003d:000c:1001::2 dev eth0
exit 0

Meu host me atribui endereços IPV6 do bloco 2a00:dd80:003d:000c::/64. Por isso, eu uso
2a00:dd80:003d:000c como BASERANGE. Modifique este valor de acordo com o que seu host atribuiu a você.

Cada vez que um cliente se conecta ao OpenVPN, este script atribui o endereço 2a00:dd80:003d:000c:1001::1 como o endereçoIPV6 do tap0< interface do servidor.

A última linha configura o Neighbor Discovery para o nosso túnel. Adicionei o endereço IPv6 da conexão tap0 do lado do cliente como endereço proxy.

Aqui está o conteúdo de client-disconnect.sh.

#!/bin/bash
BASERANGE="2a00:dd80:003d:000c"
/sbin/ip -6 addr del ${BASERANGE}::1/64 dev $dev
exit 0

Isso apenas exclui o endereço do túnel IPv6 do servidor, quando o cliente se desconecta. Modifique o valor de BASERANGE conforme apropriado.

Torne os scripts executáveis.

chmod 700 /etc/openvpn/client-connect.sh
chmod 700 /etc/openvpn/client-disconnect.sh

Adicione as seguintes entradas a ‘/etc/rc.local’ (você também pode modificar os sysctls apropriados em /etc/sysctl.conf).

echo 1 >/proc/sys/net/ipv6/conf/all/proxy_ndp
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
/etc/init.d/firewall stop && /etc/init.d/firewall start

Essas entradas ativam a descoberta e o encaminhamento de vizinhos. Eu também adicionei um firewall.

Crie '/etc/init.d/firewall' e coloque o seguinte conteúdo.

#!/bin/sh
description: Firewall
IPT=/sbin/iptables
IPT6=/sbin/ip6tables
case "$1" in
start)
$IPT -F INPUT
$IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
$IPT -A INPUT -i eth0 -p icmp -j ACCEPT
$IPT -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT
$IPT -A INPUT -i tap+ -j ACCEPT
$IPT -A FORWARD -i tap+ -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t nat -F POSTROUTING
$IPT -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
$IPT -A INPUT -i eth0 -j DROP
$IPT6 -F INPUT
$IPT6 -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT6 -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
$IPT6 -A INPUT -i eth0 -p icmpv6 -j ACCEPT
$IPT6 -A FORWARD -s 2a00:dd80:003d:000c::/64 -i tap0 -o eth0 -j ACCEPT
$IPT6 -A INPUT -i eth0 -j DROP
exit 0
;;
stop)
$IPT -F
$IPT6 -F
exit 0
;;
*)
echo "Usage: /etc/init.d/firewall {start|stop}"
exit 1
;;
esac

Execute '/etc/rc.local' e inicie o firewall.

sh /etc/rc.local

Isso conclui as modificações do lado do servidor.

Fazendo o IPv6 funcionar com OpenVPN no cliente

Adicione o seguinte como as últimas linhas do arquivo de configuração do cliente ‘/etc/openvpn/client.conf‘.

create the ipv6 tunnel
up /etc/openvpn/up.sh
down /etc/openvpn/down.sh
need this so when the client disconnects it tells the server
explicit-exit-notify

Os scripts up e down constroem/destroem os pontos finais do cliente IPV6 da conexão tap0 do cliente cada vez que um cliente se conecta/desconecta de ou para o servidor OpenVPN.

Aqui está o conteúdo de up.sh.

#!/bin/bash
IPV6BASE="2a00:dd80:3d:c"
ifconfig $dev up
ifconfig $dev add ${IPV6BASE}:1001::2/64
ip -6 route add default via ${IPV6BASE}:1001::1
exit 0

O script atribui o endereço IPV6 2a00:dd80:3d:c:1001::2 como o endereço IPV6 do cliente e define a rota IPV6 padrão através do servidor.

Modifique IPV6BASE para ser igual a BASERANGE na configuração do servidor.

Aqui está o conteúdo de down.sh.

#!/bin/bash
IPV6BASE="2a00:dd80:3d:c"
/sbin/ip -6 addr del ${IPV6BASE}::2/64 dev $dev
/sbin/ip link set dev $dev down
/sbin/ip route del ::/0 via ${IPV6BASE}::1
exit 0

Isso apenas exclui o endereço IPV6 do cliente e interrompe a rota IPV6 quando o cliente se desconecta do servidor.

Modifique IPV6BASE para ser igual a BASERANGE na configuração do servidor e torne o script executável.

chmod 700 /etc/openvpn/up.sh
chmod 700 /etc/openvpn/down.sh

Opcionalmente, modifique ‘/etc/resolv.conf’ e adicione os servidores de nomes IPV6 do Google para resolução DNS.

nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844

Reinicie o openvpn no servidor e conecte-se a ele a partir do cliente. Você deveria estar conectado. Visite test-ipv6.com para verificar se sua conectividade IPV6 via OpenVPN está funcionando.

Links de referência

Página inicial do OpenVPN

Fonte: stavrovski