• 0
eech55

Transparent Forward Cache - Squid

سؤال

img4.jpg

مقدمة

العديد من الشركات تعاني من مشكلة بطئ الإنترنت. إذا لم تعاني فالجميع دائما يريد زيادة سرعة الإنترنت.

دائما ارى من يستخدم bluecoat وغيره من منتوجات أكثر كلفة، بالرغم أننا ممكن أن نغطي على معظم الإحتياجات بالمجان وبإستخدام جهاز pc متواضع، حتى في الشركات الكبيرة.

هذا الكلام ليس نظريا بل طبقته في عدة مؤسسات والتجربة خير برهان. عنق الزجاجة هو خط الإنترنت وأي جهاز pc سيكون قوي جدا، ومعظم الوقت سيكون وضعه شبه idle، وهذا من خلال مراقبة نسبة استخدام المعالج، والذاكرة العشوائية، وسرعة القراءة والكتابة. مهما كان خط الإنترنت سريعا سنجده لا يتعدى الـ100mbps في معظم الأحيان. في معظم الأحيان 2 أو 4 أو 8. وهذا يعتبر لا شيء مقارنة بإمكانيات أي جهاز pc.

فلماذا نعقد الأمور ونشتري معدات أكثر كلفة بحجة الحصول على دعم فني. لو سقط الكاش فلن يتوقف شيء وسيكمل الـtraffic مساره فقط دون كاشينج إلى حين عودته، وهذا بواسطة آلية ستناقشها بإذن الله أيضا.

بكل بساطة، ستحضر جهاز pc يحتوي على منفذ 100mbps، وتنصب عليه هذا البرنامج. وبإجراء تغييرات معينة في الشبكة (وهي سهلة)، سيتم تحويل مسارات جميع الـtraffic الذاهب إلى تصفح الإنترنت من خلال الـproxy هذا، والذي بدوره سيقوم بتخزين تلك الملفات لإستخدامها لاحقا. هكذا لن نحتاج إلى حتى تغيير إعدادات متصفح الإنترنت عند بقية الموظفين لأنها ستكون transparent بالنسبة لهم.

وحتى لو كانت البيئة ثقيلة وتحتاج إلى جهاز قوي فلا مشكلة أيضا. للعلم برنامج squid cache يتم استخدامه بواسطة العديد من مزودات الخدمة في العالم.

إن شاء الله، سنتطرق عن كيفية تنصيب وإعداد forward cache proxy (بعكس reverse الذي تحدثنا عنه في درس سابق).

محتوى الدرس

  • طريقة التثبيت الآلية على نظام Debian, Ubuntu ومشتقاتهم
  • طريقة التثبيت الآلية على نظام Gentoo
  • طريقة التثبيت الآلية على نظام FreeBSD
  • طريقة التثبيت اليدوية
  • إعدادات شائعة (لكن اختيارية) لخادم Squid
  • مقدمة حول Transparent Proxy
  • إعداد خادم Squid وتشغيله كـtransparent proxy
  • إعداد الشبكة لتطبيق Transparent Forward Proxynew.gif

طريقة التثبيت الآلية على نظام Debian, Ubuntu ومشتقاتهم

apt-get install squid

ينزلك البرنامج من الإنترنت، ويثبتلك إياه، وإذا في dependecies ينزلهم ويثبتهم لك تلقائيا. وإذا كان في مجال، كان سيقبل يدك ورأسك أيضا. لينكس صعب؟ :huh:

طريقة التثبيت الآلية على نظام Gentoo

emerge squid

نفس الأعلى، إلا أنه يقوم بتنزيل السورس كود، ثم كوبايل ولنكينج، وثم تثبيت. نفس الكلام ينطبق على الـdependencies. كل هذا تلقائيا في كلمتين.

طريقة التثبيت الآلية على نظام FreeBSD

cd /usr/ports/www/squid
make
make install
rehash

تنزيل، كومبايل، تثبيت، دبندنسيز. لكن الأمر rehash مش ضروري. هذا يعتمد على الـshell، بعضهم يقومون بتخزلين الملفات الـتنفيذية في مسار الـpath في hash table لتسريع الـlookup. الهدف منه أن الـsquid binary files تكون accessable كـأوامر. يعني من دون rehash عندما تستخدم shell مثل tcsh لما تكتب squid ثم إنتر يقول command not found. طبعا ممكن تقوم بـlogout/login ويبنيلك الهاش من جديد، لكن مافي داعي أن نحل المشاكل بأسلوب جحا. إذا كتبت rehash سيبنيه لك. وكما قلت هذا له علاقة بالـshell لا أكثر ولا أقل.

