Добрый день!
Есть два офиса, N провайдеров в одном, M провайдеров в другом. Тарифы провайдеров -- самые обычные, т.е. с негарантированной полосой пропускания и (самое важное) негарантированными потерями. Между офисами настроено N*M независимых L2 туннелей, настроена маршрутизация. Появилась IP-телефония (Asterisk + SIP телефоны).
Есть проблема: при некоторых разговорах пропадает часть голоса (от 0.2 до 2 секунд) из-за потери RTP пакетов (точнее, пакеты кратковременно теряются в провайдерской сети -- нормальное являение для всего non-realtime. Изменение параметров jitter buffer, перевод туннелей на TCP не помогают (и не должны) -- потеря связи на пару секунд разговора достаточно критична для RTP, разговор теряется.
Правильное решение этой проблемыСвязка одним провайдером по отдельному VLAN обоих офисов с приоритетным трафиком. Ну или тащить собственную оптику через пол-города. Будем выяснять, что проще.
Вопрос следующий: возможно ли в linux связаять несколько интерфейсов (туннелей) таким образом, чтобы пакет, пришедший на такую связку из внутренней сети отправлялся
одновременно во все связанные интерфейсы (туннели), а пакеты, пришедшие на связку "дедуплицировались" и отправлялись во внутреннюю сеть?
То есть из сети net0 RTP-пакет попадает на связку mbond0, состоящую из туннелей tap1..tapK. Далее K = N*M копий пакетов параллельно отправляются по K туннелям, L < K из них теряются с небольшой вероятностью (1%). На второй сервер приходят K-L (одинаковых) пакетов, попадают на связку mbond1 и из них один отправляется во вторую внутреннюю сеть net1.
Я прекрасно понимаю, что это нам сгенерирует в K раз больше трафика и поднимет нагрузку. С другой стороны, нет желания опираться на TCP retransmission и большое количество дублей пакетов при обычном port mirroring или iptables TEE.