LINUX.ORG.RU
ФорумAdmin

Пропорциональное разграничение скоростей разных направлений трафика


0

0

Здравствуйте. Подскажите пожалуйста как это работает?

К примеру есть 1Гбитный линк которым я подключен к точке распределения трафика. Есть три направления : Европа, Россия и Украина и каждое направление я получаю с определенной скоростью. Европа - максимум 300Мбит, Россия - максимум 350Мбит и Украина - максимум 350Мбит. На руки я естественно все получаю в одном флаконе.

Вопрос: как делается подобное разграничение скоростей по направлениям, на каком оборудовании? Я знаю что к этой точке подключен не я один и с другими пропорциями скоростей.

Спасибо.

какой тип интерфейса? какие протоколы используются? Доступ по направлениям внутри выделенного канала или через интернет?

Просто очень мало информации, жутко мало. От типа подключения зависит и то, как делить потоки, и то, какое оборудование использовать.

gserg ★★
()

Скорость режут шейпингом или полисингом. По направлениям разделяют на основе сети источника/назначения обычно. Реализуется это как на железных роутерах так и на linux/freebsd

ventilator ★★★
()
Ответ на: комментарий от gserg

Подключение по технологии Ethernet. Одновременно я могу качать с Европы - максимум 300Мбит, Россия - максимум 350Мбит и Украина - максимум 350Мбит. В сумме как бы гигабит, но и не гигабит.

ventilator, а можно хоть приблизительную схему? Хоть примерно какое железо такое может сделать? Я не представляю что должно быть, чтоб на скорости 1 гбит/c узнать направление (там же огромное количество подсетей которое меняется постоянно) и дать к примеру мне такую скорость а другим клиентам другую.

palladium
() автор топика

Кроме как маркировки пакетов соответственно подсетям (для UA-IX, например, есть постоянно обновляющийся список подсетей), а потом шейпинга по маркерам с помощью tc иного решения не вижу.

post-factum ★★★★★
()
Ответ на: комментарий от post-factum

А железо есть такое (естественно с адекватной ценой) которое сможет выполнять подобное? Если можно 1 или 2 примера.

palladium
() автор топика
Ответ на: комментарий от palladium

О реализациях в железе не знаю, но подозреваю, что дорогое — есть. А недорого — любой комп + linux + iptables. Только если поток данных большой, то и комп должен быть хорошим. По наблюдениям, маркировка пакетов с помощью iptables отжирает нехило процессорного времени софтовыми прерываниями.

post-factum ★★★★★
()
Ответ на: комментарий от post-factum

Угу, согласен, чего я и за железо спрашиваю. Плюс к тому что ты сказал еще добавить что трафик, трафику рознь. Если влупить кучу мелких udp (торрент к примеру) там машина загнется еще быстрее. Ппсы положат на лопатки ее.

palladium
() автор топика
Ответ на: комментарий от post-factum

Для интереса позвоню узнаю. Потом отпишусь.

palladium
() автор топика
Ответ на: комментарий от palladium

4 ядерный ксеон/коре квад + интеловые сетевки на igb сделают гигабит легко. Важно правильно настроить только

ventilator ★★★
()
Ответ на: комментарий от post-factum

2post-factum маркировка в iptables это не оптимальный вариан - обычно много линейных правил плюс не все хорошо с масштабируемостью на smp у netfilter. Нужно старатьcя все делать средствами tc и использовать хештаблицы. Вообще красить пакеты можно на одной железке, а шейпить на другой - это сильно упрощает дело.

А вообще полисинг на свитчах сделает вам вайрспид в любом раскладе.

ventilator ★★★
()
Ответ на: комментарий от post-factum

Примеры хештаблиц или еще чего то? Я завтра покажу пример, бо сейчас честно говоря лень по роутерам ходить.

Вообще очень красиво задача автора решается классификатором route - по бгп квагга получает префиксы и метит нужным реалмом. После этого классификатор route разбрасывает в классы согласно реалму.

ventilator ★★★
()
Ответ на: комментарий от ventilator
##создаем хеш таблицу из 256 бакетов
tc filter add dev ${DEV} parent 1: prio 5 handle $(($STARTHTPREFIX)): protocol ip u32 divisor 256

##хешфильтр отправляет пакеты на дальнейшую обработку правилами
##которые в бакете с номером согласно 3 октету ип адреса (mask
##0x0000ff00)
tc filter add dev ${DEV} protocol ip parent 1: prio 5 u32 ht $HT:: match ip ${DIRECTION} 0.0.0.0/0 hashkey mask 0x0000ff00 at ${OFFSET} link $(($STARTHTPREFIX)):

##создаем еще хеш таблицу
tc filter add dev ${DEV} parent 1: prio 5 handle $(($STARTHTPREFIX+1)): protocol ip u32 divisor 256"

##кладем в 64(HEX) бакет первой таблицы правило которое отправит
##пакеты в бакеты второй таблицы согласно 4 октету ип адреса
tc filter add dev ${DEV} protocol ip parent 1: prio 5 u32 ht $(($STARTHTPREFIX)):64:  match ip ${DIRECTION} 0.0.0.0/0 hashkey mask 0xff at ${OFFSET} link $(($STARTHTPREFIX+1)):

##раскладываем пакеты в 256 классов
for class in `seq 0 255`
do
tc filter add dev ${DEV} protocol ip parent 1: prio 5 u32 ht \
$(($STARTHTPREFIX+1)):`printf %x $class`:  match ip ${DIRECTION} \ 0.0.0.0/0 classid 1:${STARTCLASSPREFIX}`printf %x $class`" \
done

Таким образом мы отправили трафик каждого ип из сети 172.16.100.0/24 в отдельный класс. Понадобилось 3 хеш фильтра, при этом для шейпинга каждого ип из /16 сети тоже хватит 3 фильтров в такой конфигурации. При традиционном способе для показаного примера было бы необходимо 256 линейных фильтров, а /16 сеть вообще бы не удалось зашейпить с приемлимой производительностью.

ventilator ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.