Linux Server Hack - Як обмежити швидкість з Linux, TC, і iproute2!

Пам'ятаєте, я зробив швидко повідомлення як написати балансування навантаження скрипт (або смугою пропускання)?
Що ж, сьогодні я знайшов ще прохолодно сценарію для обмеження пропускної спроможності. Я вважаю, що це одне, якщо більш складна, але якщо вам це потрібно, це може бути дуже корисним.
Ось код, за допомогою Adamsinfo.com:
# Set some variables
#!/bin/bash
EXT_IFACE=”eth0″
INT_IFACE=”eth1″
TC=”tc”
UNITS=”kbit”
LINE=”10000″ #maximum ext link speed
LIMIT=”5000″ #maximum that we'll allow
# Установка деяких змінних для окремих "класи", який ми будемо використовувати для формування внутрішнього швидкість завантаження, тобто формування eth0
CLS1_RATE = "200" # Високий пріоритет трафіку класу 200kbit
CLS2_RATE = "300" # середній пріоритет класу 300kbit
CLS3_RATE = "4500" # Bulk класу 4500kbit
# (Ми створимо ті, які можна запозичити з яких пізніше)
# Установка деяких змінних для окремих "класи", який ми будемо використовувати для формування внутрішнього швидкість завантаження, тобто формування eth1
INT_CLS1_RATE = "1000" # Priority
INT_CLS2_RATE = "4000" # Bulk
# Видалення поточного дисципліни обробки черг.
тобто очищення
$ () ТК дисципліни справі Dev $ () INT_IFACE кореневу
$ () ТК дисципліни справі Dev $ () EXT_IFACE кореневу
# Прикласти кореневих дисципліни обробки черг.
Ми використовуємо HTB тут, і підключення до цієї дисципліни, обидва інтерфейсу.
Ми називають його "1:0"
$ () ТК дисципліни додати Dev $ () INT_IFACE кореневих ручкою 1:0 HTB
$ () ТК дисципліни додати Dev $ () EXT_IFACE кореневих ручкою 1:0 HTB
# Створення кореневого класу, з максимальною межах, визначених
# Один для eth1
$ () ТК клас додати Dev INT_IFACE $ () 1:0 батьків ClassID 1:1 HTB швидкість $ (LIMIT) $ () ОДИНИЦЬ стелі $ (LIMIT) $ () ОДИНИЦЬ
# Один для eth0
$ () ТК клас додати Dev EXT_IFACE $ () 1:0 батьків ClassID 1:1 HTB швидкість $ (LIMIT) $ () ОДИНИЦЬ стелі $ (LIMIT) $ () ОДИНИЦЬ
# Створити дитині класи
# Це для нашого внутрішнього інтерфейсу eth1
# Створюємо клас з написом "1:2" і забезпечити її граничного значення, зазначеного вище
$ () ТК клас додати Dev INT_IFACE $ () 1:1 батьків ClassID 1:2 HTB ставкою $ INT_CLS1_RATE) ($ () ОДИНИЦЬ стелі $ (LIMIT) $ () ОДИНИЦЬ
# Створюємо клас з написом "1:3" і забезпечити її граничного значення, зазначеного вище
$ () ТК клас додати Dev INT_IFACE $ () 1:1 батьків ClassID 1:3 HTB ставкою $ INT_CLS2_RATE) ($ () ОДИНИЦЬ стелі INT_CLS2_RATE $ ($ ()) ОДИНИЦЬ
# Ext_if (завантаження) в даний час.
Ми також встановити, які класи можна запозичувати і кредитувати.
# Цей клас є гарантованим 200kbit і може підірвати до 5000kbit якщо доступно
$ () ТК клас додати Dev EXT_IFACE $ () 1:1 батьків ClassID 1:2 HTB ставкою $ CLS1_RATE) ($ () ОДИНИЦЬ стелі $ (LIMIT) $ () ОДИНИЦЬ
# Цей клас є гарантованим 300kbit і може підірвати до 5000kbit-200kbit = 4800kbit якщо доступно
$ () ТК клас додати Dev EXT_IFACE $ () 1:1 батьків ClassID 1:3 HTB ставкою $ CLS2_RATE) ($ () ОДИНИЦЬ стелю `Ехо $ (LIMIT) - $ (CLS1_RATE) | н` $ () ОДИНИЦЬ
# Цей клас може гарантовано 4500kbit і може не лопне повз нього (5000kbit-200kbit-300kbit = 4500kbit).
# Тобто навіть якщо наша частина трафіку іде з розуму, двома класами вище як і раніше, гарантується доступність.
$ () ТК клас додати Dev EXT_IFACE $ () 1:1 батьків ClassID 1:4 HTB ставкою $ CLS3_RATE) ($ () ОДИНИЦЬ стелю `Ехо $ (LIMIT) - $ (CLS1_RATE) - $ (CLS2_RATE) | н` $ () ОДИНИЦЬ
# Додати pfifo.
Дізнайтеся більше про pfifo в інших країнах, це виходить за рамки цього документа.
$ () ТК дисципліни додати Dev $ () INT_IFACE батьків 1:2 ручкою 12: pfifo обмежити 10
$ () ТК дисципліни додати Dev $ () INT_IFACE батьків 1:3 ручкою 13: pfifo обмежити 10
$ () ТК дисципліни додати Dev $ () EXT_IFACE батьків 1:2 ручкою 12: pfifo обмежити 10
$ () ТК дисципліни додати Dev $ () EXT_IFACE батьків 1:3 ручкою 13: pfifo обмежити 10
$ () ТК дисципліни додати Dev $ () EXT_IFACE батьків 1:4 ручкою 14: pfifo обмежити 10
# # # Вчинено додавання всіх класах, в даний час створені певні правила!
# # #
# INT_IFACE
# Зверніть увагу напрямку 'літній'.
Трафік, що виходить з нашого внутрішнього інтерфейсу і на наш сервер знаходиться поза швидкість завантаження сервера, так SOME_IMPORTANT_IP виділяється до 1:2 клас для скачування.
$ () ТК фільтрів додати Dev $ () INT_IFACE батьків 1:0 Протокол IP PRIO 1 u32 відповідності IP-річного SOME_IMPORTANT_IP/32 flowid 1:2
$ () ТК фільтрів додати Dev $ () INT_IFACE батьків 1:0 Протокол IP PRIO 1 u32 відповідності IP-річного SOME_OTHER_IMPORTANT_IP/32 flowid 1:2
# Всі інші сервери швидкість завантаження йде 1:3 - не так важливі, як і дві вищезгадані
$ () ТК фільтрів додати Dev $ () INT_IFACE батьків 1:0 Протокол IP PRIO 1 u32 відповідності IP-річного 0.0.0.0 / 0 flowid 1:3
# EXT_IFACE
# Пріоритетності DNS просить
$ () ТК фільтрів додати Dev $ () EXT_IFACE батьків 1:0 Протокол IP PRIO 1 u32 відповідності IP SRC IMPORTANT_IP/32 відповідності IP-спорт 53 0xffff flowid 1:2
# SSH є важливим
$ () ТК фільтрів додати Dev $ () EXT_IFACE батьків 1:0 Протокол IP PRIO 1 u32 відповідності IP SRC IMPORTANT_IP/32 відповідності IP-спорт 22 0xffff flowid 1:2
# Наша Exim SMTP сервера це теж важливо
$ () ТК фільтрів додати Dev $ () EXT_IFACE батьків 1:0 Протокол IP PRIO 1 u32 відповідності IP SRC 217.10.156.197/32 відповідності IP-спорт 25 0xffff flowid 1:3
# Навалом
$ () ТК фільтрів додати Dev $ () EXT_IFACE батьків 1:0 Протокол IP PRIO 1 u32 відповідності IP SRC 0.0.0.0 / 0 flowid 1:4






