20-05-2006, 21:20
|
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
|
|
חבר מתאריך: 25.10.01
הודעות: 42,775
|
|
הנה סקריפט שכתבתי ל tc
קוד:
# Set queue length for WAN interface
ifconfig eth0 txqueuelen 16
# Specify queue discipline
tc qdisc add dev eth0 root handle 1:0 htb default 103 r2q 1
# Set root class
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 1000kbit burst 6k cburst 3k
# Specify sub classes
tc class add dev eth0 parent 1:1 classid 1:101 htb rate 750kbit ceil 1000kbit quantum 12187 burst 6k cburst 3k prio 0
tc class add dev eth0 parent 1:1 classid 1:102 htb rate 150kbit ceil 1000kbit quantum 8625 burst 4k cburst 2k prio 1
tc class add dev eth0 parent 1:1 classid 1:103 htb rate 60kbit ceil 1000kbit quantum 5062 burst 2k cburst 1k prio 2
# Filter packets
tc filter add dev eth0 parent 1:0 protocol ip prio 0 handle 1 fw classid 1:101
tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 2 fw classid 1:102
tc filter add dev eth0 parent 1:0 protocol ip prio 2 handle 3 fw classid 1:103
# Add queuing disciplines
tc qdisc add dev eth0 parent 1:101 sfq perturb 16 quantum 12187
tc qdisc add dev eth0 parent 1:102 sfq perturb 16 quantum 8625
tc qdisc add dev eth0 parent 1:103 sfq perturb 16 quantum 5062
הסקריפט מניח רוחב פס עולה של 1 מגה-ביט (1000kbit). שנה את המספר הזה לרוחב פס העולה שלך, ואת המספרים שיחסיים ל 1000, חלק בהתאם גם כדי להגיע להקצאת רמות שונות ברוחב הפס שלך.
מה שזה בעצם עושה, זה מגדיר 3 רמות של עדיפויות. לאחר מכן, באמצעות iptables, יש לסמן רמת עדיפות לפאקטים שונים שאתה מעוניין. דוגמא:
קוד:
iptables -t mangle -A FORWARD -p icmp -j MARK --set-mark 0x1
iptables -t mangle -A FORWARD -p tcp -m tcp --dport 22 -j MARK --set-mark 0x1
iptables -t mangle -A FORWARD -p ! tcp -j MARK --set-mark 0x1
iptables -t mangle -A FORWARD -p tcp -m tcp --dport 80 -j MARK --set-mark 0x3
iptables -t mangle -A FORWARD -p tcp -m tcp --dport 443 -j MARK --set-mark 0x3
iptables -t mangle -A FORWARD -p tcp -m tcp --dport 25 -j MARK --set-mark 0x3
iptables -t mangle -A FORWARD -p tcp -m length --length 1024:65535 -j MARK --set-mark 0x4
iptables -t mangle -A FORWARD -p tcp -m tos --tos Minimize-Delay -m mark --mark 0x0 -j MARK --set-mark 0x1
iptables -t mangle -A FORWARD -p tcp -m tos --tos Maximize-Throughput -m mark --mark 0x0 -j MARK --set-mark 0x2
iptables -t mangle -A FORWARD -p tcp -m tos --tos Minimize-Cost -m mark --mark 0x0 -j MARK --set-mark 0x4
iptables -t mangle -A OUTPUT -p icmp -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 22 -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT -p ! tcp -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 80 -j MARK --set-mark 0x3
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 443 -j MARK --set-mark 0x3
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 25 -j MARK --set-mark 0x3
תוכל לראות שאני מתעדף בתעדוף גבוה פינגים, SSH, כל מה שהוא לא TCP, ובתעדוף הנמוך גלישה ב-ווב, שליחת דואר, וכדו', ובנוסף מאפשר לתוכנות שיודעות לסמן מה הן רוצות (כמו FTP, Voice over IP וכו'), לקבל מה שהן רוצות (הרבה רוחב פס או דווקא מהירות תגובה מהירה במיוחד, כמו משחקי FPS). כמובן אתה יכול לעשות כפי שאתה רוצה (אולי למשל תעדיף דווקא את HTTP הכי גבוה...)
כדי לראות שהפאקטים עוברים דרך ה"שרשרת" המתאימה, תוכל להשתמש ב iptables -L -t mangle -v
אני מקווה שההפצה שלך תומכת בכל ה tc שהשתמשתי בהם - זה לא תמיד כך, ואז צריך להוסיף לקרנל, אבל כמו שאומרים, that is beyond the scope of this forum....
|