ستظهر لك شاشة، بها خصائص يمكنك ان تختارها. قم بإختيار مامعناه: transparent with PF حتى يقوم بكوبايل مع دعم خاصية الشفافية.

طريقة التثبيت اليدوية

المفروض أنك ما تحتاج لهذه الطريقة. لكن إذا كان لديك سبب ما واحتجت التثبيت اليدوي، فهي كالتالي:

./configure --enable-linux-netfilter
make
make install

لاحظ "--enable-linux-netfilter" هذا مع linux ليدعم الشفافية بواسطة netfilter أو iptables. بالنسبة لنظام freebsd يجب أن تضع "--enable-pf-transparent".

إذا تشابهت عليكم الأمور ممكن تكتب هذا الأمر لتجد لائحة الأوامر:

./configure --help | less

يجب أن تكون عندك اصدارة perl كـdependencis واعتمادا على نظام التشغيل ربما يكون عندك متطلبات أخرى. راجع الرسائل التي تظهر لك وقم بتثبيت الناقص يدويا.

إعدادات شائعة (لكن اختيارية) لخادم Squid

ملاحظة: هذا القسم اختياري، فالإعدادات الإفتراضية ستعمل. لكن إذا أردت زيادة الكفاءة والفائدة _أو_ غذا اتبعت الطريقة اليدوية، فقم بقراءته. في الحالتين فالموضوع أيضا سهل.

حسن يا رجالا كالجبال post-21836-1250712373.gif، كل المصائب ستكون في ملف اسمه squid.conf. لكن السؤال: أين هو؟

مع نظام ubuntu وdebian و gentoo سيكون في:

/etc/squid/squid.conf

مع الغرنيق freebsd سيكون في:

/usr/local/etc/squid/squid.conf

نظام freebsd يميز بين مسارات البرامج التي _أنت_ ثبتها، وبين مسارات البرامج التي تأتي مع النظام. فهناك فرق بين /usr/local/etc وبين /etc. واي برنامج تثبته سيظهر في /usr/local/etc. بينما مع لينكس كل شيء في /etc. القضية بسيطة وماهي إلا مسارات مختلفة لا أكثر ولا اقل.

طريقة تنظيم الإعدادات

افتح ملف squid.conf بأي محرر نصوص. وستجد أنه مليء بالملاحظات المسبوقة بعلامة المربع الـ#. فالـdocumentation فيه ممتازة. قبل كل أمر توجد مقدمة وأمثلة، وبعدها تجد الأمر مسبوقا بالـ#. عندما يكون مسبوقا بالـ# يعني وكأنه ممسوح من ملف squid.conf، وفائدته فقط حتى يخبرك أن هذا هو الـdefault

أين يتم تخزين ملفات الكاش؟

افتح ملف squid.conf، وابحث عن cache_dir. وستجد شيئا يشبه هذا:

#Default:

# cache_dir ufs /var/spool/squid 100 16 256

ufs نظام تخزين squid للكاش وموجوزد من زمان. aufs و diskd يخزنون بنفس صيغة ufs لكن الفرق أنهم يتجنبون اغلاق squid process في حال كان الـdisk i/o عاليا. الأول يقوم بفصله بواسطة thread آخر، الثاني يقوم بفصله كـprocess آخر. حاليا سنستخدم ufs للتبسيط.

/var/spool/squid هو المسار الذي يخزن فيه الكاش. 100 حجم الكاش بالبايت. يعني بالإعدادات الإفتراضية 100MB وهذا قليل. أنصحك تخليه أكبر. شخصيا أرى 50000MB جيد (يعتمد على المساحة المتوفرة، دائما خذ أقل من المساحة المتوفرة لتكون في السليم).

16 هو عدد فولدرات الكاش المستوى الأول. 256 هو عدد فولدرات الكاش المستوى الثاني. يعني يوجد عندنا 16 فولدر (مستوى أول)، وداخل _كل_ فولدر منهم يوجد 256 فولدر آخر (مستوى ثاني). وداخل كل فولدر من المستوى الثاني سيتم تخزين ملفات الكاش.

السؤال يقول، مالحكمة من 256 فولدر في 16 فولدر آخر؟ هذا من أجل زيادة سرعة إيجاد الملفات. كلما كان العددين أكبر، كلما زادت السرعة لكن ضاع جزء أكبر من مساحة القرص الصلب. إذا كنت مستخدم مبتدئ لاعليك من هذا ولمعظم الشركات لن تفرق كثيرا.

الفكرة تأتي من أن كل فولدر هو في الحقيقة عبارة عن ملف يحتوي على اسماء الملفات التي بداخله + الـinodes. وإذا زدنا حجم الكاش سيكون لدينا العديد من الـcache object files داخل تلك الملفات، وهكذا سيصبح حجم _ملف_ الفولدر كبير. لاحظ: حجم _ملف_ الفولدر، وليس _محتوى_ الفولدر. وهكذا سيكون ابطأ لأنه حتى يقوم الـfile system بالحصول على الـinode لذلك الـobject سيضطر للبحث في قائمة أكثر طولا.

ليس هذا فحسب، بل أيضا سيتم خلق pointers داخل pointers فقط لوصف ملف الفولدر لأن حجمه كبير والمساحة المتوفرة في كلـinode لوضع الـpointers لا تكفي فيضطر نظام الملفات إلى اتباع أسلوب _شجري_. حيث أن كل pointer موجه إلى block، وكل block عادة 1024Byte. لكن عندما يصبح شجريا فسيكون عندنا pointer على pointer وثم block. هذا أمر طبيعي يحدث مع معظم أنظمة الملفات. لكن أنظمة الملفات الأحدث مثل ext4 و ReiserFS4 تحتوي على خاصية اسمها Extents فهي لا تستخدم خاصية pointer لكل block إنما تضع range وهذا يتجنب هذه المشكلة الأخيرة. للإستزادة حول Extents اقرأ هذا الرابط.

خلاصة الكلام، عندما تزيد حجم الكاش، فكر في زيادة عدد فولدرات المستوى الأول والثاني. وهذا _فقط_ لزيادة السرعة.

فحتى تزيد من حجم الكاش، لزيادة السرعة وارشاد استهلاك الإنترنت:

#Default:

# cache_dir ufs /var/spool/squid 100 16 256

cache_dir ufs /var/spool/squid 50000 32 512

لماذا بالذات 32 و 512؟ هذا يعتمد على نوعية مستخدميك والـobjects التي يحدث لها كاش. نحن قلنا 50000 حجم الكل، لكن لم نحدد _عدد_ الكل. ممكن الـ50000 ميغا بايت تكون عبارة عن عدد كبير من الملفات الصغيرة (بالتالي يجب زيادة 32 و 512)، أو ممكن تكون عبارة عن عدد قليل لكن ملفات كبيرة الحجم (بالتالي لاداعي لزيادته).

وفي كل حال زيادة عدد الفولدرات مش ضروري. هذا فقط إذا اردت زيادة السرعة. للمستخدم المبتدئ لا تكترث بهذا. كل ماعليك هو زيادة الحجم وأنت مغمض العينين.

كيف أتم خلق ملفات الكاش؟

على نظام ubuntu يحدث تلقائيا. على نظم freebsd أو الطريقة اليدوية ستكتب الأمر:

squid -z

وكل مايقوم به هذا الأمر، بكل بساطة، خلق فولدرات 32 في 512.

بما أننا قمنا بتعديل عدد الفولدرات. أنصح بمسح الكاش القديم، وبنائه من جديد بواسطة squid -z. يعني

rm -r /var/spool/squid/*

squid -z

ماهو الحجم الأقصى لكل cached object؟

ابحث عن الجزئية هذه المسبوقة بالـ# وقم بإضافة التالي

#Default:

# maximum_object_size 8 KB

maximum_object_size 100 MB

هكذا لو نزلت أحد ملف حجمه 100MB وماتحت سيتم تخزينه في الكال. لكن لو نإذا كان حجمه أكثر فلن يتم تخزينه. لأننا لا نريد ضياع الكاش ومسح الملفات السابقة بفضل مستخدم قام بتحميل أفلام كبيرة.

ماذا يحدث لو الكاش full؟

سيتم مسح cached objects أخرى واستبدالها بالـobjects الجديدة. لكن السؤال يقول، بناءا على ماذا؟ أهمهم كالتالي:

  • LRU - مفعل افتراضيا. يقوم بإزالة _آخر_ ماتم استدعاؤه من الكاش.
  • heap GDSF - يقوم بإزالة الـobjects _الأكبر_ والتي حصلت على frequency أو تكرار للـhit بمعدل أقل. بعبارة أخرى، سيبقى بالكاش ملفات أصغر ذات hit rate أعلى. يعني سيزيد total hit quantity لكن سيقل total hit size
  • heap LFUDA - نفس السابق إلا أنه لا يهتم بحجم الملف. لذا زيادة الـmaximum_object_size سيفيد هنا، وسيؤدي إلى زيادة total hit size. هذا نحتاجه لأننا قمنا بزيادة الـmaximum_object_size أيضا. فهما مرتبطين إذا أردنا استخدامهم بشكل جيد.

#Default:

# cache_replacement_policy lru

cache_replacement_policy heap LFUDA

مقدمة حول Transparent Proxy

البروكسيات العادية الغير شفافة، تقوم بالإستماع على منفذ معين، وليكن 8080، او 3128، ولا أي منفذ آخر. في هذه الحالة يجب اعداد جميع متصفحات الإنترنت بإستخدام هذا البروكسي من خلال اعطائه رقم الـip و المنفذ لهذا البروكسي. سواءا يدويا أم آليا. لكن هذه الطريقة لا تجبر المستخدم بإستخدام البروكسي.

كطريقة بديلة، بإمكاننا استخدام البروكسي الشفاف - transparent proxy - والذي بدوره سيقوم بإستقبال الطلبات دون علم المستخدم. يعني من غير اعداد البروكسي في متصفح المستخدم، أو حتى إذا قام بالمستخدم بوضع بروكسي _آخر_ فبالإمكان تحويله بشفايفة إلى البروكسي الشفاف دون علم المستخدم.

وهذا مطبق في عديد من الدول منها مزودة خدمة الإنترنت في الإمارات العربية المتحدة. ولو قام أحدكم بوضع أي بروكسي آخر خارجي على منفذ 8080 فسيجد أنه في الواقع يتم تحويله دون علمه إلى بروكسي تابع لمزودة الخدمة بشفافية.

قبل كل شيء، هناك عدة نقاط يجب معرفتها:

  • عندما لا يقوم متصفح الإنترنت بإستخدام أي بروكسي، أي اتصال مباشر بالإنترنت، فإن الطلبات تخرج إلى رقم IP تابع للموقع المطلوب، والمنفذ على الأرجح سيكون 80
  • فشكل البكت، على النتورك، سيكون ip.src=client ip.dst=google's_ip tcp.src=random tcp.dst=80
  • لكن اذا قمنا بوضع اعدادات بروكسي، فالبكت الخارج من متصفح الإنترنت سيكون متجها إلى البروكسي ومنفذه.
  • فبالتالي شكل البكت على النتورك مع اعداد البروكسي سيكون ip.src=client ip.dst=proxy's_ip tcp.src=random tcp.dst=8080
  • في الحالتين تم ارسال طلب إلى http://google.com، لكن على مستوى البكت الفرق شاسع.
  • في الحالة الأولى (من غير بروكسي)، سيقوم متصفح الإنترنت أيضا بالـDNS resolving لـgoogle.com يعني سنرى DNS بكتس تخرج من الجهاز.
  • في الحالة الثانية (مع بروكسي)، لن يقوم متصفح الإنترنت بإستخدام DNS، فكل الذي سيقوم به أنه سيرسل اسم "google.com" هكذا كما هو داخل الطلب، وثم يتولى البروكسي عملية الـname resolving بواسطة الـDNS. لذا لن نشاهد DNS يخرج من جهاز العميل (متصفح الإنترنت). للعلم، حتى لو لم يكن عند العميل خادم DNS سيعمل كل شيء طبيعيا لأن عملية تحويل الdomain name على البروكسي أساسا.

كيف سيعمل البروكسي الشفاف - Transparent Proxy:

  • على مستوى النتوورك، بطريقة وبأخرى (سنشرحها لاحقا)، سنقوم بتحويل مسار البكتس إلى البروكسي.
  • طبعا ليس كل البكتس، إنما فقط البكتس المشبهوة أنها للمواقع. مثلا منفذ tcp80 و tcp8080 وغيرها من منافذ.
  • فصحيح أن المستخدم لا يعلم أن هناك بروكسي شفاف، إلا أن الشبكة ستقوم بتحويل مسار الطلب إلى بروكسي شفاف فالمنتصف دون علمه.
  • هذا البروكسي الشفاف سيستقبل البكتس كما هي. يعني بكتس ذاهبة إلى جوجل على منفذ 80، وبكتس ذاهبة إلى بروكسي آخر على منفذ 8080.
  • لكن كيف سيقوم البروكسي بمعالجة البيانات بينما هو فقط يتنسط على منفذ معين (مثلا 3128)؟ أحد الإحتمالات هو استخدام port forwarding. وهذا ماسنتكم عنه في هذا الدرس.
  • الـport forwarding، سيقوم بتغيير الـdestination IP address والـport numbe إلى localhost:3128
  • وبهذه الطريقة سيقوم البروكسي بمعالجته بحكم أن البكت قد تم إرساله إلى المنفذ الذي يتنسط عليه.
  • لكن هناك سؤال، إذا خطر فبالك فهذا دليل أنك مصحصح: بعدما يتم تحويل رقم الـIP والمنفذ ليشير إلى البروكسي، مثلا google_ip تحول إلى localhost_ip، ومنفذ 80 تحول إلى منفذ 3128. فكيف سيقوم البروكسي أن المستخدم أراد دخول جوجل ولا ياهو؟ الآي بي تغير!
  • الحل هو من خلال API يستخدمه Squid. مثلا عندما قام IPTABLES أو PF بتحويل مسار البكت، فبإمكان Squid معرفة الأرقام القديمة الصحيحة من خلال ذلك الـAPI
  • ولهذا السبب، وقت الـcompile بالطريقة اليدوية، عليك تحديد اسم الحائط الناري الذي ستستخدم معه Transparent Proxy. إذا كنت تستخدم IPTABLES بيجب عليك اخباره بذلك. اذا كنت تريد استخدام PF فيجب عليك اخباره بذلك وقت الـcompiling. النسخة الموجودة مع Debian تم compile لتعمل مع IPTABLES، لهذا السبب لا مشكلة. بينما نسخة الـFreeBSD يجب عليك وقت الـcompiling ووضع علامة "صح" بجوار Transparent with PF إذا كنت تستخدمه.
  • هكذا عندما يستقبل البروكسي البكت، صحيح أن الـdestination ip مختلف، إلا أنه سيتمكن من معرفة الرقم الحقيقي قبل الـport forwarding بواسطة تلك الـAPI التي تعتمد على الحائط الناري المستخدم.
  • الفائدة من استخدام الـAPI مهم في حالة كان العميل لم يقم بوضع بروكسي. أي اتصال مباشر. لأنه معيار HTTP القديم لم يقم بوضع hostname، فالطريقة الوحيدة لجعله يعمل هو من خلال معرفة destination IP والذي نحتاج إلى تلك الـAPI لمعرفته. بينما إذا قام المستخدم بوضع بروكسي، فلا داعي لإستخدام تلك الـAPI لأن الجهة المطلوبة سيتم وضعها في الـبكت.
  • الـAPI هذه تعمل بشفافية تامة وأنا تكلمت عنها حتى تفهم مايحدث ولا تستغرب من هذا السحر في منتهى الجمال، حفاظا على بقية شعرك من التساقط. بعبارة أخرى شعر راسي تساقط بالنيابة عن شعر رأسك. شعر الرأس مهم في معظم المجتمعات.
  • إذا تساقط شعر راسك فالعلاج صعب. مثلا هناك 5a-reductase inhibitors لكنها تؤدي إلى مشاكل أخرى في الهرمونات مثل انخفاض نسبة dihydrotestosterone في الدم. يعني سيكون عندك testosterone لكن لن يتحول إلى الصورة الفعالة، بالتالي فقدان الرجولة شيئا فشيئا. لذا أفضل شيء هو شامبو مضاد للقشرة. لكن هذا خارج الدرس على كل حال.

إعداد خادم Squid وتشغيله كـtransparent proxy

اعداد squid

افتح ملف squid.conf، واكتب التالي:

# Squid normally listens to port 3128

http_port 3128 transparent

وفقط. هكذا انتهينا من جانب Squid. الآن يجب علينا اعداد الحائط الناري على خادم Squid وpolicy- based routing على راوتر الشبكة، أو الـcollapsed cored-stribution switch كما هو مبين في الرسمة المرفقة.

وثم نشغل خادم Squid بواسطة init scripts على لينكس:

/etc/init.d/squid start

أو بواسطة rc scripts على Freebsd

/usr/local/etc/rc.d/squid start

الفكرة نفسها لكن مسار الـscript مختلف. طبعا ممكن تشغيله من دون اسكربت، يعني تكتب "squid" وكفى لكن لا أنصح بهذا.

اعداد الحائط الناري على خادم squid

هنا يجب علينا إضافة قوانين في iptables تقوم بتحويل مايأتي على tcp 80 و tcp 8080 إلى منفذ localhost:3128 tcp

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

وإذا كنا نستخدم freebsd او غيرها من مشتقات bsd فسنقوم بنفس الشيء لكن بواسطة PF:

rdr pass on fxp0 proto tcp from any to any port 80 -> localhost port 3128

هذا تكتبه في ملف pf.conf والذي مساره معرف في /etc/rc.conf

cat /etc/rc.conf | grep pf_

pf_enable="YES"

pf_rules="/etc/pf.conf"

فمثلا، هنا عندنا الملف في مجلد etc واسمه pf.conf. لذا نضع اعدادات PF فيها. وكما قلت هذا فقط لأنظمة BSD التي تستخدم حائط نار PF فقط.

إعداد الشبكة لتطبيق Transparent Forward Proxy

كما تشاهد في الرسمة التوضيحية. الذي يربط الشبكة ببعضها هو الـcollapsed core-distribution switch. وفي هذه الحالة هذا هو أيضا الـRouter. في حال كان تصميم الشبكة مختلفا لا مشكلة. كل ما عليك هو تطبيق خاصية policy-based routing على الrouter الذي يربط الـشبكات المختلفة ببعضها البعض، ومنها الشبكة التي بها Squid.

ماذا يعني Policy-Based Routing

محولات الشبكة، أو الـRouters، بالإعدادات الإفتراضية، تقوم بتحويل مسارات الـpackets بناء على destination IP address. يعني بعبارة أخرى، ممكن نقول IP destination-based Routing (تسمية غير شائعة فقط للتوضيح).

بينما مع الـPolicy-Based Routing، فبإمكاننا اخبار محول الشبكة (router) باختيار المسار المطلوب، بناء على معلومات أخرى كالـ:

  • Src TCP
  • Dst TCP
  • Src UDP
  • Dst UDP
  • IPP, DSCP يعني QoS Bits
  • ICMP
  • وغيره من طرق ممكن تتفلسف فيها بناء على access-lists كما تشاء.

الخلاصة أن القضية مع الـPolicy-Based Routing مرنة. ونحن في الـTransparent Squid Proxy سنطلب من محول الشبكة، أو الـcollapsed core-dist L3 switch بتحويل أي شيء متجه إلى منفذ TCP 80 و TCP 8080 إلى خادم البروكسي لدينا. والنتيجة ستكون كالتالي:

  • أي مستخدم لم يقم بوضع اعدادات البروكسي، سيمر من خلال Squid proxy دون علمه بشفافية تامة بالنسبة له
  • أي مستخدم، قام بوضع بروكسي آخر، يستخدم مثلا منفذ 8080 سيتم أيضا تحويله دون أن يدري إلى Squid بشفافية تامة بالنسبة له
  • طبعا بإمكاننا إضافة منافذ أخرى شائعة مثل 8181
  • أو حتى بواسطة استخدام Access-List يقوم بتحديد بروكسيات بوجه التحديد، مثلا source IP any, destination IP=badproxies.com destination port:80 - لاحظ أنه هذا البروكسي يستخدم منفذ شائع وهو 80، لكننا بواسطة تحديد رقم الآي بي بإمكاننا استخراجه كالشعرة من العجين وإلزام مستخديمنا بالدخول من Squid بشفافية دون علمهم حتى لو قاموا بإختيار ذلك البروكسي.

إعداد Policy-Based Routing

الإعداد كذلك سهل، اتبع هذه الخطوات. أول خطوة: نعلم الراوتر، ماذا يعني www traffic، وذلك من خلال access-list عادية.

router#configure terminal

router(config)#ip access-list extended WWW-TRAFFIC

router(config-ext-nacl)#deny ip host 10.2.0.1 any

router(config-ext-nacl)#permit tcp any any eq www

أنصح بإستخدام named access-lists لأنها ستريحك مستقبلا لما تعدل فيها.

لماذا وضعت deny ip host 10.2.0.1 any؟ لأن 10.2.0.1 هو رقم IP البروكسي. ويجب اخراجه. إذا لم أقم بإخراجه، حينها سيحدث لدينا loop بين البروكسي والراوتر إلى أن ينتهي ttl = 0.

لماذا وضعت permit tcp any any eq www؟ هذا لأنني أريد على الجميع المرور بالبروكسي. لكن إذا كنت تريد تخصيص قسم محدد، فتستطيع تصغير الدائرة وذكر الشبكات التي تريد فقط.

ملاحظة: عندما نقول deny لا يحدث drop للبكت. إنما وفقط يحدث normal routing وليس policy-based routing. فـpermit يعني policy-based routing، وdeny يعني normal routing.

وثم نقول للراوتر: آلية الـتحويل الـwww-traffic إلى squid proxy.

router#configure terminal

router(config)#route-map FORCE-TRANS-PROXY

router(cconfig-route-map)#match ip address WWW-TRAFFIC

router(cconfig-route-map)#set ip next-hop 10.2.0.1

لاحظ أن هذا فقط آلية التحويل. حتى الآن لم نطبق أي شيء.

حتى نطبقه نطبق التالي على الـinbound interface. المنفذ الذي _يستقبل_ البكت من المستخدمين. في هذا الدرس المستخدمين مشبوكين على vlan 10، لذا نطبقه هناك. لكن إذا كان لديك عدة vlans للمستخدمين وعدة SVI يجب عليك تطبيقها على كل SVI.

router#configure terminal

router(config)#interface vlan 10

router(cconfig-if)#ip policy route-map FORCE-TRANS-PROXY

ومبروك عليك الـTransparent Squid Proxy. الدعم الفني مجانا هدية من قسم الشبكات بالفريق العربي للبرمجة بمناسبة العيد :).

post-21836-1252625225_thumb.png

تم تعديل بواسطه eech55
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

11 إجابة على هذا السؤال .

  • 0
العديد من الشركات تعاني من مشكلة بطئ الإنترنت. إذا لم تعاني فالجميع دائما يريد زيادة سرعة الإنترنت.

دائما ارى من يستخدم bluecoat وغيره من منتوجات أكثر كلفة، بالرغم أننا ممكن أن نغطي على معظم الإحتياجات بالمجان وبإستخدام جهاز pc متواضع، حتى في الشركات الكبيرة.

هذا الكلام ليس نظريا بل طبقته في عدة مؤسسات والتجربة خير برهان. عنق الزجاجة هو خط الإنترنت وأي جهاز pc سيكون قوي جدا، ومعظم الوقت سيكون وضعه شبه idle، وهذا من خلال مراقبة نسبة استخدام المعالج، والذاكرة العشوائية، وسرعة القراءة والكتابة. مهما كان خط الإنترنت سريعا سنجده لا يتعدى الـ100mbps في معظم الأحيان. في معظم الأحيان 2 أو 4 أو 8. وهذا يعتبر لا شيء مقارنة بإمكانيات أي جهاز pc.

فلماذا نعقد الأمور ونشتري معدات أكثر كلفة بحجة الحصول على دعم فني. لو سقط الكاش فلن يتوقف شيء وسيكمل الـtraffic مساره فقط دون كاشينج إلى حين عودته، وهذا بواسطة آلية ستناقشها بإذن الله أيضا.

بكل بساطة، ستحضر جهاز pc يحتوي على منفذ 100mbps، وتنصب عليه هذا البرنامج. وبإجراء تغييرات معينة في الشبكة (وهي سهلة)، سيتم تحويل مسارات جميع الـtraffic الذاهب إلى تصفح الإنترنت من خلال الـproxy هذا، والذي بدوره سيقوم بتخزين تلك الملفات لإستخدامها لاحقا. هكذا لن نحتاج إلى حتى تغيير إعدادات متصفح الإنترنت عند بقية الموظفين لأنها ستكون transparent بالنسبة لهم.

وحتى لو كانت البيئة ثقيلة وتحتاج إلى جهاز قوي فلا مشكلة أيضا. للعلم برنامج squid cache يتم استخدامه بواسطة العديد من مزودات الخدمة في العالم.

إن شاء الله، سنتطرق عن كيفية تنصيب وإعداد forward cache proxy (بعكس reverse الذي تحدثنا عنه في درس سابق).

شكراً لك eecch

كنت أفكر فيه كحلٍ بديل فعلاً في الفترة السابقة

السؤال .. هل يمكن تطبيقه مع مجرد معرفة بسيطة بأنظمة Unix Like ؟؟ هذا سيحدد أمور كثيرة

وعلى أي حال بانتظار المزيد عنه .

شكراً لك ،،

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لا شكر على واجب..

كل ما تحتاجه هو أن تعلم كيف تستخدم أي برنامج text editor، وكيف تستخدم الكيبورد لطباعة بعض الأوامر في الـshell.

طبعا لا تحتاج أن تكون خبير يونكس. فأنا لست خبير يونكس كذلك :).

مستقبلا إذا أردت تغيير الإعدادات، تقوم بتعديل ملف تكست، وثم تقوم بـreload للسيرفر (لاحظ ليس restart، فقط reload للإعدادات - الخدمة لن تنقطع).

لهذا السبب هذا في نظري اسهل بكثير من أسلوب الحفر والبحث في القوائم ومربعات الحوار وألسنة التبويب.

الآن سأقوم بتعديل ردي الأول وإضافة الفهرس.

إن شاء الله أحصل فرصة وأضع الخطوات وهي سهلة بإذن الله.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
هكذا لن نحتاج إلى حتى تغيير إعدادات متصفح الإنترنت عند بقية الموظفين لأنها ستكون transparent بالنسبة لهم.

شكرا على الشرح، وفي انتظار هذه الجزئية!

:huh:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بما انك مستعجل:

كل ماعليك هو http_port 8080 transparent و استخدام policy-based routing على الـراوتر مع port forwarding على الخادم.

او استخدام wccpv2 كحل بديل للـpbr. هذا جيد في حال كان هناك multiple L3 hops في الطريق لأنه سيسهل فلا داعي لـpbr على كل hop. لكن الكفائة أقل حيث أنه يستخدم GRE tunnels.

في حال كان الخادم مربوط مباشرة بالراوتر استخدم pbr مع port forwarding. حيث أن الإعدادات فقط على جهازين.

في حال كان بين الخادم والراوتر أجهزة راوترات أخرى، فعوضا من اعداد pbr على كل راوتر، تقوم بـwccpv2 وهكذا بواسطة GRE سيكون الربط بين جهازين virtually.

لذا، في حال الربط المباشر سيكون wccpv2 أعقد.

التفاصيل عندما أتم الدرس بإذن الله.

تم تعديل بواسطه eech55
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

قمت بإضافة مقدمة عامة عن آلية عمل الـtransparent proxy او البروكسي الشفاف.

يحتوي على شرح لآلية العمل. هذا مفيد جدا.

ولاحقا سأكتب الإعدادات وهي بسيطة.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

انتهى الدرس بإذن الله.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شرح ممتاز , وشكرا على الدعم الفني المجاني والـ hair loss cure

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا لك يوجد عندي مشكلة على squid cache

لم استطيع تغيير ال #Default:

# cache_dir ufs /var/spool/squid 100 16 256

cache_dir ufs /var/spool/squid 50000 32 512

عندما اغير الرقم 16 الى 32 او 256 الى 512 لم استطيع تشغيل ال squid cache يوجد error :

error 1067 : the process terminated unexpectedly

افضل حل تركته هو : cache_dir ufs /var/spool/squid 20000 16 512

هل هناك مشكلة في هذا ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم اخى

تقبل مرورى

و شكرا على هذا المجهود الجبار

لكن يوجد سوال

هل يمكن تقسيم السرعه على المستخدمين ؟

و كيفيه عمل ذلك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وضعت تعليق فى المكان الخطأ متأسف

تم تعديل بواسطه Ah.K.EL-Saman
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .