Невозможно захватить трафик, превышающий MTU 1500 в туннеле ovs

Создал мост

ovs-vsctl add-br br0

Добавлен порт типа vxlan в мост br0

ovs-vsctl add-port br0 tun1 \
 -- set Interface tun1 type=vxlan \
 options:remote_ip=10.2.3.204 options:key=10 options:df_default=False

Добавлен внутренний порт в мост br0

ovs-vsctl add-port br0 iface1 \
 -- set Interface iface1 type=internal options:df_default=False

Настройте интерфейсы

ip link set vxlan_sys_4789 up
ip link set iface1 up

Я получаю трафик через интерфейс iface1 и ожидаю того же трафика, инкапсулированного с данным туннелем.

Я отправляю пакеты с размером кадра 1472 байта, получаю такие же с инкапсуляцией, сделанной на удаленном хосте (10.2.3.204). Но когда размер кадра превышает 1472 байта, пакеты фрагментируются на интерфейсе iface1 и все фрагментированные пакеты проходят через поток. Но я получаю на удаленном хосте (10.2.3.204) только последний фрагмент трафика, где бит большего фрагмента не установлен.

При дальнейшей отладке я обнаружил, что в туннельном интерфейсе, vxlan_sys_4789, я вижу, что принимается только последний фрагмент трафика, а остальные отбрасываются.

Есть ли в ovs явное условие для отбрасывания этих пакетов? Несмотря на то, что флаг фрагмента установлен, почему фрагменты не проходят через туннель?


person Keerthana    schedule 28.01.2019    source источник


Ответы (1)


По умолчанию Open vSwitch переопределяет внутренние интерфейсы (например, br0) MTU. Если у вас есть только внутренний интерфейс (например, br0) и физический интерфейс (например, eth0), то каждое изменение MTU на eth0 будет отражаться на br0. Любая ручная настройка MTU с использованием ip на внутренних интерфейсах будет переопределена Open vSwitch, чтобы соответствовать минимальному текущему мосту.

Иногда такое поведение нежелательно, например, с туннелями. MTU внутреннего интерфейса можно явно установить с помощью следующей команды:

ovs-vsctl set int br0 mtu_request=1450

После этого Open vSwitch настроит br0 MTU на 1450. Поскольку этот параметр находится в базе данных, он будет постоянным (по сравнению с тем, что происходит с ip).

Конфигурацию MTU можно удалить, чтобы восстановить поведение по умолчанию:

$ ovs-vsctl set int br0 mtu_request=[]

Столбец mtu_request можно использовать для настройки MTU даже для физических интерфейсов (например, eth0).

person moinmaroofi    schedule 02.02.2019
comment
Да, я понял. Не могли бы вы помочь мне в этом? Несмотря на установку df_default = False, я нахожу внешний IP-уровень туннелируемых пакетов с установленным флагом DF. Почему так? - person Keerthana; 18.03.2019
comment
Попробуйте этот комментарий и посмотрите на результат: sudo ethtool -k eth0 и выключите generic segmentation offload @Keerthana - person moinmaroofi; 13.04.2019
comment
Должен ли я попробовать этот комментарий на интерфейсе vxlan_sys_4789? - person Keerthana; 16.04.2019