Criando um túnel ponto a ponto

Continuando, depois de ativar a opção no servidor, falta apenas criar o túnel, rodando o comando abaixo no cliente. Vamos começar criando um túnel ponto a ponto, para permitir que o cliente tenha acesso aos recursos do servidor:

# ssh -w 0:0 -o Tunnel=ethernet root@servidor.com ifconfig tap0 10.0.0.1 netmask 255.0.0.0

Se, ao executar o comando, você receber uma mensagem de erro como:

SIOCSIFADDR: Dispositivo inexistente
tap0: ERROR while getting interface flags: Dispositivo inexistente
SIOCSIFNETMASK: Dispositivo inexistente

… verifique a configuração do servidor. Ela é exibida quando a opção PermitTunnel está desativada, ou está sendo usada uma versão antiga do OpenSSH, que não suporta o recurso. É importante enfatizar também que o comando
deve ser executado como root também no cliente.

Voltando ao comando, a opção “-w 0:0” é usada para criar o túnel, nesse caso criando a interface “tap0” no cliente e a interface “tap0” no servidor. Como você deve ter imaginado o “0.0” pode ser alterado caso você precise
criar túneis para mais de um servidor simultaneamente. Nesse caso, ao rodar o comando para o segundo servidor, você usaria “-w 1:0” e assim por diante.

A opção “-o Tunnel=ethernet” indica que deve ser criada uma interface tap, que trabalha no nível 2 do modelo OSI, encaminhando frames Ethernet de um lado a outro, exatamente como uma placa de rede real. O default do SSH
(quando a opção é omitida) é criar uma interface tun, que trabalha no nível 3, encaminhando pacotes. A grande diferença entre as duas é que a interface tap pode ser usada para criar um bridge (veja a seguir) o que permite efetivamente unir as duas
redes.

Continuando, o “servidor.com” deve ser substituído pelo endereço IP ou domínio do servidor, enquanto o “ifconfig tap0 10.0.0.1 netmask 255.0.0.0” indica 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. Como disse a pouco, o túnel só pode ser criado logando no servidor remoto como root, daí o “root@”.

Logue no servidor usando o SSH e rode o comando “ifconfig”. Você verá que foi criada uma nova interface, usando o endereço especificado no comando, como em:

tap0 Encapsulamento do Link: Ethernet Endereço de HW EA:CE:EC:FB:1A:DD
inet end.: 10.0.0.1 Bcast:10.255.255.255 Masc:255.0.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)

Você pode notar que a interface possui inclusive um endereço MAC (diferente do da placa de rede real). Ele é um endereço aleatório definido durante a criação da interface.

Ao mesmo tempo, é criada uma interface “tap0” no cliente. Ela inicialmente ficará desativada, por isso não aparecerá no ifconfig. Para ativá-la, abra outro terminal e use (no cliente, como root) o comando:

# ifconfig tap0 10.0.0.2 netmask 255.0.0.0 up

O terminal onde foi executado o primeiro comando ficará travado. Ao fechá-lo, ou encerrar a execução do comando pressionando Ctrl+C o túnel é desativado. Depois de testar o túnel da primeira vez, você pode incluir o
parâmetro “-f”, que faz com que ele seja executado em background, sem travar o terminal (usando a opção -f, a única forma de finalizar o túnel é verificar o número do processo usando o comando “ps aux” e finalizá-lo usando o comando “kill”). Aproveite
para colocar os dois comandos em um script, para facilitar a criação do túnel, como em:

ssh -f -w 0:0 -o Tunnel=ethernet root@servidor.com ifconfig tap0
10.0.0.1 netmask 255.0.0.0
sleep 10
ifconfig tap0 10.0.0.2 netmask 255.0.0.0 up

O sleep é necessário ao usar o comando “ssh -f” em um script, pois como ele é executado em background, o comando seguinte (ifconfig tap0…) é executado logo em seguida, antes que o túnel seja estabelecido, resultando em
erro. Com o sleep, o sistema espera antes de passar para o segundo comando, dando tempo para o SSH estabelecer o túnel.

A partir daí, o túnel entra as duas máquinas está funcional. Experimente acessar o servidor através do endereço “10.0.0.1” e acessar o cliente a partir do servidor usando o endereço “10.0.0.2”. Como disse, você pode acessar
compartilhamentos de rede, usar impressoras compartilhadas e assim por diante, como se os dois estivessem diretamente ligados através de um cabo cross-over. A velocidade de acesso é limitada apenas pela velocidade da conexão, já que o overhead introduzido
pelo SSH é pequeno.

Se algum recurso não funcionar (não conseguir imprimir na impressora, por exemplo), verifique se não exitem regras no firewall que impeçam a conexão. Se você está usando um script de firewall que permite apenas conexões a
partir da interface da rede local, por exemplo, o cliente ficará de fora, já que está contactando o servidor através de uma interface separada.

Para que o túnel funcione via web, é necessário apenas que o servidor esteja com a porta 22 aberta. O cliente não precisa de porta alguma e pode até mesmo estar acessando via NAT.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X