Porquê instalar uma VPN até à nossa rede em casa ? ou até à empresa onde trabalhamos ?
No meu caso para:
No meu caso para:
- - Imprimir documentos remotamente
- - Aceder ao meu NAS e transferir ficheiros
- - Aceder a um proxy HTTP para navegar pela Internet com o IP público da minha ligação em casa
- - Aceder a câmaras IP
- - Usar um ponto de acesso wireless público e navegar encriptadamente enviando tráfego HTTP pelo túnel VPN para o proxy em casa e a partir daí para a Internet.
- - Ver televisão com MEO GO
Vpn Layer 2 ou Layer 3 ? Quais são as diferenças ?
Numa VPN Layer 2 (ou camada 2) as frames transportadas entre os dois locais, usam todas a propriedades básicas da camada Ethernet, logo, tem que aprender MAC's, replicar frames Broadcasts e Multicast, etc. Portanto temos que "imaginar" que o host que usa a VPN vai se ligar pelo túnel L2 ao servidor OpenVPN como se estivesse ligado a um switch. Sendo assim, vai receber um IP na mesma gama de endereçamento da rede onde termina o túnel.
Numa VPN de Layer 3 (ou camada 3) cada lado do túnel fica em sub-redes diferentes. Os pacotes IP são roteados entre as duas sub-redes.
Instalação do OpenVPN Layer 3
sudo su
apt-get update
apt-get install openvpn
Criação do par de chaves, uma para o cliente outra para o servidor
cd /etc/openvpn/easy-rsa
pico vars
export EASY_RSA="`pwd`"
Para:
export EASY_RSA="/etc/openvpn/easy-rsa"
export KEY_COUNTRY="PT"
export KEY_PROVINCE="Viana do Castelo"
export KEY_CITY="Viana do Castelo"
export KEY_ORG="Gondor"
export KEY_EMAIL="xxxxx@gmail.com"
export KEY_EMAIL=xxxxx@gmail.com
export KEY_CN=gondor
export KEY_NAME=gondor
export KEY_OU=gondor
export PKCS11_MODULE_PATH=gondor
Inicialização da infraestrutura de chaves públicas (PKI)
cd /etc/openvpn/easy-rsa/
sudo susource ./vars
./clean-all
ln -s openssl-1.0.0.cnf openssl.cnf
./build-ca
Geração do certificado e chave do Servidor e cliente
No meu caso o servidor é o gandalf e o cliente o sauron
./build-key-server servername
./build-key client1Na pasta /etc/openvpn/easy-rsa/keys deverão estar os seguintes ficheiros :
ca.crt
ca.key
gandalf.crt
gandalf.csr
gandalf.key
sauron.crt
sauron.csr
sauron.key
cd /etc/openvpn/easy-rsa/
sudo susource ./vars
./build-key client2
cliente2.crt
cliente2.csr
cliente2.key
cliente2.csr
cliente2.key
ca.crt
cliente2.crt
cliente2.key
cliente2.key
Geração do Diffie-Hellman
O propósito do Diffie-Helman é possibilitar a troca de chaves entre o servidor e o cliente através de uma rede insegura.
./build-dh
Criação do ficheiro de configuração do servidor
A partir deste momento não convém estar logado como root, devemos fazer exit para voltar ao utilizador com privilégios normais.
Vamos copiar um ficheiro de exemplo, para servir de base na nossa configuração
sudo gunzip server.conf.gz
dentro do ficheiro server.conf vamos mudar as seguintes configurações para que as chaves geradas anteriormente sejam tidas em conta:
Gravar e modificar as permissões do ficheiro
cd /etc/openvpn
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn
sudo gunzip server.conf.gz
dentro do ficheiro server.conf vamos mudar as seguintes configurações para que as chaves geradas anteriormente sejam tidas em conta:
# colocar o ip estático do raspberry
local 192.168.100.253
# por defeito o serviço OpenVPN escuta no porto 1194
port 1194
# Escolher o protocolo UDP, é mais "leve"
proto udp
# escolher dev tun para que seja estabelecido
# um túnel ou vpn Layer 3
dev tun
# no meu caso quero usar a rede
# 192.168.101.0/24 para fazer os túneis ponto-a-ponto
# o IP 192.168.101.1 será atribuído ao servidor
# podendo os clientes chegar ao servidor
# usando este IP
server 192.168.101.0 255.255.255.0
# o push serve para que seja instalada uma rota
# na tabela de routing do cliente
# a indicar a rede da LAN de casa
# assim o cliente sabe que para chegar
# à LAN de casa tem que rotear o
# tráfego pelo túnel
# a minha rede em casa tem endereço 192.168.100.0/24
push "route 192.168.100.0 255.255.255.0"
group nogroup
local 192.168.100.253
# por defeito o serviço OpenVPN escuta no porto 1194
port 1194
# Escolher o protocolo UDP, é mais "leve"
proto udp
# escolher dev tun para que seja estabelecido
# um túnel ou vpn Layer 3
dev tun
# no meu caso quero usar a rede
# 192.168.101.0/24 para fazer os túneis ponto-a-ponto
# o IP 192.168.101.1 será atribuído ao servidor
# podendo os clientes chegar ao servidor
# usando este IP
server 192.168.101.0 255.255.255.0
# para que seja sempre atribuido
# sempre o mesmo IP aos clientes
# poderá ser útil caso por exemplo
# caso a ligação se perca, ao ser
# retomada é atribuído o mesmo
# IP ao cliente
ifconfig-pool-persist ipp.txt
# o push serve para que seja instalada uma rota
# na tabela de routing do cliente
# a indicar a rede da LAN de casa
# assim o cliente sabe que para chegar
# à LAN de casa tem que rotear o
# tráfego pelo túnel
# a minha rede em casa tem endereço 192.168.100.0/24
push "route 192.168.100.0 255.255.255.0"
# Por razões de segurança
# é uma boa ideia reduzir os privilégios do utilizador
# que corre o deamon do OpenVPN
user nobodygroup nogroup
ca.crt mudar para ca /etc/openvpn/easy-rsa/keys/ca.crt
cert server.crt mudar para cert /etc/openvpn/easy-rsa/keys/servername.crt
key server.key mudar para key /etc/openvpn/easy-rsa/keys/servername.key
dh dh1024.pem mudar para dh /etc/openvpn/easy-rsa/keys/dh1024.pem
Roteamento e Firewall no Raspberry
De forma a permitir que o Raspberry consiga rotear tráfego entre o túnel e a LAN
Dentro do ficheiro /etc/sysctl.conf procurar a linha:
net.ipv4.ip_forward=1
Dentro do ficheiro /etc/sysctl.conf procurar a linha:
net.ipv4.ip_forward=1
e retirar o comentário
Gravar o ficheiro e executar o comando
sudo sysctl -p
Criar o ficheiro /etc/regras-firewall-openvpn.sh e colocar a seguinte configuração de NAT no Iptables.
#!/bin/sh
iptables -t nat -A POSTROUTING -s 192.168.101.0/24 -o eth0 -j SNAT --to-source 192.168.100.253
sudo chmod 700 /etc/regras-firewall-openvpn.sh
sudo chown root /etc/regras-firewall-openvpn.sh
Editar o ficheiro /etc/network/interfaces e colocar a configuração pre-up na linha logo após o iface eth0 inet static
iface eth0 inet static
pre-up /etc/regras-firewall-openvpn.sh
De forma a ver se até aqui está tudo bem configurado, recomenda-se um reboot ao raspberry
Após o reboot ao Raspberry se tudo correr como esperado, a interface tun0 deve ter sido criada (no meu caso com o ip 192.168.101.1)
Para verificar, basta executar o comando ifconfig e analisar o output.
Criação de Dynamic DNS para resolver o IP Público num nome
Existem muitas plataformas na Internet a oferecer o serviço gratuito de Dynamic DNS, Pessoalmente tenho usado o serviço do noip.com e tem funcionado bem.
Mas para que serve o DNS dinâmico ?
Todos nós usamos em casa um ligação à Internet tipo MEO, NOS, Vodafone, etc ... este tipo de ligações à internet não garante de obtenhamos sempre o mesmo IP público. O IP público está constantemente a mudar, e nós necessitamos de saber qual é para efectuarmos a ligação VPN com o nosso cliente, para tal, o Dynamic DNS vai permitir associar um nome ao IP público que está atribuído na porta WAN do nosso router em casa. Sempre que o IP público muda, o router atravês de uma configuração específica, vai informar o novo IP ao servidor do Dynamic DNS. Também é possível configurar um serviço em linux que informe o noip.com ou outro, que o IP público mudou.
No caso dos routers da MEO, podem fazer esta configuração :
Redireccionamento do Porto UDP 1194 para o Raspberry PI
Após termos o Dynamic DNS a funcionar, o router está pronto a receber pedidos de ligação à VPN através do seu IP Público. Mas há que ter em consideração que o serviço de VPN não é responsabilidade do router mas sim do Raspberry PI. Então o que o router tem que fazer, é redireccionar os pedidos UDP ao porto 1194 para o Raspberry PI. Isso faz-se recorrendo às configurações de redireccionamento de portos. Este tipo de configuração é banal e qualquer tipo de router o faz. No caso do router MEO aqui fica a configuração :Dar um Nome ao Serviço, Escolher entrada Manual
Clicar em Avançar
Escolher protocolo UDP, intervalo de portas de 1194 a 1194 converter em 1194
Escolher Atribuir Jogo ou Aplicação a um dispositivo da rede local, e aqui provavelmente terão que procurar o Raspberry PI pelo seu MAC Address
Após este ponto o router vai passar a redirecionar para o RPI os pedidos à VPN
Escolher Atribuir Jogo ou Aplicação a um dispositivo da rede local, e aqui provavelmente terão que procurar o Raspberry PI pelo seu MAC Address
Após este ponto o router vai passar a redirecionar para o RPI os pedidos à VPN
Configurações do lado do cliente
A parte do servidor, Dynamic DNS e redirecionamento de portas estão arrumadas. Falta agora configura-mos um cliente para testar a solução de ponta a ponta.
Para o meu portátil com windows 7 efectuei o download do software aqui.
Ao executar o cliente Windoes pela primeira vez, deverá abrir a aplicação com privilégios de administrador (botão direito do rato e executar como administrador).
Além do software cliente, deverão retirar do Raspberry os seguintes ficheiros criados no servidor:
ca.crt
cliente.crt (no meu caso sauron.crt)
cliente.key (no meu caso sauron.key)
Aconselho usarem o winscp para transferirem os ficheiros para o portátil.
No windows podem escolher uma directoria para guardar os 3 ficheiros transferidos anteriormente.
Nesta mesma directoria devem criar o ficheiro de configuração do cliente
Deverão criar um ficheiro xxxxxx.ovpn
Fica aqui um exemplo para o meu portatil do ficheiro sauron.ovpn:
client
dev tun
proto udp
# na configuração de remote devem
# colocar o nome que escolherem no Dyn DNS
# para a vossa ligação à NET
remote xxxxxxxx.zapto.org 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert sauron.crt
key sauron.key
comp-lzo
verb 3
Coloquem este ficheiro e os certificados no mesmo directório, depois no Cliente OpenVPN basta clicar no Connection Profiles + e importar o ficheiro.ovpn
Deverão criar um ficheiro xxxxxx.ovpn
Fica aqui um exemplo para o meu portatil do ficheiro sauron.ovpn:
client
dev tun
proto udp
# na configuração de remote devem
# colocar o nome que escolherem no Dyn DNS
# para a vossa ligação à NET
remote xxxxxxxx.zapto.org 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert sauron.crt
key sauron.key
comp-lzo
verb 3
Coloquem este ficheiro e os certificados no mesmo directório, depois no Cliente OpenVPN basta clicar no Connection Profiles + e importar o ficheiro.ovpn
A partir daqui podem testar a VPN.
Se quiserem vários clientes a ligar ao Servidor com o mesmo certificado, então devem acrescentar "duplicate-cn
ResponderEliminar" no ficheiro de configuração do server
Posso ter lido mal, mas não consegui encontrar como se configura uma VPN para o windows, gostava de saber
ResponderEliminarCumprimentos
Olá
EliminarNo tutorial tem uma secção "Configurações do lado do cliente" é onde tem os passos para configurar o cliente do lado do windows.
Com o cliente para windows vai poder ligar-se à VPN e aceder à internet ou Meo GO atravês de sua casa.
Talvez seja por demais evidente e eu não estou a ver, mas não estou a perceber como vejo o MEO GO na raspberry ...
ResponderEliminarOlá, este procedimento não permite ver MEO GO no raspeberry, não é essa a utilidade do raspberry.
ResponderEliminarO raspberry serve de servidor de vpn, para que possas de fora de casa, te ligares a casa usando uma vpn.
Depois de teres o túnel (vpn) estabelecido até casa, configuras o teu browser para usar um proxy (previamente) configurado em casa.
E através desse proxy vais visualizar os canais da MEO GO.
Porque é que funciona ? porque os pedidos aos servidores MEO GO "saem" de tua casa, e é suposto o serviço funcionar quando estas em casa.
Deu para entender ?
Obrigado pela informação partilhada. Ainda não experimentei, estou à espera do meu Raspberry, mas com tanto detalhe, estou confiante. Ainda para mais de um óbvio aficionado do grande JRR Tolkien, só pode ser bom material ;)
ResponderEliminarCom esta instalação posso navegar pela internet ninguém saber o meu ip de casa?
ResponderEliminarNão,
EliminarEsta instalação permite que você (esteja onde estiver) faça um túnel até casa, e que a navegação para a internet seja feira a partir de casa. EX:
Ao pedir uma página o trafego faz este sentido Escola --(túnel)--> Casa ---> Internet
O trafego de resposta ao pedido faz este sentido Internet --> Casa --(túnel)--> Escola
Portanto o IP publico utilizado na navegação será o IP configurado no Router de sua casa.