Como utilizar o túnel TUN / TAP do programa do usuário?

9

Recentemente descobri a existência de interfaces Linux TUN / TAP e ainda estou tentando entendê-las. Acho que consigo o conceito básico - são criados pseudo-dispositivos que emulam uma interface de rede e, em vez de passar dados para o hardware, são passados para um programa de espaço do usuário.

Como você direcionaria um programa não relacionado para utilizar este túnel?

Por exemplo, antes do túnel ser criado, meu sistema contém apenas eth0 e lo, a interface ethernet normal (conectada à minha rede local) e a interface de loopback. Depois que um programa cria e configura um túnel, eu tenho uma nova interface gr0 que eu dei um endereço IP que está na minha rede local, mas não em uso (por isso estamos todos na mesma sub-rede). Como eu faria um programa não relacionado utilizar esse "túnel"? Digamos que eu tivesse um aplicativo cliente / servidor de mensagens Python simples que utiliza uma conexão TCP, como eu poderia configurá-lo para usar o túnel?

Peço desculpas se estou perdendo algo básico, mas como de costume, consegui me confundir no esquema das coisas. Mais uma vez, tudo que eu quero é que um programa TCP simples utilize este túnel.

Obrigado!

    
por Mr. Shickadance 28.03.2011 / 20:49

1 resposta

6

Nem sempre é "túnel". TUN / TAP é apenas drivers específicos da NIC. Do ponto de vista da pilha de rede, elas atuam como qualquer outra interface de rede: elas podem ter endereços IP, podem ser ponto-a-ponto ou interfaces de transmissão. As regras de roteamento também se aplicam a elas. Mas todo o tráfego que é gravado em uma dessas interfaces de rede vai para algum programa userspace para processamento, e todos os dados gravados pelo programa userspace diretamente para /dev/tunX se parecem com os pacotes recebidos para a pilha de rede.

No servidor e cliente de configuração de encapsulamento usuais, há dispositivos TUN com endereços atribuídos. As tabelas de roteamento configuradas em ambos direcionam o tráfego necessário para esses dispositivos TUN. Quando o pacote é roteado para tun0, o kernel envia para o programa userspace (cliente) que envia este pacote para outro programa na máquina remota (servidor) via, por exemplo, conexão TCP. Na máquina remota, outro programa (servidor) recebe o pacote do cliente e o grava em seu próprio /dev/tunX device, "injetando" esse pacote na pilha da rede. E o pacote encapsulado é processado como qualquer outro.

    
por 28.03.2011 / 21:20