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

За макс на четверга, 25 вересня 2008

Пам'ятаєте, я зробив швидко повідомлення як написати балансування навантаження скрипт (або смугою пропускання)?

Що ж, сьогодні я знайшов ще прохолодно сценарію для обмеження пропускної спроможності. Я вважаю, що це одне, якщо більш складна, але якщо вам це потрібно, це може бути дуже корисним.

Ось код, за допомогою 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

Ставка

1 Star2 Stars3 Stars4 Stars5 Stars
Loading ... Завантаження ...


Сайт Спонсори
Оголошення Оголошення
Оголошення Оголошення



Схожі новини та ресурси

  • Ярон
    Привіт,
    Великий пояснює, вона працює дуже добре:).
    У мене є питання:
    Що станеться з потоками, які вже існують? Фільтр буде вважати їх?
    (так як спорт і dport вже змінився, до застосування фільтра)

    Наприклад:
    $ () ТК фільтрів додати Dev $ () EXT_IFACE батьків 1:0 Протокол IP PRIO 1 u32 відповідності IP SRC 217.10.156.197/32 відповідності IP-спорт 25 0xffff flowid 1:3

    порт джерела, не може бути 25 для підключення, яке вже почалося.
Блог коментарі сила Disqus
Якщо вам подобається цей пост, підпишіться на мою повну RSS-канал.

Ви також можете підписатися по електронній пошті, заповнивши ваше ім'я та адресу електронної пошти нижче:

Ім'я: Електронна пошта:


Отримала новий рубати, DIY, HOWTO, або гаджет? Повалити нас тут.

Спробуйте Goohack знайти нові Hack:


Featured Sites From Zedomax Blog Network