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).
Durante algum tempo procurei uma forma segura para acessar meu desktop Linux do trabalho remotamente, a fim de facilitar na administração da rede. Ora ou outra, principalmente a noite e nos fim de semana, surgem problemas nos servidores ou no processamento que precisam ser resolvidos imediatamente. Para tal, precisava me locomover de casa até o trabalho, sendo que na maioria das vezes eram problemas simples, que poderiam ser resolvidos com poucos comandos ou configurações, e eu perdia um enorme tempo somente com a locomoção. Adicione a isso vários outros administradores (que na verdade são programadores e que utilizam Windows), necessitando acessar essa mesma rede para correções de erros ou configurações em programas quando eventual problema acontecia.
Pensando numa forma de facilitar na administração da nossa rede, de forma remota, ou seja, a partir de qualquer lugar e independente da plataforma operacional usada para acessar (Linux ou Windows), é que resolvi pesquisar e me aprofundar no assunto.
Achei diversas "receitas de bolos" que mostravam como fazer, mas encontrei nenhuma que me satisfizesse por completo, não queria apenas um nível de segurança, como acesso direto por ssh, como também gostaria de acessar meu desktop, afinal o ambiente da empresa é misto, ou seja, temos servidores com Linux, AIX e Windows, e para administrar os serviços Windows necessito de acesso ao seu desktop.
Enfim, após muita pesquisa e quebra-cabeça, descobri uma solução com OpenVPN + NxServer, sendo seus serviços disponibilizados numa máquina com Linux no meu trabalho. Neste computador temos instalado:
Ambiente desktop (KDE);
Um pacote chamado rdesktop, que na verdade é uma implementação cliente/servidor do próprio protocolo rdesktop utilizado pela Microsoft para o serviço de Terminal Service (esse programa é que faz a ponte de conexão para os desktops Windows na nossa rede);
O servidor de VPN: OpenVPN
Um programa que compartilha o desktop desta máquina (NxServer) e que permite a conexão remota a partir da minha casa, independente do SO utilizado para me conectar (Linux ou Windows) ao desktop deste computador no trabalho.
Servidor SSH.
O OpenVPN é um dos vários pacotes para Linux desenvolvidos para a criação de VPN (Virtual Private Network), existem outros como OpenSwan e outras formas de fazer, como por exemplo usar Ipsec, que é uma implementação do protocolo IP com segurança ou criptografia, feita pelo próprio kernel do Linux. Utilizei o OpenVPN por ser fácil de configurar e pela extensa documentação que o acompanha.
O NxServer é um serviço de compartilha a área de trabalho de um computador com Linux, igual ao VNC, só que muito mais rápido e seguro, permitindo acesso a até dois usuários simultaneamente, cada um com uma sessão independente e onde todos os dados transmitidos são criptografados. Lembrando que o próprio protocolo X (XFree86 ou Xorg) oferece a possibilidade de acesso remoto seguro em cima do protocolo SSH, isto é exatamente o que o NxServer faz.
Desta forma, teremos dois níveis de segurança, sendo um criado pelo túnel VPN e o outro pela implementação de segurança do pacote Nx.
Exemplo do diagrama da VPN:
Baseando-se no diagrama acima, verifica-se que usando a internet a partir de casa, criamos um túnel seguro com OpenVPN para acessar um servidor na empresa, o qual tem seu desktop compartilhado pelo NxServer, e a partir deste, acessamos a área de trabalho de qualquer computador com Windows XP ou 2003 usando o protocolo rdesktop, que é nativo do Windows para aplicações de Terminal Server.
[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