Enviando pacotes para a interface tap0

Enviando pacotes para a interface tap0

Estou tentando enviar pacotes para uma interface tap usando python. Estou monitorando a interface tap usando wireshark e nenhum pacote está sendo recebido. Estou fazendo isso como um exercício principalmente para ajudar na minha compreensão de VPNs, ponte 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 interativo e crio um soquete UDP simples.

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

Eu executo o comando sendto com monitoramento Wireshark no tap0. Agora, não há host em 10.0.0.2 na minha rede, mas devo pelo menos ver algum tráfego de saída na interface tap0. Eu repliquei isso no Windows e parece funcionar bem.

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

Responder1

O tapé destinado ao tunelamento em ponte no OpenVPN - você deve juntá-lo em uma ponte, como br0usar brctl.

A idéia é que você possa colocar tap0e eth0, por exemplo, em uma ponte br0- e então transmitir o tráfego que atravessa essa ponte. (O tráfego de transmissão vindo de tap0será encaminhado eth0e vice-versa, enquanto em uma situação padrão roteada isso não aconteceria.) Seu túnel OpenVPN via tap0é então "comutado" eth0em vez de "roteado" para ele. O todo br0recebe um IP e você lida com br0em vez de eth0ou tap0.

É totalmente possível ter uma ponte com apenas uma interface e adicionar/remover interfaces adicionais conforme brctlnecessário.

Portanto, coloque-o tap0em uma ponte e lide com a interface da ponte ou use tuninterfaces.

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

Atualização - veja aqui:http://backreference.org/2010/03/26/tuntap-interface-tutorial/- particularmente este trecho:

A diferença entre uma interface tap e uma interface tun é que uma interface tap gera (e deve receber) quadros Ethernet completos, enquanto uma interface tun gera (e deve receber) pacotes IP brutos (e nenhum cabeçalho Ethernet é adicionado pelo kernel ). Se uma interface funciona como uma interface tun ou como uma interface tap é especificado com um sinalizador quando a interface é criada.

Parece que se você não enviar quadros Ethernet completos para tap0, ele não funcionará como esperado por causa do acima.

informação relacionada