האם נתקלת במצבים שבהם אפליקציה אחת שלטה על רוחב הפס של הרשת שלך? אם נתקלת במצב שבו אפליקציה אחת אכלה את כל התעבורה שלך, אז תעריך את תפקיד יישום צורך רוחב הפס.
בין אם אתה מנהל מערכת או פשוט משתמש ב־Linux, עליך ללמוד איך לשלוט במהירויות ההעלאה וההורדה של האפליקציות כדי לוודא שרוחב הפס של הרשת שלך לא יוצרף על ידי אפליקציה יחידה.
מהו Trickle?
Trickle הוא כלי לשיפור רוחב הפס של רשת המאפשר לנו לנהל את מהירויות ההעלאה וההורדה של אפליקציות כדי למנוע מאחת מהן לקבל את רוב (או כל) רוחב הפס הזמין.
במילים פחותות, trickle מאפשר לך לשלוט בקצב תעבורת הרשת באופן ייחודי לכל יישום, בניגוד לשליטה לפי משתמש, שהיא הדוגמה הקלאסית לעיצוב רוחב הפס בסביבת לקוח-שרת, וזו כנראה ההגדרה שאנו מכירים יותר.
איך פעלת Trickle?
בנוסף, trickle עשוי לעזור לנו להגדיר עדיפויות באופן ייחודי לכל יישום כך שכאשר נקבעים הגבלות כוללות למערכת במלואה, יישומים בעדיפות יקבלו עדיין יותר רוחב פס באופן אוטומטי.
כדי לבצע משימה זו, ה-trickle מגביל תעבורת הנתונים שבה נשלחים ומקבלים, דרך חיבורי TCP. חשוב לציין כי מלבד קצבי ההעברה של הנתונים, trickle אינו משנה בשום דרך את ההתנהגות הפנימית של התהליך שהוא עוצב.
מה ש-Trickle לא יכול לעשות?
ההגבלה היחידה, בעגמת נפש, היא ש-trickle לא יעבוד עם יישומים שמקושרים סטטית או בינאריים עם רצועות ה-SUID או ה-SGID מוגדרות מאחר שהוא משתמש בקישור וטעינה דינמיים כדי להביא את עצמו בין התהליך שבו נעצב ולגישת הקשורה שלו לחרוצית הרשת הקשורה אליו. בכך, trickle משמש כפרוקסי בין שני רכיבי תוכנה אלו.
מכיוון ש-trickle אינו דורש הרשאות מנהל מערכת כדי להפעיל, משתמשים יכולים להגדיר את המגבלות בתעבורתם. מכיוון שזה עשוי לא להיות רצוי, נחקור כיצד להגביל את סך הכל המערכת שמשתמשי המערכת לא יוכלו לחרוג ממנו. כלומר, משתמשים עדיין יוכלו לנהל את שיעורי התעבורה שלהם, אך תמיד במגבלות המוגדרות על ידי מנהל המערכת.
סביבת בדיקות
במאמר זה נסביר כיצד להגביל את רוחב הפס של הרשת שמשתמשות באפליקציות בשרת Linux בעזרת trickle.
כדי ליצור את התעבורה הנדרשת, נשתמש ב-ncftpput ו-ncftpget (שני הכלים זמינים על ידי התקנת ncftp) על הלקוח (שרת CentOS – dev1: 192.168.0.17), ו-vsftpd על השרת ( Debian – dev2: 192.168.0.15) לצורך הדגמה.
ההוראות האלו עובדות גם על ההפצות RHEL-based ו-Debian-based כמו Ubuntu ו-Linux Mint.
איך להתקין ncftp ו-vsftpd ב-Linux
1. לפי ההפצות המבוססות על RedHat, יש להפעיל את המאגר EPEL, שהוא מאגר של תוכנה חופשית ופתוחה באיכות גבוהה שנתמך על ידי פרויקט Fedora.
התקנת EPEL ב-RHEL 9:
sudo subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
התקנת EPEL ב־CentOS 9, AlmaLinux 9, Rocky Linux 9:
sudo dnf config-manager --set-enabled crb sudo dnf install epel-release
התקנת EPEL ב-RHEL 8:
sudo subscription-manager repos --enable codeready-builder-for-rhel-8-$(arch)-rpms sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
התקנת EPEL ב־CentOS 8, AlmaLinux 8, Rocky Linux 8:
sudo dnf config-manager --set-enabled powertools sudo dnf install epel-release
2. לאחר מכן, התקינו את ncftp כך:
sudo dnf install ncftp [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] sudo apt install ncftp [On Debian, Ubuntu and Mint]
3. הגדירו שרת FTP בשרת נפרד. שימו לב שלמרות ש-FTP אינו מאובטח מהטבע, הוא עדיין משמש בנרחבות במקרים בהם אבטחה בהעלאה או הורדה של קבצים אינה נדרשת.
אנו משתמשים בו במאמר זה כדי להדגיש את יתרונות ה- trickle וכיוון שהוא מציג את שיעורי ההעברה ב- stdout בלקוח, ונשאיר את הדיון במה אם יש להשתמש או לא להשתמש בו לתקופה ותאריך אחרים.
sudo dnf install vsftpd [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] sudo apt install vsftpd [On Debian, Ubuntu and Mint]
עכשיו, ערכו את קובץ ההגדרות /etc/vsftpd/vsftpd.conf בשרת ה-FTP כך:
$ sudo nano /etc/vsftpd/vsftpd.conf OR $ sudo nano /etc/vsftpd.conf
בצעו את השינויים הבאים:
anonymous_enable=NO local_enable=YES chroot_local_user=YES allow_writeable_chroot=YES
אחרי כך, ודאו שהשירות vsftpd מופעל לסשן הנוכחי ומופעל להתחלה אוטומטית בהפעלות עתידיות:
sudo systemctl start vsftpd sudo systemctl enable vsftpd sudo systemctl status vsftpd
4. אם בחרת להתקין את שרת ה-FTP ב-Droplet של CentOS/RHEL עם מפתחות SSH לגישה מרחוק, תצטרך חשבון משתמש עם סיסמה מוגנת עם הרשאות תיקייה וקובץ מתאימות להעלאה והורדה של התוכן הרצוי מחוץ לתיקיית הבית של root.
אז תוכל לעיין בתיקיית הבית שלך על ידי הזנת כתובת ה-URL הבאה בדפדפן שלך. חלון הכניסה יופיע ויבקש ממך להזין חשבון משתמש וסיסמה תקנים על שרת ה-FTP.
ftp://192.168.0.15
אם האימות הצליח, תראה את תוכן תיקיית הבית שלך. במהלך המדריך הזה, תוכל לרענן את הדף כדי להציג את הקבצים שהועלו במהלך השלבים הקודמים.

איך להתקין את Trickle ב-Linux
כעת התקן את Trickle דרך yum או apt.
כדי לוודא התקנה מוצלחת, מומלץ לוודא שהחבילות המותקנות כרגע עדכניות (על ידי השתמשות ב-yum update) לפני התקנת הכלי עצמו.
sudo yum -y update && sudo yum install trickle [On RedHat based systems] sudo apt -y update && sudo apt install trickle [On Debian based systems]
וודא אם Trickle יעבוד עם הבינארי הרצוי. כפי שסברנו קודם, Trickle יעבוד רק עם בינאריים המשתמשים בספריות דינמיות או משותפות.
כדי לוודא האם אנו יכולים להשתמש בכלי זה עם יישום מסוים, אנו יכולים להשתמש בכלי הידוע ldd, שם ldd מסמל list dynamic dependencies.
במיוחד, נחפש את נוכחות glibc (ספריית ה-C של גנו) ברשימת ההפניות הדינמיות של כל תכנית נתונה מכיוון שהספריה הזו מגדירה בדיוק את קריאות המערכת המעורבות בתקשורת דרך שקופיות.
הפעל את הפקודה הבאה כנגד קובץ בינרי נתון כדי לראות אם trickle יכול לשמש כמזעור תפוסת בנייה:
sudo ldd $(which [binary]) | grep libc.so
לדוגמה,
sudo ldd $(which ncftp) | grep libc.so
שהתוצאה שלה היא:
sudo libc.so.6 => /lib64/libc.so.6 (0x00007efff2e6c000)
המחרוזת בסוגריים בפלט עשויה להשתנות ממערכת למערכת ואף בין ריצות של כפתור אחד מאחר שהיא מייצגת את כתובת הטעינה של הספריה בזיכרון הפיזי.
אם לאחר הפקודה לעיל אין תוצאות, זה אומר שהבינארי שנבחר לא משתמש בlibc, ולכן trickle לא יכול לשמש כמזעור תפוסת בנייה במקרה זה.
למד כיצד להשתמש ב-Trickle ב-Linux
השימוש הבסיסי ביותר של trickle הוא במצב בלעדי. בשיטה זו, trickle משמש כדי להגדיר במפורש את מהירות ההורדה והעלאה של יישום נתון. כפי שהסברנו קודם, לשם קיצור, נשתמש באותו יישום לבדיקות הורדה ועלאה.
ריצה של Trickle במצב בלעדי
נשווה את מהירות ההורדה והעלאה עם ובלי להשתמש ב-trickle. האופציה -d
מציינת את מהירות ההורדה ב-KB/s, בעוד שהתג -u
אומר ל-trickle להגביל את מהירות העלאה באותו יחידות. בנוסף, נשתמש בתג -s
, שמציין ש-trickle צריך לרוץ במצב עצמאי.
התחביר הבסיסי לריצה של trickle במצב עצמאי הוא כדלקמן:
sudo trickle -s -d [download rate in KB/s] -u [upload rate in KB/s]
כדי לבצע את הדוגמאות הבאות בעצמך, וודא שיש לך את trickle ו-ncftp מותקנים במחשב הלקוח (192.168.0.17 במקרה שלי).
דוגמה 1: העלאת קובץ בגודל 2.8MB עם ובלי להשתמש ב-Trickle
אנו משתמשים בקובץ ה-PDF Linux Fundamentals המשתחרר ללא תשלום (זמין מ-כאן) למבחנים הבאים.
בתחילה אפשר להוריד את הקובץ הזה לספרייה העבודה הנוכחית שלך עם ה-wget command:
wget http://linux-training.be/files/books/LinuxFun.pdf
התחביר להעלאת קובץ לשרת ה-FTP שלנו בלי להשתמש ב-trickle הוא כדלקמן:
sudo ncftpput -u username -p password 192.168.0.15 /remote_directory local-filename
כאשר /remote_directory הוא מסלול הספרייה הנכנסת ביחס לבית המשתמש, ו-local-filename הוא קובץ בספרייה העבודה הנוכחית שלך.
באופן ספציפי, בלי טריקל, אנו מקבלים מהירות העלאה שיא של 52.02 MB/s (אנא שים לב שזו אינה המהירות הממוצעת האמיתית של העלאה, אלא שיא ראשוני מיידי), והקובץ מועלה כמעט מיידית:
sudo ncftpput -u username -p password 192.168.0.15 /testdir LinuxFun.pdf
Output:
LinuxFun.pdf: 2.79 MB 52.02 MB/s
עם טריקל, נגביל את שיעור העברת העלאה ל5 KB/s. לפני שמעלים את הקובץ פעם שנייה, עלינו למחוק אותו מהספרייה היעד.
אחרת, ncftp יודיע לנו שהקובץ בספרייה היעד הוא אותו קובץ שאנו מנסים להעלות, ולא יבצע את ההעברה:
rm /absolute/path/to/destination/directory/LinuxFun.pdf
ואז:
trickle -s -u 5 ncftpput -u username -p password 111.111.111.111 /testdir LinuxFun.pdf
Output:
LinuxFun.pdf: 2.79 MB 4.94 kB/s
בדוגמה לעיל, אנו יכולים לראות שהמהירות הממוצעת של העלאה ירדה ל~5 KB/s.
דוגמה 2: הורדת אותו קובץ 2.8MB עם ובלי טריקל
ראשית, זכור למחוק את ה-PDF מהספרייה המקורית:
rm /absolute/path/to/source/directory/LinuxFun.pdf
אנא שים לב שבמקרים הבאים יורד הקובץ הרחוק לספרייה הנוכחית במכשיר הלקוח. עובדה זו מצוינת על ידי הנקודה ('.') שמופיעה אחרי כתובת ה-IP של שרת ה-FTP.
בלי טריקל:
ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf
Output:
LinuxFun.pdf: 2.79 MB 260.53 MB/s
עם טריקל, מגבילים את מהירות ההורדה ב20 KB/s:
trickle -s -d 30 ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf
Output:
LinuxFun.pdf: 2.79 MB 17.76 kB/s
הרצת טריקל במצב מפוקח [לא מנוהל]
טריקל יכול גם לרוץ במצב לא מנוהל, על פי סדרה של פרמטרים המוגדרים ב/etc/trickled.conf. קובץ זה מגדיר איך טריקלד (הדאמון) מתנהג ומנהל את טריקל.
בנוסף, אם אנו רוצים להגדיר הגדרות גלובליות לשימוש על ידי כל היישומים, נצטרך להשתמש בפקודת trickled. פקודה זו מריצה את הדאינון ומאפשרת לנו להגדיר גבולות הורדה ועלייה שיתופיים שישמשו לכל היישומים המופעלים דרך trickle מבלי שנצטרך לציין גבולות בכל פעם.
לדוגמה, ריצה:
trickled -d 50 -u 10
זה יגרום למהירויות ההורדה והעלאה של כל יישום שמופעל דרך trickle להיות מוגבלות ל 30 קיב/שנייה ו 10 קיב/שנייה, בהתאמה.
אנא שימו לב שאפשר לבדוק בכל זמן אם trickled פועל ועם אילו ארגומנטים:
ps -ef | grep trickled | grep -v grep
פלט:
root 16475 1 0 Dec24 ? 00:00:04 trickled -d 50 -u 10
דוגמה 3: העלאת קובץ MP4 בגודל 19MB לשרת FTP באמצעות Trickle
בדוגמה זו נשתמש בסרטון "He is the gift" המשמש ללא תשלום, המותקף להורדה מ הקישור הזה.
נתחיל בהורדת הקובץ הזה לספרייה העבודה הנוכחית שלך עם הפקודה הבאה:
wget http://media2.ldscdn.org/assets/missionary/our-people-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4
ראשית, נפעיל את דאינון trickled עם הפקודה שצוינה לעיל:
trickled -d 30 -u 10
בלי trickle:
ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4
פלט:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 36.31 MB/s
עם trickle:
trickle ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4
פלט:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 9.51 kB/s
כפי שאנו יכולים לראות בפלט לעיל, קצב העלאה ירד ל כ-10 קיב/שנייה.
דוגמה 4: הורדת אותו סרטון באמצעות Trickle
כמו ב-דוגמה 2, אנו נוריד את הקובץ לספרייה העבודה הנוכחית.
ללא trickle:
ncftpget -u username -p password 192.168.0.15 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4
פלט:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 108.34 MB/s
עם trickle:
trickle ncftpget -u username -p password 111.111.111.111 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4
פלט:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 29.28 kB/s
אשר תואם את המגבלה להורדה שנקבעה קודם (30 קיב בשנייה).
הערה: שברגע שהדאמון מופעל, אין צורך לקבוע גבולות בודדים לכל יישום שמשתמש בtrickle.
כפי שציינו קודם, אפשר להתאים גם את צורת הזרם הבאנדוויזה של trickle דרך trickled.conf. סעיף טיפוסי בקובץ זה כולל את הפירוט הבא:
[service] Priority = <value> Time-Smoothing = <value> Length-Smoothing = <value>
שם,
- [service] מציין את שמו של היישום שבו אנו רוצים לעצב את שימוש בבאנדוויזה.
- עדיפות מאפשרת לנו לציין שירות שיש לו עדיפות גבוהה יותר ביחס לאחר, ובכך לא לאפשר ליישום בודד לגזום את כל הבאנדוויזה שהדאמון מנהל. ככל שהמספר נמוך יותר, כך יותר באנדוויזה מוקצת ל- [service].
- זמן-חלוקה [בשניות]: מגדיר באיזה פרקי זמן trickled ינסה לתת ליישום להעביר ו/או לקבל נתונים. ערכים קטנים יותר (בין הטווח של 0.1-1 שניות) מתאימים ליישומים אינטראקטיביים וייתן מסע רציף (חלק) יותר בעוד ערכים קצת גדולים יותר (1-10 שניות) מתאימים ליישומים שזקוקים להעברת כמות גדולה של נתונים. אם לא מציינים ערך, משתמשים בכללי (5 שניות).
- אורך-מחק [ב-KB]: הרעיון זהה לזמן-מחק, אך מבוסס על אורך פעולת I/O. אם לא מצוין ערך, משתמשים בכבודות (10 קיביוט).
שינוי ערכי המחק יתרמו ליישום המסוים על ידי [שירות] משתמש בקצבי העברה בתוך טווח במקום ערך קבוע. למרבה הצער, אין נוסחה לחישוב הגבולות התחתון והעליון של הטווח זה תלוי בעיקר בתרחיש הספציפי של כל מקרה.
הבא הוא קובץ דוגמה trickled.conf בלקוח CentOS 7 (192.168.0.17):
[ssh] Priority = 1 Time-Smoothing = 0.1 Length-Smoothing = 2 [ftp] Priority = 2 Time-Smoothing = 1 Length-Smoothing = 3
בשימוש בסיטואציה זו, טריקלד יפרסם חיבורי SSH מעל העברות FTP. שימו לב שתהליך אינטראקטיבי, כגון SSH, משתמש בערכים קטנים יותר של זמן-מחק, ואילו שירות שמבצע עבודות ותוך עברת נתונים בשיטה (FTP) משתמש בערך גדול יותר.
ערכי המחק אחראיים למהירויות ההורדה והעלאה בדוגמה הקודמת שלנו לא תואמים את הערך המדויק המצוין על ידי דייבון דאמון אך זזים בטווח קרוב אליו.
[ אולי תרצה גם: איך לאבטח ולחזק את שרת OpenSSH ]
מסקנה
במאמר זה, בחנו איך להגביל את הבנטונים שמשתמשים בהם יישומים באמצעות טריקל בהתבסס על פידורים מבוססי Fedora ו-Debian / נגזרות. יתר מכך, יש שימושים אפשריים אחרים הכוללים, אך אינם מוגבלים ל:
- מגבילים את מהירות ההורדה באמצעות כלי מערכת כגון wget, או קליינט טורנט torrent client, למשל.
- מגבילים את המהירות בה המערכת שלך יכולה לעדכן באמצעות `yum` (או `aptitude`, אם אתה במערכת הסביבה של Debian), מערכת ניהול החבילות.
- אם השרת שלך קשור למסנן או חוצץ (או הוא המסנן או החוצץ עצמו), אפשר להשתמש ב-trickle להגבלת המהירות של ההורדה והעלאה או התקשורת עם הלקוחות או החוץ.
שאלות ותגובות מוזמנות ביותר. תרצו להשתמש בטופס למטה כדי לשלוח אותם אלינו.
Source:
https://www.tecmint.com/limit-linux-network-bandwidth-usage-with-trickle/