Пакеты больше MTU, поступающие на интерфейс TUN

Я использую pytun для настройки TUN и пересылки поступающих на него пакетов на другую машину с использованием UDP. Что меня озадачивает, так это то, что, хотя я настроил TUN на MTU 141 байт, я читаю на нем пакеты размером 145. См. код ниже:

from pytun import TunTapDevice
tun = TunTapDevice(name="vpn")
tun.addr = '10.8.0.1'
tun.dstaddr = '10.8.0.2'
tun.netmask = '255.255.255.0'
tun.mtu = 141
tun.up()
assert len(tun.read(1000)) <= tun.mtu # <-- fails for some packets

Я проверил фактический MTU интерфейса, используя ifconfig.

Я что-то упускаю?


person Mansour    schedule 12.08.2014    source источник


Ответы (1)


Если вы не добавите флаг IFF_NO_PI, вы получите 4-байтовый заголовок для вашего кадра.

Из документации ядра/сети/tuntap.txt

3.2 Формат кадра:

Если флаг IFF_NO_PI не установлен, каждый кадр будет иметь следующий формат:
Флаги [2 байта]
Proto [2 байта]
Необработанный кадр протокола (IP, IPv6 и т. д.).

Предположительно, вы должны быть в состоянии получить то, что вы хотите с помощью

from pytun import TunTapDevice, IFF_TUN, IFF_NO_PI
tun = TunTapDevice(name="vpn",flags=(IFF_TUN | IFF_NO_PI))
person Jesper Larsen    schedule 01.12.2014
comment
Я хочу, чтобы ты знала, как сильно я тебя люблю! Доку сделал не понятно, пропустил флаг IFF_NO_PI 4 байта проглочено! - person Alex Chan; 23.07.2016