Отправка пакетов на интерфейс tap0

Отправка пакетов на интерфейс tap0

Я пытаюсь отправить пакеты на интерфейс tap с помощью python. Я отслеживаю интерфейс tap с помощью wireshark, и пакеты не поступают. Я делаю это в качестве упражнения, в основном, чтобы помочь себе понять vpns, мостовое соединение ethernet и программирование сокетов в python.

Моя системная конфигурация выглядит следующим образом:

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

Сначала я настраиваю кран следующим образом:

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

Это запускает интерфейс tap0 и создает правило маршрутизации ядра к 10.0.0.1/24 через tap0.

Вот таблица маршрутов:

$ 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

Далее я запускаю Python Interactive и создаю простой UDP-сокет.

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

Я запускаю команду sendto с мониторингом Wireshark на tap0. Теперь в моей сети нет хоста по адресу 10.0.0.2, но я должен хотя бы увидеть исходящий трафик на интерфейсе tap0. Я повторил это в Windows, и, похоже, все работает нормально.

Я могу только думать, что проблема где-то в настройке интерфейса tap0 под linux. Или в моем посредственном понимании этого дела.

Спасибо

решение1

Он tapпредназначен для мостового туннелирования в OpenVPN — вам нужно объединить его в мост, например, с br0помощью brctl.

Идея в том, что вы можете поместить tap0и eth0, например, в мост br0- тогда широковещательный трафик проходит через этот мост. (Широковещательный трафик, поступающий из tap0будет пересылаться на eth0и наоборот, тогда как в маршрутизируемой стандартной ситуации этого не произойдет.) Ваш туннель OpenVPN via tap0затем "коммутируется" в eth0вместо того, чтобы "маршрутизироваться" в него. Целое br0получает IP, и вы имеете дело с br0вместо eth0или tap0.

Вполне возможно иметь мост только с одним интерфейсом и добавлять/удалять дополнительные интерфейсы по brctlмере необходимости.

Поэтому либо включайте tap0мост и работайте с интерфейсом моста, либо используйте tunинтерфейсы.

Также возможно, iptablesчто мешают правила.

Обновление - смотрите здесь:http://backreference.org/2010/03/26/tuntap-interface-tutorial/- особенно этот отрывок:

Разница между интерфейсом tap и интерфейсом tun заключается в том, что интерфейс tap выводит (и должен быть предоставлен) полные кадры Ethernet, в то время как интерфейс tun выводит (и должен быть предоставлен) необработанные IP-пакеты (и ядро ​​не добавляет заголовки Ethernet). Функционирует ли интерфейс как интерфейс tun или как интерфейс tap, указывается флагом при создании интерфейса.

Похоже, что если вы не отправляете полные кадры Ethernet на tap0, то это не будет работать так, как вы ожидаете, из-за вышеизложенного.

Связанный контент