OpenVPN para clientes Windows no Debian Squeeze

Usar uma VPN (Virtual Private Network) permite você compartilhar e acessar arquivos de uma rede local estando fora dela. Como o próprio nome sugere, você virtualiza a rede para conseguir fazer parte dela, conseguindo assim, até imprimir em uma impressora local que esteja na rede. E claro, você consegue trabalhar de casa, se for necessário.

[ Hits: 58.420 ]

Por: Pedro Franca em 23/07/2012


Instalação



Instalando o OpenVPN

Todo ambiente foi testado na distribuição Debian Squeeze.

Em primeiro lugar, vamos atualizar o APT:

# apt-get update
# apt-get upgrade


Agora fazemos a instalação do OpenVPN e do OpenSSL, para poder gerar os certificados.

# apt-get install openvpn openssl

Após a instalação, temos que criar uma pasta dentro da pasta "openvpn" em /etc/openvpn, chamada "easy-rsa".

Então execute:

# mkdir /etc/openvpn/easy-rsa

Agora temos que copiar todos os scripts para o diretório "openvpn" para ficar mais fácil a administração da VPN e suas chaves.

Execute

# cp -rp /usr/share/doc/openvpn/examples/easy-rsa/2.0/. /etc/openvpn/easy-rsa/

Pronto, agora estamos prontos para configurar nossas chaves de acesso, tanto do cliente como do servidor.

O próximo passo é editar o arquivo "vars" dentro do diretório /etc/openvpn/easy-rsa/.

No final do arquivo, temos as seguintes informações:

# Don't leave any of these fields blank.

export KEY_COUNTRY="Brasil" # SEU PAIS
export KEY_PROVINCE="Sao Paulo" # SUA CIDADE
export KEY_CITY="Sao Paulo" # SUA CIDADE
export KEY_ORG="Sua Empresa" # SUA EMPRESA
export KEY_EMAIL="Seu e-mail" # O E-MAIL DO ADMINISTRADOR


Troque estas informações pelas suas, da sua empresa no caso.

Então execute:

# nano vars

Faça as alterações, salve e saia.

Agora, dentro do diretório easy-rsa/, execute o seguinte:

# source vars

* Uma coisa muito importante antes de criar qualquer certificado novo, ou quando você alterar qualquer informação dentro desse arquivo "vars", você precisa executar esse comando, para as informações serem lidas novamente.

Por padrão, os certificados são gerados para expirar de 10 em 10 anos, muito tempo, mas se você quiser alterar este tempo, é só editar o arquivo "vars", e na opção:

# In how many days should certificates expire?
export KEY_EXPIRE=3650 # DIAS QUE DURAM SEU CERTIFICADO


Nesta opção você limita o número de dias que seu certificado será válido. Não esqueça de executar o comando source vars quando salvar e sair.

Agora vamos criar uma nova pasta dentro do diretório easy-rsa, chamada "keys". Nesta pasta ficarão todos os certificados criados para os clientes.

Execute:

# mkdir /etc/openvpn/easy-rsa/keys

Agora temos que criar os certificados raiz que ficará no servidor, para isso, no diretório /etc/openvpn/easy-rsa, temos o script "build-ca", entre nesse diretório:

# cd /etc/openvpn/easy-rsa

Execute o seguinte:

# ./build-ca

Saída do comando:
Country Name (2 letter code)
State or Province Name (full name)
Locality Name (eg, city) [SUACIDADE]:
Organization Name (eg, company)
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address [seuemail@seudominio.com.br]:


Este script vai pedir uma série de informações sobre a sua região, é só seguir o padrão do arquivo "vars" que foi editado lá no começo.

Feito isso, dentro da pasta "keys", terão 4 arquivos:
  1. ca.crt
  2. ca.key
  3. index.txt
  4. serial

Dentro do mesmo diretório "easy-rsa", temos que executar o seguinte script "build-key-server", este script será a chave do servidor, no caso, mais uma camada de segurança para seus dados.

Então execute:

# ./build-key-server NOME DO SEU SERVER

Este script vai pedir uma senha que será sempre solicitada quando o usuário for fechar a VPN, vai do seu nível de segurança colocar ou deixar em branco.

No final o script, vai perguntar se você deseja realmente assinar o certificado, se você preencheu as informações corretas pressione: y
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y


