VPN - usando SSH

Este artigo ensina como fazer o SSH trabalhar como uma VPN.

[ Hits: 77.464 ]

Por: Perfil removido em 27/01/2012


Estabelecendo a conexão - Túnel ponto a ponto



Depois de realizar a configuração no servidor, é hora de estabelecer a conexão com o mesmo e começar a usar sua VPN.

Logado como 'root' (no cliente), digite no terminal o comando abaixo:

# ssh -f -w 0:0 -o Tunnel=ethernet root@192.168.222.33 ifconfig tap0 10.5.5.1 netmask 255.255.255.0

Obs.: É necessário digitar usando o usuário 'root', pois só ele tem poder administrativo para gerar o dispositivo virtual no servidor e no cliente. A autenticação realizada vai seguir a configurada no servidor, pode ser através da senha do 'root' ou através das chaves de autenticação ( o que é mais seguro).

Caso digite o comando sem o usuário 'root' ter permissão de se logar via SSH (configuração feita no "/etc/ssh/sshd_config" na primeira página), provavelmente um erro como o mostrado abaixo será retornado:
Tunel device open failed
Could not request tunnel forwarding

Caso apareça este outro erro descrito abaixo, significa que, ou o SSH do servidor não está usando uma versão mais antiga ou a opção 'PermitTunnel' está desabilitada:
SIOCSIFADDR: Dispositivo inexistente
tap0: ERROR while getting interface flags: Dispositivo inexistente
SIOCSIFNETMASK: Dispositivo inexistente

Explicação das opções usadas:
  • -f:- Esta opção faz com que o comando seja executado em background e não fique ocupando seu terminal durante a execução.
  • -w 0:0:- É usada para criar o túnel, neste caso criando a interface 'tap0' no cliente e a interface 'tap0' no servidor.
  • -o Tunnel=ethernet:- Indica que deve ser criada uma interface virtual TAP. O default do SSH (quando a opção é omitida) é criar uma interface TUN. A grande diferença entre as duas é que a interface TAP pode ser usada para criar um 'bridge', o que permite efetivamente unir as duas redes.
  • root@192.168.222.33:- O '192.168.222.33' representa o endereço IP do servidor, e deve ser substituído pelo endereço IP do seu servidor SSH. O "root" refere-se ao usuário que irá logar no servidor.
  • ifconfig tap0 10.5.5.1 netmask 255.255.255.0:- Configura o endereço IP e a máscara que será usada pela interface 'tap0' que será criada no servidor. Você pode usar o endereço e máscara que quiser, mas ela deve ser diferente da faixa de IPs usada na rede local.

Após executar o comando no cliente e não ter gerado algum erro como comentado no inicio da página, logue no servidor como 'root' e execute o comando:

# ifconfig

E veja que a interface 'tap0' foi criada:
tap0 Encapsulamento do Link: Ethernet Endereço de HW EA:CE:66:FB:1A:DG
inet end.: 10.5.5.1 Bcast:10.5.5.255 Masc:255.255.0.0
endereço inet6: fe80::e8ce:ecff:fefb:1add/64 Escopo:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Métrica:1
pacotes RX:4 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:26 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:500
RX bytes:328 (328.0 b) TX bytes:4317 (4.2 KiB)

Observe que foi criado até um MAC para a interface virtual.

Agora é hora de configurar a interface 'tap0' do cliente que ainda não foi ativada. Para isto, execute no terminal como 'root':

# ifconfig tap0 10.5.5.2 netmask 255.255.255.0 up

Teste, usando o ping:

# ping -c 3 10.5..5.1
Página anterior     Próxima página

Páginas do artigo
   1. Introdução e configuração do servidor
   2. Estabelecendo a conexão - Túnel ponto a ponto
   3. Definindo rotas
Outros artigos deste autor

Linux + Rails + Ruby + Mongrel + PostgreSQL + NetBeans 6 Preview

Multiboot pelo pendrive usando grub2: instalando várias distros a partir de uma unidade de armazenamento móvel

Introdução a CGI com a RFC 3875

Prevenindo problemas com impressoras via Samba no Windows

Utilizando GMail (Google Mail) em seu cliente de email favorito

Leitura recomendada

Como submeter dados de CDDB de um CD de áudio ao Freedb

Instalando o Linux em HD SATA (SCSI)

Executando máquinas virtuais diretamente no GDM

Recuperando imagem ISO com falha usando JIGDO

História da informática: Um pouco de datas e especificações

  
Comentários
[1] Comentário enviado por hwarang em 27/01/2012 - 13:48h

Muito legal a dica!!!
Valews!!!

[2] Comentário enviado por removido em 27/01/2012 - 14:21h

Boa dica !

[3] Comentário enviado por dimasdaros em 27/01/2012 - 18:01h

Excelente dica.
Vou testar assim que chegar em casa.

Muito obrigado =)

----
Edit

Ocorreu tudo certo, muito massa
Cada dia aprendo uma coisa nova à respeito do SSH, redirecionamento de porta, abrir arquivo com X localmente, VPN.

E viva o espirito livre :P

[4] Comentário enviado por cesarufmt em 30/01/2012 - 10:09h

Já vou testar hoje.
Chegou em ótima hora!
Valeu demais! o//

[5] Comentário enviado por ricardoolonca em 01/02/2012 - 08:58h

Simples e eficiente. Parabéns pelo artigo.

[6] Comentário enviado por arthurmatiello em 02/02/2012 - 22:46h

OTIMO ARTIGO, ADICIONADO AOS FAVORITOS

[7] Comentário enviado por removido em 07/02/2012 - 19:01h

Obrigado pelos comentários..

Espero que ajude a muitos que necessitam criar uma vpn sem a necessidade configurações mais complexas.

Abraço...

[8] Comentário enviado por ragen em 23/02/2012 - 23:01h

Olá Edson,

Lendo o artigo pensei: ótimo, é uma mão na roda não precisar mais fazer chaves pro OpenVPN... Mas ai me ocorreu que e SE hipoteticamente alguém ganhar acesso à um servidor seu ele pode pular em efeito cascata para os demais tendo se houver autenticação por troca de chaves.

O pior já seria dado a shell de root para qualquer atacante que por exemplo bootasse sua máquina em modo single. Já parou para pensar nisso?

Mas não deixo de parabenizá-lo pelo excelente artigo e didática.

Abraço!

[9] Comentário enviado por removido em 24/02/2012 - 13:48h

Amigo ragen Obrigado pelo comentário e sua observação foi bem feita,

Mas...

Primeiro para acessar servidores usando autenticação com chaves de segurança é aconselhavel usar chaves com senha, para que se tenha mais segurança.

Segundo para acessar um servidor fisicamente, só pode alguém com permissão e não é qualquer um que pode, além de poder usar autenticação para manipular a edição das opções de boot e linha de comando do grub;

Mas caso alguém consiga acesso via ssh usando o usuário root, tem como limitar o usuário root localmente no servidor ssh, fiz uma observação na primeira página explicando que no arquivo de configuração do servidor ssh tem uma opção para "limitar" os recursos que o usuário root pode usar, fazendo com que o mesmo não consiga fazer login, Mas para fazer isso é necessário mais configurações no servidor para permitir os comandos remotamente.


[10] Comentário enviado por renato_pacheco em 28/02/2012 - 17:24h

Engraçado... não sabia q dava pra criar um túnel apenas com o SSH, mas os procedimentos (e até alguns parâmetros) são bem parecidos com os procedimentos do OpenVPN.

Show d bola!

[11] Comentário enviado por tonnytg em 07/01/2013 - 10:03h

Parabéns, ficou muito bem explicado.
Costumo usar o SSH para fazer tuneis redirecionando portas com: ssh -L 5901:localhost:5901 root@destino
Assim consigo abrir a porta 5901 do destino na minha própria máquina localhost:5901.

[12] Comentário enviado por kadu137 em 05/06/2013 - 22:39h

Ótima dica, é bom lembrar que se o IP do VPNServer(SSH) estiver no mesmo range da sua rede remota (um caso hipotético seria: rede com IP's reais de uma grande instituição), no momento que vc adicionar a rota para a rede, a conexão com 10.5.5.1 vai cair, porque ela já estava estabelecida através da sua máquina client WAN.

Aconteceu comigo e a solução em vez de criar a rota para a rede tora "- net" fiz um loop e criei por host "-host" e coloquei um if se chegar no ipsshserver.

Resumindo:

#LOOP Para adicionar Rota atraves da VPN
for ip in `seq 1 254`;do
if [ $ip -ne "SUFIXO IP SSHSERVER (ex.:190)" ];then
route add -host $PREFIXO.$ip/32 gw 10.5.5.1 dev tap0;
fi;
done

abraços.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts