Administrando redes de computadores remotamente e de forma segura, usando OpenVPN e NxServer para acessar áreas de trabalho compartilhadas na sua rede. Essencial quando se tem ambientes mistos com vários Sistemas Operacionais (Linux, Windows e etc).
1. Todos os procedimentos de instalação foram feitos usando a distribuição Debian e kernel 2.6, sendo que suponho que você já tenha um ambiente gráfico instalado, no caso o KDE.
2. Utilizei o OpenVPN baseado no protocolo PPTP (point-to-point-tunneling-protocol), sendo que para funcionar é necessário o módulo TUN/TAP ativo no kernel.
2.1. Verifique em /lib/modules/versão-do-kernel/kernel/drivers/net/ se existe o arquivo tun.ko.
2.2. Se não existir, é necessário compilar este módulo no kernel, não explicarei nesta documentação como realizar tal procedimento.
3. Instale os pacotes openvpn, openssl, ssh e rdesktop:
4.1. Por questão de dependência, é necessário baixar e instalar o nxclient, nxnode e nxserver, nessa ordem respectivamente.
4.2. Ex: dpkg -i nxclient_2.1.0-11_i386.deb
5. Configurando o openvpn
5.1. Existem vários modos de operação no openvpn, como Point-toPoint, Secret e TLS, estou utilizando o modo TLS porque é o mais seguro. Não irei detalhar como funciona os outros modos citados acima.
No caso do TLS, para utilizá-lo é preciso criar uma autoridade certificadora (ca), um certificado (cert), a chave privada (key) e a chave Diffie Hellman (dh), que é responsável por autenticar a chave pública usada no cliente. Junto com o pacote openvpn vem alguns scripts que auxiliam na criação desses arquivos. Copie a pasta /usr/share/doc/openvpn/examples/easy-rsa para /etc/openvpn/, então acesse /etc/openvpn/easy-rsa/2.0/.
5.2. Execute os comandos abaixo preenchendo as informações necessárias:
# ./clean-all # para limpar todos os certificados, se eles existirem
# ./build-ca # cria a autoridade certificadora
# ./build-key-server server # cria o certificado e chave privada do servidor com os nomes server.crt e server.key
# /build-dh # cria a chave Diffie Hellman de 1024 bits
# ./build-key-pass cliente # cria a chave pública com senha que deverá ser utilizada pelo cliente, com os nomes cliente.crt e cliente.key. Atenção não esqueça essa senha, ela será usada para a conexão do cliente.
5.3. Todos as chaves e certificados criados serão gravados no diretório /etc/openvpn/easy-rsa/2.0/keys/. Se já não estiver, o faça, e permita que só e somente o root tenha acesso a esse diretório.
5.4. Copie esse diretório keys para /etc/openvpn/.
5.5. Crie e edite o arquivo /etc/openvpn/openvpn.conf com o conteúdo abaixo:
# Arquivo de configuração do servidor VPN
# Interface virtual de rede utilizada
dev tun
# Modo de utilização da VPN
tls-server
# Arquivo de log e seu nível
log /etc/openvpn/vpn.log
verb 3
# Faixa de rede que será utilizada na VPN
# 20.0.0.1 – IP virtual do Servidor
# 20.0.0.2 – IP virtual do Cliente
ifconfig 20.0.0.1 20.0.0.2
# Certificados utilizados para autenticação
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem
# Porta padrão
port 1194
# Definindo o user padrão para executar o
# daemon "openvpn" para nobody
user nobody
group nobody
# Restringe o processo do openvpn somente ao diretório /tmp
chroot /tmp
# Utilizando LZO como biblioteca de compressão
comp-lzo
# Parâmetros utilizados para testar se a conexão
# continua "de pe" e para manter estabelecida em
# caso de firewall statefull
ping 15
# Evita que a interface virtual tun seja reiniciada e
# os arquivos de chaves relidos. Essencial quando
# se utiliza user nobody para execução do processo
persist-tun
persist-key
5.6. Reinicie o serviço openvpn:
# /etc/init.d/openvpn restart
5.7. Execute ifconfig e você verá que foi criada a interface virtual tun0 com IP 20.0.0.1, também será mostrado o IP original do computador (eth0).
5.8. É interessante verificar também os logs do openvpn em /etc/openvpn/vpn.log
6. Configurando NxServer
6.1. Os arquivos de configuração do nx são extensos e a princípio não há alterações a serem feitas, portanto apenas reinicie o serviço nxserver:
# /etc/init.d/nxserver restart
6.2. Para quem quer se aventurar, estejam a vontade para fuçar os arquivos de configuração.
7.0. Pronto, até aqui seu servidor já está pronto para autenticar a VPN e também com o desktop compartilhado.
[1] Comentário enviado por lucas.suporte em 17/05/2007 - 12:00h
Bom artigo cara não olhei tudo mais só o pouco que vi achei mmuito bom, esta é uma solução muito boa!! Pra quem é administrador de rede e quer ter acesso as estações dos clientes.
Parabens
Abraço
Lucas Rocha
[2] Comentário enviado por carlosraniery em 17/05/2007 - 22:20h
Pessoal, estou tendo problemas com o NXClient, quando o executo recebo esta mensagem de erro:
NX> 595 ERROR: A fatal error occurred in NX Server.
NX> 595 ERROR: The exception id is: 6748CCBF. To get detailed information about
NX> 595 ERROR: the error search for the string 6748CCBF in the system log
NX> 595 ERROR: file (usually '/var/log/messages').
Killed by signal 15.
Em meu log tenho o seguinte:
May 17 22:12:25 localhost NXSERVER 2.1.0-22[21200]: ERROR: (exception id 0170694F) main::parse_args called at nxserver.pl line 4496
May 17 22:12:25 localhost NXSERVER 2.1.0-22[21200]: ERROR: (exception id 0170694F) eval {...} called at nxserver.pl line 4493
Estou usando Debian e o NX foi instalado com os .deb. Qualquer idéia eu agradeço.
[5] Comentário enviado por carlosraniery em 18/05/2007 - 20:08h
Opa Bruno, estou usando o Linux sim e o erro ocorre quando, usando o nxclient, tento me logar no servidor. Percebi que logo acima dessas mensagens de erro há uma outra que pode dar uma ideia melhor de qual é o problema:
NX> 148 Server capacity: not reached for user: raniery
[6] Comentário enviado por mpinho em 18/05/2007 - 22:05h
Gostei do artigo mas usar windows em casa eu tô fora. É muito mais prático para administradores Unix/linux usar linux também em casa para essas tarefas de administração remota. No windows tem que ficar instalando um monte de coisas e você fica sem poder fazer testes e acessar os man's localmente.
[7] Comentário enviado por sektor em 19/05/2007 - 16:37h
eu uso openvpn para interligar duas empresas distantes, funciona tudo muito ótimo, e na filial tenho um samba como servidor wins, para as maquinas se enchergarem na rede, quando preciso acessar o servidor remotamente para corrigir alguma coisa, ou ver como esta o andamento do mesmo utilizo o ssh, se eu estiver em uma estação windows, acesso usando o putty, =) muito bom, simples e nao precisa ser instalado, rodo do meu pendrive mesmo...segue o link abaixo para o download...
[9] Comentário enviado por brunaocomanda em 21/05/2007 - 09:03h
MRPINHO.... de acordo com a introdução do artigo, eu utilizo Linux sim em todos os lugares, mas há funcionários aqui na empresa que não utilizam Linux em casa e sim Windows, e como disse, procurava uma forma de acesso independente da plataforma utilizada, pois todos nós precisamos fazer ajustes na nossa rede e aplicações, claro, cada um dentro da sua área.
[10] Comentário enviado por brunaocomanda em 21/05/2007 - 09:07h
Caro SEKTOR... o artigo visa abordar exatamente isso... às vezes, principalmente para servidores com Windows, infelizmente a gente tem, somente SSH não resolve o problema, é preciso acesso ao Desktop e este é um dos focos do artigo, mas claro, nada impede que você acesse os demais servidores UNIX via SSH e isso exatamente que nós fazemos. Essa implemtentação é meio um "canivete suíço", ou seja, várias formas de se usar para vários gostos! =)
[11] Comentário enviado por brunaocomanda em 21/05/2007 - 09:12h
Caro MARDONIO... não, o NX não é a mesma coisa que VNC. Explico: O VNC funciona como "printscreens" da tela, entende? Ou seja, ele fotografa a tela, compacta a imagem e envia para a outra ponta do nó. Por ser assim, acaba sendo muito lento. Diferentemente, o NX passa os parâmetros necessários para que o servidor X monte a tela na outra ponta do nó, como se fossem as cordenadas para se criar outra tela exatamente como aquela está. Por ser assim, apenas comandos, parâmetros, cordenadas, o NX acaba sendo muito mais rápido, e isso faz muita diferença quando se fala em termos de tráfego pela internet.
[12] Comentário enviado por brunaocomanda em 22/05/2007 - 12:03h
Caro Raniery,
Realmente não consegui descobrir o que seja seu problema. Para verificar que não era nenhum tipo de erro no artigo, as vezes faltou algum detalhe, eu fiz uma instalação do Debian total a partir do zero, instalei o sistema básico mais o KDE e segui exatamente todos os passos descritos no artigo para criar o acesso remoto e funcionou perfeitamente, de primeira! Informo que nesta nova instalação, utilizei os drivers genericos do Linux para o vídeo, no caso "vesa" e não fiz alteração alguma em qualquer arquivo de configuração do kde, ssh e etc, apenas criei os ".conf" do openvpn!
[14] Comentário enviado por ricardoolonca em 26/06/2007 - 22:19h
Muito bom artigo. Eu estava com dificuldades da conectar a vpn da empresa através da minha estação Linux de casa. Com algumas pequenas modificações no teu artigo eu consegui numa boa.
[16] Comentário enviado por brunaocomanda em 20/07/2007 - 16:17h
Caiquemd,
Vc deve criar arquivos de configuração, com IP, porta e dispositivo de rede (tun0, tun1, tun2 e etc) diferentes para cada cliente que for acessar a VPN.
Da mesma forma vc configura cada cliente de acordo com cada IP e porta disponibilizados pela VPN. Reinicie o serviço OpenVPN e você verá muitos IPs, cada qual relacionado a cada arquivo de configuração criado. No demais, é tudo igual, inclusive, pode-se utilizar as mesmas chaves. Espero ter ajudado.
[17] Comentário enviado por antonioleite em 26/08/2007 - 17:57h
Amigos ja procurei por diversos artigos e livros e nada é o seguinte: Quando eu executo o ifconfig tun0 da o seguinte erro: TUN0: ERRO obtendo informações da interface: %s dispositivo não encontrado.
Só que eu ja reinstalei o Debian etch umas 1000 vezes e carrego o TUN "modprobe tun" o mesmo esta presente quando dou lsmod e sempre paro ai. Pergunto o que estou fazendo de errado se segui todos os passos acima, eu preciso estar com o outro computador conectado na filial para o TUN subir? Uma ajudinha por favor... Obrigado
[19] Comentário enviado por antonioleite em 27/08/2007 - 14:03h
Eu utilizei o rcconf e o mesmo aparece para iniciar junto com o Debian etch eu até coloquei um link simbolico com o seguinte conteudo
openvpn --config /etc/openvpn/matriz.conf -daemon
e mesmo assim da este erro o que pode ser, sou iniciante tem outra forma de eu ver se o openvpn esta iniciado? ao iniciar o Linux o mesmo ja inicia correto? (/etc/init.d/openvpn restart )
[21] Comentário enviado por brunaocomanda em 30/08/2007 - 13:48h
Caro Antonio Leite,
Para iniciar o OpenVPN no Debian, vc o faz com o comando:
/etc/init.d/openvpn start
Não é necessário passar nenhum parametro. Após o comando execute "ps ax" e verifique se existe um processo para o OpenVPN. Utilize tbem "ifconfig" e veja se foi criado a interface tun0.
[23] Comentário enviado por antonioleite em 31/08/2007 - 06:16h
Amigão
Mudei varias coisas para fazer um teste mais rapido, uma delas era o usuario e grupo nobody que não funcionava entaão criei outro usuario e grupo openvpn e ficou assim com o seguinte erro (não sei se é porta mas ja troquei por varias delas 5000, 5001, 5500, inclusive esta liberada no firewall)
openvpn.conf
dev tun
log /etc/openvpn/vpn.log
ifconfig 10.0.0.1 10.0.0.2
cd /etc/openvpn
secret chave
port 1194
user openvpn
group openvpn
comp-lzo
ping 15
verb 3
vpn.log
Fri Aug 31 06:04:37 2007 OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Jan 21 2007
Fri Aug 31 06:04:37 2007 WARNING: --ping should normally be used with --ping-restart or --ping-exit
Fri Aug 31 06:04:37 2007 WARNING: you are using user/group/chroot without persist-key/persist-tun -- this may cause restarts to fail
Fri Aug 31 06:04:37 2007 Static Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Fri Aug 31 06:04:37 2007 Static Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Fri Aug 31 06:04:37 2007 Static Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Fri Aug 31 06:04:37 2007 Static Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Fri Aug 31 06:04:37 2007 LZO compression initialized
Fri Aug 31 06:04:37 2007 TCP/UDP: Socket bind failed on local address [undef]:1194: Address already in use
[24] Comentário enviado por brunaocomanda em 31/08/2007 - 09:30h
Antonio,
Verifique se sua faixa de IP na rede não é a mesma usada no openvpn.conf (10.0.0.1), se for eles não podem estar na mesma rede. Utilize algo diferente como 10.0.0.1 para a VPN e 192.168.10.1 para a interface eth0 ou qualquer coisa nesse sentido.
Observe também se o modulo tun está compilado para o kernel em uso. tente "modprobe tun". Falowww...
[25] Comentário enviado por fabian em 05/01/2008 - 09:37h
Olá amigos.
Segui passo-a-passo o tutorial mas estou encontrando dificuldades para iniciar o openvpn. Quando executo /etc/initi.d/openvpn me retorna:
Starting virtual private network daemon: openvpn(FAILED).
Fri Apr 25 12:30:30 2008 OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Sep 20 2007
Fri Apr 25 12:30:30 2008 WARNING: --ping should normally be used with --ping-restart or --ping-exit
Fri Apr 25 12:30:30 2008 Cannot open /etc/openvpn/keys/dh1024.pem for DH parameters: error:02001002:system library:fopen:No such file or directory: error:2006D080:BIO routines:BIO_new_file:no such file
Fri Apr 25 12:30:30 2008 Exiting
[27] Comentário enviado por roosevelt_bh em 17/05/2008 - 13:14h
Sat May 17 13:10:22 2008 OpenVPN 2.1_rc7 Win32-MinGW [SSL] [LZO2] [PKCS11] built on Jan 29 2008
Sat May 17 13:10:22 2008 WARNING: using --pull/--client and --ifconfig together is probably not what you want
Sat May 17 13:10:22 2008 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
Sat May 17 13:10:32 2008 Cannot load CA certificate file ca.crt path (null) (SSL_CTX_load_verify_locations): error:02001002:system library:fopen:No such file or directory: error:2006D080:BIO routines:BIO_new_file:no such file: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib
Sat May 17 13:10:32 2008 Exiting
sera que os senhores poderiam me auxiliar neste problema ????
[28] Comentário enviado por brunaocomanda em 18/05/2008 - 10:23h
Caro inguants,
A inicializacao do openvpn deve ser feita como root, pois se trata de um servico dentro do init.d. O usuario e grupo nobody e para uso do proprio daemon depois de iniciado como root. Se nao o tiver fazendo, tente iniciar com o root.
[29] Comentário enviado por brunaocomanda em 18/05/2008 - 10:25h
Caro Roosevelt_bn,
Vc colocou os arquivos ca.crt cliente.crt e cliente.key no diretorio c:/arquivos de programas/openvpn . Esse deve ser o lugar deles. Apos isso crie um arquivo .bat dentro desse mesmo diretorio com o seguinte conteudo:
"C:\Arquivos de programas\OpenVPN\openvpn.exe" --config cliente.ovpn --tls-client
Inicie a vpn a partir desse script. Lembre-se de configurar bem o arquivo cliente.ovpn confomre o artigo.
Desculpes a demora. Boa sorte e estou a disposicao.
[30] Comentário enviado por eesm_redhat em 02/03/2009 - 10:35h
Cara pode me dar um ajudinha
seguinte eu instalei so que quando tento iniciar o servico me aparece a msg abaixo
openvp /usr/local/sbin/openvpn --config /etc/openvpn/incorp.conf --daemon
Options error: Unrecognized option or missing parameter(s) in /etc/openvpn/incorp.conf:32: tls-server (2.0.7)
Use --help for more information.
Fri Apr 25 12:30:30 2008 OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Sep 20 2007
Fri Apr 25 12:30:30 2008 WARNING: --ping should normally be used with --ping-restart or --ping-exit
Fri Apr 25 12:30:30 2008 Cannot open /etc/openvpn/keys/dh1024.pem for DH parameters: error:02001002:system library:fopen:No such file or directory: error:2006D080:BIO routines:BIO_new_file:no such file
Fri Apr 25 12:30:30 2008 Exiting