Agora, finalmente vamos criar as chaves de acesso para os usuários

No mesmo diretório "easy-rsa", execute o seguinte script:

# ./build-key usuariodavpn

Este certificado pedirá algumas informações, assim que informar todas as informações corretas, aperte o Y para confirmar.

Ele também pedirá uma senha, se quiser colocar, fique à vontade.

Reforçando a segurança

Agora vamos reforçar a segurança da VPN.

Dentro do Diretório "easy-rsa", execute o seguinte script:

# ./build-dh

Aguarde terminar. Em seguida, vamos criar uma assinatura de uma chave secreta para a troca de informações. Então execute:

# cd /etc/openvpn/easy-rsa/keys

E depois:

# openvpn - -genkey - -secret chave.key

Estes 2 scripts geraram as chaves de segurança no diretório /etc/openvpn/easy-rsa/keys

Pronto, agora vamos criar o seguinte diretório:

# mkdir /etc/openvpn/keys

Dentro deste diretório, temos que copiar algumas chaves de acesso para ele, são elas:
  • dh1024.pem
  • ca.crt
  • servervpn.crt
  • servervpn.key
  • chave.key

Estas chaves foram criadas dentro do diretório /etc/openvpn/easy-rsa/keys, é só copiar todas para o novo diretório criado em /etc/openvpn/keys

# cp -a /etc/openvpn/easy-rsa/keys/dh1024.pem ca.crt servervpn.crt servervpn.key chave.key /etc/openvpn/keys/

    Próxima página

Páginas do artigo
   1. Instalação
   2. Configuração
Outros artigos deste autor

Monitoração com Zabbix no Debian Squeeze

O poderoso Nagios

Proxy transparente com Squid, com controle de banda e bloqueio por horários

Leitura recomendada

Configurando o modem Lucent USB no RH 9

Traceroute com ICMP e TCP

Instalando drivers para placas de vídeo SiS

Instalando o Linuxlogo no título do console TTY do Debian

Fedora Core 1 :: Firewall e update

  
Comentários
[1] Comentário enviado por rony_souza em 23/07/2012 - 11:28h

mandouu muiiiitoooo!!!!!

#wald feelings!

[2] Comentário enviado por gilsonleao em 24/07/2012 - 20:08h

Parabéns! Muito bom cara!!!

[3] Comentário enviado por lanay em 26/08/2012 - 11:01h

Parabéns, muito bom seu artigo!

[4] Comentário enviado por sdevil em 31/01/2013 - 14:03h

Amigo gostaria da sua ajuda!
Minha VPN conecta mais não consigo ping na minha rede atraves da VPN, meu servidor não tem firewall. Uso um roteador tp link onde ja criei uma vpn virtual no mesmo. mas não consigo!
M e ajude porfavor!

[5] Comentário enviado por waldemf em 31/01/2013 - 16:39h

Olá, sdevil!
Apenas com essa descrição fica difícil ajudar, posso adiantar uma coisa, para você conseguir pingar sua rede, precisa de uma regra de roteamento de pacotes, um ex: no tutorial à cima se não tiver essa regra no firewall:

# iptables -t filter -A INPUT -p udp --dport 1194 -j ACCEPT
# iptables -t filter -A FORWARD -p udp -s 192.168.0.0/24 --dport 1194 -j ACCEPT
# iptables -t filter -A FORWARD -p udp -d 192.168.0.0/24 --sport 1194 -j ACCEPT
# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 10.0.0.0/24 -j ACCEPT
# iptables -t nat -A POSTROUTING -d 192.168.0.0/24 -s 10.0.0.0/24 -j ACCEPT
# iptables -t nat -I POSTROUTING -s 10.0.0.0/24 -o eth1 -j MASQUERADE

O mesmo não funciona corretamente, dentro dos roteadores existe uma opção de roteamento de pacotes, a idéia seira você fazer uma ponte de uma faixa de ips para a outra conforme a regra à cima.

[6] Comentário enviado por sdevil em 31/01/2013 - 19:17h

BLZ, so que eu não tenho nehum firewall instalado na rede ja fiz uma ponte no roteador TpLink
Minha faixa de ips e 172.19.7.0 255.255.255.0
GW 172.19.7.150 (Roteador)
DNS ' s 172.19.7.150 + 172.19.7.200.

mesmo assim devo add esses comando acima subs o 192.168.0.0/24 por minha faixa que vai funcionar ?

[7] Comentário enviado por waldemf em 01/02/2013 - 08:21h

Você pode tentar, mais não esqueça de trocar "192.168.0.0/24" por sua faixa de ips, ok?

[8] Comentário enviado por sdevil em 01/02/2013 - 12:45h

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

Não tenho que colocar esse comado ?

[9] Comentário enviado por waldemf em 04/02/2013 - 19:43h

Olá, sdevil

Esse comando "echo 1 > /proc/sys/net/ipv4/ip_forward" é responsável pelo encaminhamento de pacotes utilizado pelo módulo iptables_nat, usamos esse comando no scritp do firewall para compartilhar a conexão com o squid por ex.
Geralmente esse comando é acompanhado de mais 2 no script do firewall:

########################################
#modprobe iptable_nat #
#echo "1" > /proc/sys/net/ipv4/ip_forward <----- #
#iptables -t nat -A POSTROUTING -o $eth1 -j MASQUERADE#
#######################################

Acredito que você não vá usar ele no seu router uma vez que esse comando é próprio do linux para o iptables.

;)

[10] Comentário enviado por sdevil em 07/02/2013 - 10:51h

iptables -t filter -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -t filter -A FORWARD -p udp -s 172.19.7.0/24 --dport 1194 -j ACCEPT
iptables -t filter -A FORWARD -p udp -d 172.19.7.0/24 --sport 1194 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.19.7.0/24 -d 10.0.0.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -d 172.19.7.0/24 -s 10.0.0.0/24 -j ACCEPT
iptables -t nat -I POSTROUTING -s 10.0.0.0/24 -o eth1 -j MASQUERADE

Realizei o procediemnto como sugerido criei um arquivo em /etc/init.d/firewall com essas informações. dei permissão a ele e o pus no rcconf
mesmo assim conecto a vpn mais não ping na minha rede local!

Me ajudem!

[11] Comentário enviado por sdevil em 07/02/2013 - 11:44h

Essa e minha tabela de roteamento do servidor VPN

Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
10.0.0.2 * 255.255.255.255 UH 0 0 0 tun0
10.0.0.0 10.0.0.2 255.255.255.0 UG 0 0 0 tun0
172.19.7.0 * 255.255.255.0 U 0 0 0 eth1
default 172.19.7.150 0.0.0.0 UG 0 0 0 eth1


Tem alg errado ?


[12] Comentário enviado por sdevil em 07/02/2013 - 19:13h

Agradeço a ajuda mais consegui resolver parcialmente meu problema dessa forma!

iptables -A INPUT -i eth1 -d 172.19.10.1/32 -p udp -m udp --dport 1194 -j ACCEPT
iptables -A FORWARD -i tun0 -s 172.19.10.0/24 -d 172.19.7.150/32 -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A FORWARD -i tun0 -s 172.19.10.0/24 -d 172.19.7.200/32 -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A FORWARD -i tun0 -s 172.19.10.0/24 -d 172.19.7.250/32 -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A FORWARD -i tun0 -s 172.19.10.0/24 -d 172.19.7.100/32 -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A FORWARD -i tun0 -s 172.19.10.0/24 -d 172.19.7.150/32 -p udp -m udp --dport 53 -j ACCEPT
iptables -A FORWARD -i tun0 -s 172.19.10.0/24 -d 172.19.7.200/32 -p udp -m udp --dport 53 -j ACCEPT
iptables -A FORWARD -i tun0 -s 172.19.10.0/24 -d 172.19.7.250/32 -p tcp -m udp --dport 53 -j ACCEPT
iptables -A FORWARD -i tun0 -s 172.19.10.0/24 -d 172.19.7.100/32 -p tcp -m udp --dport 53 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
------------------------------------------------------------------------------------------------------------------------

O novo problema e so ping para o 172.19.7.150 não ping para as outras maquina!

[13] Comentário enviado por waldemf em 08/02/2013 - 16:29h

Olá, sdevil

Tente desativar o firewall desse máquina de for Windows.

Abs!

[14] Comentário enviado por m29 em 20/03/2013 - 11:42h

estranho passei um tempão achando que o openvpn ubuntu matriz e filial windows não tava funcionando pq não pingava mas funciona sem pinga que estranho troquei arquivo pela vpn funfo legal mas não pinga que estranho

[15] Comentário enviado por ferreiralinux em 01/04/2013 - 11:34h

Bom dia

Segui todo seu manual, mas o openvpn não startou no servidor, abaixo detalhe da minha rede.

Ip Rede interna : 192.168.1.0/24

Router : 192.168.1.5

DNS: 192.168.1.1 192.168.1.5


Como devo colocar o server.conf a configuração?

Como criar uma rota no router?

o erro ao inicializar é Options error: --server directive network/netmask combination is invalid
Use --help for more information.


Estou precisando muito da ajuda.



[16] Comentário enviado por alexandrevl em 23/05/2013 - 13:10h


[12] Comentário enviado por sdevil em 07/02/2013 - 19:13h:

Agradeço a ajuda mais consegui resolver parcialmente meu problema dessa forma!

iptables -A INPUT -i eth1 -d 172.19.10.1/32 -p udp -m udp --dport 1194 -j ACCEPT
iptables -A FORWARD -i tun0 -s 172.19.10.0/24 -d 172.19.7.150/32 -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A FORWARD -i tun0 -s 172.19.10.0/24 -d 172.19.7.200/32 -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A FORWARD -i tun0 -s 172.19.10.0/24 -d 172.19.7.250/32 -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A FORWARD -i tun0 -s 172.19.10.0/24 -d 172.19.7.100/32 -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A FORWARD -i tun0 -s 172.19.10.0/24 -d 172.19.7.150/32 -p udp -m udp --dport 53 -j ACCEPT
iptables -A FORWARD -i tun0 -s 172.19.10.0/24 -d 172.19.7.200/32 -p udp -m udp --dport 53 -j ACCEPT
iptables -A FORWARD -i tun0 -s 172.19.10.0/24 -d 172.19.7.250/32 -p tcp -m udp --dport 53 -j ACCEPT
iptables -A FORWARD -i tun0 -s 172.19.10.0/24 -d 172.19.7.100/32 -p tcp -m udp --dport 53 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
------------------------------------------------------------------------------------------------------------------------

O novo problema e so ping para o 172.19.7.150 não ping para as outras maquina!


Pessoal tavez isso ajude. eu tava com o mesmo problema, inseri no arquivo server.conf a linha : client-to-client entao pingara entre as maquinas client e servidor.

[17] Comentário enviado por jairredes em 29/06/2013 - 21:20h

Ola,
Gostaria de saber o que é nescessario configurar no servidor:

Tem que mexer no roteador para configurar redirecionamento de ip?
Como o cliente vai 'enxergar' o servidor se tenho um ip internet dinamico?


obrigado pela atenção,
Jair

[18] Comentário enviado por mbrainiac em 04/10/2013 - 12:24h

Olá tive problemas no passo ./build-key-server Nome do Servidor

Dá este erro:

http://img10.imageshack.us/img10/5387/km3u.png

[19] Comentário enviado por mbrainiac em 08/10/2013 - 11:28h

Travei na parte de 'reforçando a segurança" depois de ./build-dh
#cd /etc/openvpn/easy-rsa/keys
keys#opevpn - -genkey - -secret chave.key
Option Error: I'm trying to parse "- " as an --option parameter but I don't see a leading '--'

Use --Help for more information


parece que o comando"opevpn - -genkey - -secret chave.key" tem outro parâmetro

[20] Comentário enviado por EderAC em 16/03/2014 - 07:22h


[19] Comentário enviado por mbrainiac em 08/10/2013 - 11:28h:

Travei na parte de 'reforçando a segurança" depois de ./build-dh
#cd /etc/openvpn/easy-rsa/keys
keys#opevpn - -genkey - -secret chave.key
Option Error: I'm trying to parse "- " as an --option parameter but I don't see a leading '--'

Use --Help for more information


parece que o comando"opevpn - -genkey - -secret chave.key" tem outro parâmetro




.... tire os espaços do - - (--) que funciona :D...!!!

[21] Comentário enviado por EderAC em 27/05/2014 - 21:31h

Eu consegui fazer pingar em modo tap com protocolo tcp

Configuração do server

##Protocolo de Conexão
proto tcp
# Porta do servico
port 1194
# Drive da interface
dev tap
# Atribui endereços dinâmicos a vários clientes, ips para o túnel VPN
server 192.168.0.0 255.255.255.0
# Acrescenta rotas aos clientes, informações da rede local
push "route 172.16.10.0 255.255.255.224"
push "dhcp-option DNS 172.16.10.1"
push "dhcp-option WINS 172.16.10.1"
# Configurações adicionais no cliente
push "ping 10"
push "ping-restart 60"
# Rotas do servidor
#route 10.0.0.0 255.255.255.0
client-to-client
# Compactacao lib LZO
comp-lzo
keepalive 10 120
float
ifconfig-pool-persist /etc/openvpn/ipp.txt
max-clients 10
persist-key
persist-tun
log-append /var/log/openvpn.log
verb 6
# Servidor TLS
tls-server
# Chaves necessárias
dh /etc/openvpn/keys/dh1024.pem
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/debian.crt
key /etc/openvpn/keys/debian.key
# Chave secreta do servidor
tls-auth /etc/openvpn/keys/chave.key
status /var/log/openvpn.stats
;
Com o servidor VPN em uma classe diferente das interfaces do servidor fisico (logico), e sem a necessidade de uma rota, como podem perceber está comentada (#). E também a não menos importante, a regra de direcionamento de porta no iptables:

iptables -t nat -s 192.168.0.0/24 -A POSTROUTING -o eth1 -j MASQUERADE

lembrado que o arquivo de configuração do cliente também tem que ser mudado para tap e tcp... isso aew galera flw!






[22] Comentário enviado por vincentlinux em 28/07/2014 - 15:03h

Ola! sou usario do Debian, particularmente gosto muito dessa distribuição

Usei deu post como base para criar uma VPN e funcionou correto, no inicio tive alguns problemas para me conectar ao servidor, pensei que fosse meu firewall, mas descobri que era o modem ADSL, pois precisei retirecionar a conexao para o IP do meu servidor feito isso, tudo certo.

Bom, quando criei a VPN cadastrei apenas um cliente, agora preciso cadastrar pelo menos mais 10, a pergunta é preciso fazer tudo de novo ou tem algum meio para cadastrar novos clientes?

grato


[23] Comentário enviado por alex--gba em 01/10/2015 - 16:27h

Boa tarde!
Sou novo em linux e estou com algumas duvidas de como configurar uma VPN.
MEu cenário consiste no seguinte:

1. Maquina com Windwos 7 com apenas uma placa de rede IP:192.168.0.10

1. Maquina com Debian com duas placas de redes "ETH0=onde recebe a internet/ IP:177.103.134.220 " e "eth1=onde distribuo a internet para rede local que seria a maquina com Windos 7 a primeira que falei IP:192.168.0.1"
1. Maquina com Windwos 7 que será a maquina que usarei para acessar a primeira maquina com Windows 7 que mencionei acima IP:DHCP .

Minha duvida e a seguinta quais informações devo colocar no push "route xxx.xxx.x.x xxx.xxx.xxx.x" ,push "dhcp-option DNS xxx.xxx.x.xxx".push "dhcp-option WINS xxx.xxx.x.xxx" do arquivo serv.conf com as informações que passei?
E quais informações devo colocar no remote xxx.xxx.xxx.xxx do arquivo cliente com as informações que passei?



Agradeço pela ajuda desde já.

[24] Comentário enviado por amaxsilva em 13/10/2016 - 16:10h

olá, boa tarde, estou seguindo este tutorial, porem fiz os primeiros passos , mas quando busco o arquivo /usr/share/doc/openvpn/examples, dentro dele não possui o easy-rsa, dai em diante não consigo prosseguir a instalação, podem me ajudar ?

[25] Comentário enviado por felipelinux3ds em 10/04/2017 - 01:33h

Esses comandos funcionam no ubuntu serve?
Pois pelo menos aqui n.

[26] Comentário enviado por zurczurc em 23/08/2017 - 10:15h

Excelente artigo, mas preciso conectar a uma vpn corporativa, me forneceram um arquivo .ovpn que tem dentro os endereços de configuração com varias chaves de certificado e chaves de autenticação. No windows foi ultra simples instalei o cliente e coloquei o arquivo na pasta config, mas no Linux .


Cesario


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts