کنترل مصرف پهنای باند شبکه با استفاده از squid(910 مجموع کلمات موجود در متن) (6598 بار مطالعه شده است)  کنترل
مصرف پهنای باند شبکه با استفاده از
squid یکی
از مشکلاتی که معمولا بر روی شبکههای
داخلی وجود دارد، مصرف پهنای باند توسط
کاربرانی خاص و عدم پخش مناسب آن بر روی
کل شبکه است.
به
طوری که یک کاربر میتواند کل پهنای باند
شبکه را مصرف کرده و سایر کاربران را دچار
مشکل کند.
راههای
متعددی برای کنترل مصرف پهنای باند مانند
ابزارهای Traffic
Shaper و...
شبکه
وجود دارد که از حوصله این مقاله خارج
است. ما
در این مقاله کوچک سعی داریم تا نحوه کنترل مصرف پهنای
باند را توسط سرویس دهنده squid آموزش
دهیم.
قدم
اول فرض
میکنیم که یک اتصال مودم یا DSL
به
شبکه اینترنت داریم که رابط آن ppp0
بوده، رابط شبکه محلی نیز eth0
و آدرس شبکه داخلی 192.168.0.0/24
میباشد.
مواردی که برای پیاده سازی کنترل مصرف پهنای باند
شبکه نیاز داریم عبارتند از یک سرویسدهنده
squid و
سیستم iptables
که
بر روی هر ماشین گنو/لینوکس
وجود دارد.
مراحل نصب، پیکربندی و تنظیم بسیار ساده است.
Squid
چگونه
کار میکند؟ سرویسدهنده
Squid
پیشرفتهترین
سرویسدهنده پراکسی موجود برای سیستمعامل
گنو/لینوکس
میباشد.
این
سرویسدهنده به دو روش میتواند در پهنای
باند صرفه جویی نماید:
۱)
نخست
از طریق حفظ صفحات، تصاویر و سایر اقلام
دریافت شده بر روی حافظه یا فضای دیسک.
بنابراین
در صورتی که کاربران تقاضای دریافت مجدد
یک صفحه تکراری را نمایند، این صفحه از
روی اینترنت دریافت نخواهد شد.
۲)
در
کنار سیستم Caching
معمولی،
Squid دارای
قابلیتی به نام delay
pools است
که از طریق آن میتوانید ترافیک اینترنت
را بطور معقولانهای کنترل نمایید.
این
کار از طریق تعریف کلمات کلیدی موجود در
آدرسهای URL
انجام
میگیرد.
برای
مثال میتوانید کلماتی مانند mp3،
mpg،
exe و...
را
بعنوان کلمات کلیدی تعریف نمایید.
با
استفاده از این کلمات کلیدی، میتوانیم
به Squid
بگوییم
تا آنها را حداکثر با سرعت خاصی دریافت
نماید.
میتوان
پهنای باند باقیمانده را برای سرویسهای
دیگر مانند مرور وب، پست الکترونیکی و...
باقی
گذاشت و یا حتی آنرا نیز محدود کرد.
نصب
و پیکربندی ابزارهای لازم در
این بخش به بررسی چگونگی نصب و پیکربندی
ابزارهای لازم میپردازیم.
مهمترین
نکته در این بخش، فعال بودن ویژگی Delay
Pools در
Squid میباشد.
در
صورتی که Squid
را
از طریق کامپایل نصب کردهاید، حتما
بررسی کنید که به همراه گزینه
enable-delay-pools--
کامپایل
شده باشد، در غیر اینصورت باید آنرا مجددا
کامپایل کنید.
معمولا
بستههایی که به همراه توزیعها ارائه
میشود، دارای چنین ویژگیی به صورت
پیشگزیده میباشد.
با
فرض اینکه از توزیع دبیان استفاده میکنید،
Squid را
نصب میکنیم:
# apt-get install
squid
سرویسدهنده
Squid از
روی مخازن مربوطه دریافت و نصب خواهد شد.
در
قدم دوم، باید این سرویسدهنده را برای
مقاصد خودمان تنظیم کنیم.
به
همراه تنظیم Delay
Pools،
سرویسدهنده برای ارائه سرویس Transparent
Proxy نیز
تنظیم خواهد شد.
فایل
پیکربندی مورد استفاده در Squid
به
شکل زیر خواهد بود:
|
#SQUID
PORT
http_port
8080
hierarchy_stoplist
cgi-bin ? acl QUERY urlpath_regex cgi-bin \? no_cache deny
QUERY
cache_mem
16 MB
maximum_object_size
4096 KB maximum_object_size_in_memory 10 KB
#CACHE
DIR CONFIG cache_dir ufs /var/spool/squid 512 16 512
#LOGS cache_access_log
/var/log/squid/access.log cache_log
/var/log/squid/cache.log cache_store_log
/var/log/squid/store.log
hosts_file
/etc/hosts
refresh_pattern
^ftp: 1440 20% 10080 refresh_pattern ^gopher:
1440 0% 1440 refresh_pattern . 0
20% 4320
acl all
src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl
localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst
127.0.0.0/8
# OUR
LOCAL LAN acl local src 192.168.0.0/255.255.255.0
acl
SSL_ports port 443 563 acl SSL_ports port 873 acl
Safe_ports port 80 21 443 563 70 210 631 901 1025-65535 acl
purge method PURGE acl CONNECT method CONNECT
http_access
allow manager localhost local http_access deny
manager http_access allow purge localhost http_access deny
purge http_access deny !Safe_ports http_access deny CONNECT
!SSL_ports http_access allow localhost http_reply_access
allow all
#HOSTNAME visible_hostname
power
#TRANSPARENT
PROXY httpd_accel_host virtual httpd_accel_port
80 httpd_accel_with_proxy on httpd_accel_uses_host_header
on
store_avg_object_size
50 KB
coredump_dir
/var/spool/squid
#DELAY
POOLS acl magic_words1 url_regex -i 192.168 acl
magic_words2 url_regex -i ftp .exe .mp3 .vqf .rpm .zip .tar.gz
.gz .rar .avi .mpeg .mpe .mpg .qt .ram .rm .iso .raw .wav .mov
.swf acl day time 08:00-23:59
delay_pools
2
delay_class
1 2 delay_parameters 1 4500/40000 4500/40000 delay_access 1
allow magic_words1
delay_class
2 2 delay_parameters 2 4500/40000 4500/40000 delay_access 2
allow day delay_access 2 deny !day delay_access 2 allow
magic_words2
|
این
فایل پیکربندی در آدرس etc/squid/squid.conf/
قرار
میگیرد.
مهمترین
بخش این فایل برای کنترل ترافیک، بخش مشخص
شده با DELAY
POOLS است.
در
خط نخست این بخش یک acl
برای
شبکه داخلی تعریف شده و در خط دوم انواع
فایلهایی که مایل به محدود کردن دریافت
آنها هستیم، مشخص شده است.
در
خط سوم، ساعات کاری که محدودیتها در آن
اعمال میشوند مشخص شده و در خط بعدی، دو
Delay Pool
مختلف
تعریف شده است.
خط
delay_class
مشخص
کننده نوع کلاس pool
بکار
رفته میباشد.
سه
نوع کلاس delay
pool وجود
دارد که برای اطلاع دقیق از انها میتوانید
به مستندات سرویسدهنده Squid
مراجعه
نمایید. خط
delay_parameters
1 مشخص
کننده محدودیتهای اعمالی برای شبکه
داخلی است.
در
این خط مشخص شده که در صورتی که کل شبکه
یا یک آدرس IP
خاص
مقدار حجم دریافتی معادل ۴۰ مگابایت داشت،
از آن پس، سرعت دریافت آن به ۴/۵
کیلوبایت در ثانیه کاهش یابد.
درصورتی
که مایلید تا محدودیت برای مرور صفحات
وجود نداشته باشد و در هنگام مرور صفحات،
همیشه حداکثر سرعت در اختیار باشد، این
خط را به صورت زیر تغییر دهید:
delay_parameters 1
-1/-1 -1/-1
عدد
منفی یک مشخص کننده عدم وجود محدودیت است.
همانطور
که در مثال بالا میبینید، محدودیت ساعت
در خطوط تنظیم کننده مربوط به delay_parameters
2 اعمال
شده است.
توجه
داشته باشید که اعدادی فایل پیکربندی فوق
تماما مثال بوده و آنها را باید بنا به
شرایط شبکه خودتان تنظیم کنید.
پس
از اعمال تنظیمات فوق، سرویسدهنده Squid
را
راهاندازی میکنیم:
# squid -z #
/etc/init.d/squid start
در
مرحله بعدی تنظیم و پیکربندی، باید اشتراک
اینترنت و تنظیمات iptables
را
برای transparent
proxy انجام
دهیم. برای
این کار میتوان از یک اسکریپت ساده مانند
زیر استفاده کرد:
|
#!/bin/sh IPTABLES=/sbin/iptables $IPTABLES
-F
$IPTABLES -t nat -A PREROUTING -i lan1 -p tcp --dport
80 -j REDIRECT --to-port 8080 $IPTABLES -A POSTROUTING -t nat
-o ppp0 -j MASQUERADE
echo 1 >
/proc/sys/net/ipv4/ip_forward echo Starting Internet
Connection Sharing...
|
کافی
است این اسکریپت را در شاخه etc/init.d/
با
نامی مانند ics
ذخیره
کرده و آنرا با chmod
+x اجرایی
کنید. سپس
برای اینکه در هنگام بوت اجرا شود، از
دستور زیر استفاده نمایید:
# ln -s
/etc/init.d/ics /etc/rc2.d/S99ics
از
این پس هنگام بوت سیستم (سطح
اجرایی ۲ در دبیان)
اسکریپت
ics اجرا
خواهد شد و میتوانید ببینید که تنظیمات
کنترلی به خوبی کار میکنند.
برای
اطلاعات دقیقتر در مورد چگونگی اعمال
محدودیتهای ترافیکی با استفاده از
Traffic shaper
میتوانید
به این
آدرس مراجعه کنید.
آلن
باغومیان alan@technotux.org
منبع:
http://www.faqs.org/docs/Linux-HOWTO/Bandwidth-Limiting-HOWTO.html
آخرین ویرایش: ۱۵ دسامبر ۲۰۰۵
|