Enviando Pacotes para a interface tap0

1

Estou tentando enviar pacotes para uma interface de toque usando python. Estou monitorando a interface de tap usando wireshark e nenhum pacote está sendo recebido. Eu estou fazendo isso como um exercício principalmente para ajudar no meu entendimento de vpns, ponte de ethernet e programação de soquete em python.

Minha configuração do sistema é a seguinte:

Ubuntu Desktop 11.10
Python 2.7
eth0 ip: 192.168.1.6
tap0 ip: 10.0.0.1

Primeiro, configurei a torneira da seguinte forma:

sudo openvpn --mktun --dev tap0
sudo ifconfig tap0 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255 promisc up

Isso inicia a interface tap0 e cria uma regra de roteamento do kernel para 10.0.0.1/24 via tap0.

Aqui está a tabela de rotas:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        *               255.255.255.0   U     0      0        0 tap0
192.168.1.6     *               255.255.255.0   U     1      0        0 eth0
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

Em seguida, inicio o python interactive e cria um soquete UDP simples.

import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.sendto('helloworld',('10.0.0.2',12345))

Eu corro o comando sendto com o monitoramento Wireshark na tap0. Agora, não há host em 10.0.0.2 na minha rede, mas pelo menos eu deveria ver algum tráfego de saída na interface tap0. Eu tenho replicado isso no windows e parece funcionar ok.

Eu só posso pensar que o problema está em algum lugar na configuração da interface tap0 no linux. Isso ou minha compreensão medíocre dessas coisas.

Obrigado

    
por Pete 25.01.2012 / 00:17

1 resposta

2

O tap destina-se ao encapsulamento em ponte no OpenVPN - você deve uni-lo a uma ponte como br0 usando brctl .

A idéia é que você pode colocar tap0 e eth0 , por exemplo, em uma ponte br0 . Em seguida, o tráfego de difusão atravessa essa ponte. (O tráfego de broadcast vindo de tap0 será encaminhado para eth0 e vice-versa, enquanto em uma situação padrão roteada não.) Seu túnel OpenVPN via tap0 é então "comutado" para eth0 em vez de " encaminhado "para ele. Todo o br0 obtém um IP e você lida com br0 em vez de eth0 ou tap0 .

Completamente possível ter uma ponte com apenas uma interface e adicionar / remover interfaces adicionais com brctl conforme necessário.

Portanto, coloque tap0 em uma ponte e lide com a interface da ponte, ou use tun interfaces.

Também é possível que iptables regras estejam interferindo.

Atualização - veja aqui: link - particularmente este trecho:

The difference between a tap interface and a tun interface is that a tap interface outputs (and must be given) full ethernet frames, while a tun interface outputs (and must be given) raw IP packets (and no ethernet headers are added by the kernel). Whether an interface functions like a tun interface or like a tap interface is specified with a flag when the interface is created.

Parece que, se você não enviar quadros Ethernet inteiros para tap0, isso não funcionará como esperado por causa disso.

    
por 25.01.2012 / 02:45