Comandos do Linux e Unix: Sistema; Processos; Sistema de Arquivos; Rede; SSH SCP; VPN com SSH; RSYNC; SUDO; Arquivos Encriptados; Partições Encriptadas; Certificados SSL; CVS; SVN; Comando Úteis; Instalar Software; Converter Mídia; Impressão; Banco de Dados; Quota de Disco; Shells; Scripting; Programação

VPN com SSH

Como na verão 4.3, o OpenSSH pode usar o dispositivo tun/tap para criptografar um túnel. Ele é bem similar as outras soluções TLS baseado em VPN como o OpenVPN. Uma vantagem do SSH é que não há necessidade de instalar e configurar software adicional. Adicionalmente o túnel utiliza a autenticação SSH como chaves pré-compartilhadas. A desvantagem é que o encapsulamento é feito em TCP que pode resultar em desempenho pobre em um link lento. O túnel também conta com uma única conexão TPC (frágil). Essa técnica é muito útil para uma rápida configuração VPN baseada em IP. Não há limitação como com um único direcionamento de porta TCP, todos os protocolos de camada 3/4 como ICMP, TCP/UDP, etc. são direcionadas no VPN. Em todo caso, as seguintes opções são necessárias no arquivo sshd_conf:

PermitRootLogin yes
    PermitTunnel yes

Conexão única P2P

Aqui vamos conectar dois hosts, hclient e hserver com o túnel ponto a ponto (peer to peer tunnel). A conexão é iniciada do hclient para o hserver e é feita como root. Os pontos finais do túnel estão em 10.0.1.1 (servidor) e 10.0.1.2 (cliente) e nós críamos um dispositivo tun5 (Esse poderia também ter sido um outro número). O procedimento é muito simples:

  • Conect com o SSH utilizando a opção -w do túnel
  • Configure o endereço IP do túnel. Uma vez no servidor e uma vez no cliente.

Conect ao servidor

A conexão iniciada no cliente e os comandos são executados no servidor.

No servidor Linux

cli># ssh -w5:5 root@hserver
    srv># ifconfig tun5 10.0.1.1 netmask 255.255.255.252   # Executado no shell do servidor

No srevidor FreeBSD

cli># ssh -w5:5 root@hserver
    srv># ifconfig tun5 10.0.1.1 10.0.1.2                  # Executado no shell do servidor

Configure o cliente

Comandos executados no cliente:

cli># ifconfig tun5 10.0.1.2 netmask 255.255.255.252   # Cliente no Linux
    cli># ifconfig tun5 10.0.1.2 10.0.1.1                  # Cliente no FreeBSD

Os dois hosts estão agora conectados e podem transparentemente comunicar com qualquer protocolo de camada 3/4 utilizando o endereço de IP do túnel.

Conectar duas redes

Em adição a configuração p2p acima, é mais útil conectar duas redes privadas com uma VPN SSH utilizando dois gates. Suponhamos por exemplo, netA seja 192.168.51.0/24 e netB 192.168.16.0/24. O procedimento é similar ao acima, precisamos somente adicionar o roteamento. O NAT deve ser ativado na interface privada somente se os gates não forem os mesmos que o gateway padrão de sua rede.
192.168.51.0/24 (netA)|gateA <-> gateB|192.168.16.0/24 (netB)

  • Conecte com o SSH utilizando a opção -w do túnel.
  • Configure o endereço IP do túnel. Uma vez no servidor e uma vez no cliente.
  • Adicione o roteamento para as duas redes.
  • Se necessário, ative o NAT na interface privada do gate.

A configuração é iniciada a partir do gateA no netA.

Conecte do gateA ao gateB

Conexão é iniciada do gateA e os comandos são executador no gateB.

gateB está no Linux

gateA># ssh -w5:5 root@gateB
    gateB># ifconfig tun5 10.0.1.1 netmask 255.255.255.252 # Executado no shell do gateB
    gateB># route add -net 192.168.51.0 netmask 255.255.255.0 dev tun5
    gateB># echo 1 > /proc/sys/net/ipv4/ip_forward        # Somente necessário se não for padrão (default gw)
    gateB># iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

gateB está no FreeBSD

gateA># ssh -w5:5 root@gateB                          # Cria os dispositivos do tun5
    gateB># ifconfig tun5 10.0.1.1 10.0.1.2               # Executado no shell do gateB
    gateB># route add 192.168.51.0/24 10.0.1.2
    gateB># sysctl net.inet.ip.forwarding=1               # Somente necessário se não for padrão (default) gw
    gateB># natd -s -m -u -dynamic -n fxp0                # veja se NAT
    gateA># sysctl net.inet.ip.fw.enable=1

Configure o gateA

Comandos executados no gateA:

gateA está no Linux

gateA># ifconfig tun5 10.0.1.2 netmask 255.255.255.252
    gateA># route add -net 192.168.16.0 netmask 255.255.255.0 dev tun5
    gateA># echo 1 > /proc/sys/net/ipv4/ip_forward
    gateA># iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

gateA está no FreeBSD

gateA># ifconfig tun5 10.0.1.2 10.0.1.1
    gateA># route add 192.168.16.0/24 10.0.1.2
    gateA># sysctl net.inet.ip.forwarding=1
    gateA># natd -s -m -u -dynamic -n fxp0                # veja NAT
    gateA># sysctl net.inet.ip.fw.enable=1

As duas redes privadas agora estão transparentemente conectadas via VPN SSH. O direcionamento de IP e as configurações NAT são necessárias somente se os gates não forem os gateways padrões. Nesse caso os cliente não saberiam para aonde direcionar a resposta, e o NAT deve ser ativado.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *