مقدمة:
إذا كنت تسمع كثيرًا عن «السحابة» في السنوات الأخيرة، فربما سمعت أيضًا عن «الطرف» أو «الحافة».
يعكس مصطلح الحوسبة الطرفية إدراك أن للسحابة حدودًا. وللوصول إليها، يجب أن تتصل بياناتك بأحد مراكز البيانات المادية التي تشغّلها. وقد يكون انتقال البيانات من حاسوبك إلى عنقود خوادم سريعًا في بعض السياقات، لكنه يعتمد بشدة على الموقع الجغرافي وبنية الشبكة. ويمكن للسحابة أن تبلغ أقصى القوة والسرعة، لكنها لا تستطيع تعويض وقت الرحلة ذهابًا وإيابًا إلا قليلًا.
والحل استخدام أطراف الشبكات الإقليمية والسحابة. فعندما تنفذ الخدمات الأولية أو العمليات الحاسوبية على خوادم قريبة من الطرف، تتسارع تفاعلات المستخدم مع السحابة.
وبالمبدأ نفسه، تستطيع إنشاء طرفك الخاص بتشغيل بعض الخدمات على خادم منزلي لتقليل زمن الرحلات. ولا ترهبك المصطلحات؛ فقد تكون الحوسبة الطرفية ببساطة جهاز إنترنت أشياء، أو خادمًا يتصل بخدمات اتحادية. ومن التحسينات المفيدة السهلة لشبكة المنزل أو العمل تشغيل خدمة تخزين DNS مؤقتًا.
ما نظام أسماء النطاقات؟
يتيح DNS ترجمة عناوين IP للخوادم، سواء في السحابة أو داخل المدينة، إلى أسماء مألوفة مثل opensource.com. ووراء كل اسم نطاق رقم؛ فالأسماء للتيسير على البشر الذين يتذكرون كلمات أسهل من سلسلة أرقام. وعندما تكتب example.com في المتصفح، يرسل طلبًا صامتًا عبر المنفذ 53 إلى خادم DNS لمطابقة الاسم بسجله، فيعيد أحدث عنوان IP معروف له. وهذه رحلة ذهاب وعودة من حاسوبك إلى الإنترنت.
وبعد الحصول على الرقم الصحيح، يرسل المتصفح طلبًا ثانيًا مباشرة إلى الوجهة، مستخدمًا الرقم بدل الاسم. وهذه رحلة أخرى. وقد يرسل حاسوبك أيضًا، وفق إعداده، طلبات DNS لأسماء الأجهزة المحلية، فيزداد الأمر.
ويمكن تقليل هذه الحركة بالتخزين المؤقت محليًا. فعند حصول أحد الأجهزة على عنوان موقع، يُحفظ محليًا، فلا تحتاج طلبات الشبكة التالية إلى السؤال عنه مجددًا. ومن المزايا الإضافية إمكان حجب الإعلانات والتحكم عمومًا في تفاعل أجهزة الشبكة مع بعض تقنيات الإنترنت الأساسية.
تثبيت Dnsmasq على لينكس
ثبته بمدير الحزم. وفي Fedora وCentOS وMageia وما شابهها
$ sudo dnf install dnsmasq dnsmasq-utils
وفي Debian ومشتقاته استخدم apt بدل dnf.
إعداد Dnsmasq
يتضمن ملف الإعداد الافتراضي خيارات كثيرة. ويوجد عادة في /etc/dnsmasq.conf، مع تعليقات توضيحية جيدة تسمح بقراءته واختيار المناسب للشبكة. وهذه بعض الخيارات التي أفضلها.
أبقِ النطاقات المحلية محلية؛ فلا تمرر الأسماء المجردة التي لا تحتوي نقطة أو جزء نطاق، ولا عناوين فضاءات الشبكات الخاصة غير الموجهة:
# Never forward plain names (without a dot or domain part) domain-needed # Never forward addresses in the non-routed address spaces bogus-priv
وتجاهل محتوى المواقع الإعلانية الشائعة. وتستبدل البنية الآتية عنوان النطاق بين الشرطتين المائلتين بالعنوان اللاحق:
# replace ad site domain names with an IP with no ads address=/double-click.net/127.0.0.1
وحدد حجم الذاكرة المؤقتة. فالاقتراح الافتراضي 150، لكنني لم أشعر أن هذا العدد من المواقع يكفي
# Set the cachesize here cache-size=1500
العثور على resolv.conf
في معظم نظم لينكس، تدير خدمة systemd-resolved الملف /etc/resolv.conf، الذي يحدد خوادم الأسماء التي يتصل بها الحاسوب لتحويل الاسم إلى IP. ويمكن إيقاف resolved وتشغيل dnsmasq وحده، أو تشغيلهما معًا مع توجيه dnsmasq إلى ملف محلل خاص به.
لإيقاف resolved، يورد الأصل
$ sudo systemctl disable --now systemd-resolved
وبدلًا من ذلك، لتشغيلهما معًا
$ cat << EOF >> /etc/resolvmasq.conf # my network name domain home.local # local hosts enterprise 10.0.170.1 yorktown 10.0.170.4 # nameservers nameserver 208.67.222.222 nameserver 208.67.220.220 EOF
في المثال، home.local اسم نطاق أمنحه لكل أجهزة شبكتي، عبر بروتوكول الضبط الديناميكي للمضيف DHCP أو محليًا. والجهازان enterprise وyorktown خادماي المنزليان؛ وبإدراجهما مع عناوينهما المحلية يمكن الوصول إليهما بالاسم عبر dnsmasq. وأخيرًا، تشير أسطر nameserver إلى خوادم أسماء إنترنت معروفة جيدة. ويمكن استخدام المدرج منها، أو خوادم مزود الخدمة، أو أي خادم عام تفضله.
وفي dnsmasq.conf، اضبط resolv-file ليشير إلى الملف الخاص
resolv-file=/etc/resolvmasq.conf
بدء الخدمة
قد تبدأ بعض التوزيعات dnsmasq تلقائيًا بعد التثبيت، وتترك أخرى البدء للمستخدم حين يستعد. وفي الحالتين يمكن استخدام systemd لبدء الخدمة. والأمر الآتي منقول كما ظهر في الأصل:
$ sudo systemd enable --now dnsmasq
اختبرها بأمر dig. وعند أول اتصال بخادم، قد يكون زمن الاستعلام بين 50 و500 مللي ثانية، ونرجو ألا يتجاوز ذلك:
$ dig example.com | grep Query\ time ;; Query time: 56 msec
لكن المحاولة التالية تقلل الزمن كثيرًا
$ dig example.com | grep Query\ time ;; Query time: 0 msec
وهذا أفضل بكثير.
إتاحة Dnsmasq للشبكة كلها
الأداة مفيدة لجهاز واحد، وأفضل إذا استفادت منها الأجهزة جميعًا. والخطوات الآتية تشرح إتاحتها للشبكة المحلية.
احصل أولًا على عنوان IP المحلي للحاسوب الذي يشغّلها. يعرض الأصل في هذا الموضع المقطع التالي
$ dig example.com | grep Query\ time ;; Query time: 0 msec
في مثال المؤلف، عنوان Raspberry Pi الذي يشغّل dnsmasq هو 10.0.170.170. ولأنه أصبح جزءًا مهمًا من البنية، خُصص له عنوان ثابت من موجّه DHCP. ولو سُمح بعنوان ديناميكي، فمن المرجح ألا يتغير، لأن البروتوكول مصمم للمساعدة على ذلك؛ لكن تغيّره سيحرم الشبكة كلها من فائدة الخدمة.
افتح خدمة DNS في جدار حماية الخادم باستخدام firewall-cmd للسماح بالطلبات وإرسال الإجابات
$ sudo firewall-cmd --add-service dns --permanent
وبمعرفة عنوان خادم DNS المحلي، 10.0.170.170 في المثال، ويمكن أن يختلف تمامًا في شبكتك، أضفه خادمَ أسماء رئيسيًا في موجّه المنزل.
توجد موجّهات كثيرة ولا واجهة موحدة؛ لكن المهمة واحدة، وسيرها متقارب عادة. وفي موجّه Turris Omnia الخاص بالمؤلف، تتيح الواجهة المتقدمة DNS forwarding، لإرسال الطلبات إلى خادم مختار. وإدخال عنوان خادم dnsmasq يوجه حركة DNS كلها إليه للتخزين المؤقت والتحليل. أما موجّه TP-Link الآخر، فتقع إعدادات DNS في لوحة DHCP.
وقد يلزم بعض الاستكشاف في واجهة الموجّه للعثور على الإعداد. وعند الوصول إليه، أدخل عنوان الخادم واحفظ. وتتطلب بعض الأجهزة إعادة التشغيل بعد التعديل. وترث أجهزة الشبكة إعداداتها من الموجّه، فتمر طلبات DNS المتجهة إلى الإنترنت عبر خادم dnsmasq.
قرب الطرف
كلما ازدادت المواقع المحفوظة في ذاكرة DNS المحلية، قلت حاجة الطلبات إلى تجاوز خادمك المحلي. ومبدأ الحساب محليًا وبسرعة متى أمكن هو ما يحرك الحوسبة الطرفية. وتوضح التجربة أهمية المواقع الجغرافية الاستراتيجية لتسريع التفاعل مع الإنترنت. وسواء عملت بالحوسبة الطرفية في المنزل أو المؤسسة أو بوصفك معماريًا سحابيًا، فالطرف عنصر مهم في السحابة يمكن الاستفادة منه.
ملاحظة تحريرية على أمثلة الأصل
احتُفظ بالمقاطع البرمجية كما نشرها المؤلف لأمانة الترجمة التاريخية. يتضمن مقطع بدء الخدمة كتابة systemd بدل اسم أداة التحكم بالخدمات، كما أن المقطع الذي يلي طلب معرفة عنوان IP يكرر مثال dig لزمن استعلام DNS ولا يعرض العنوان المحلي. هذان موضعان غير متسقين في الأصل، ولم تُستبدل بهما أوامر لم يوردها المصدر.
المراجع
- https://www.redhat.com/en/topics/cloud?sc_cid=7013a000002gp8aAAA
- https://www.redhat.com/en/services/training/do092-developing-cloud-native-applications-microservices-architectures?sc_cid=7013a000002gp8aAAA
- https://www.redhat.com/en/topics/cloud-computing/what-is-hybrid-cloud?sc_cid=7013a000002gp8aAAA
- https://go.redhat.com/hybrid-cloud-strategies-20180912?sc_cid=7013a000002gp8aAAA
- https://www.redhat.com/en/topics/containers/what-is-kubernetes?sc_cid=7013a000002gp8aAAA
- https://www.redhat.com/en/topics/edge-computing?sc_cid=7013a000002gp8aAAA
- https://www.redhat.com/architect/?sc_cid=7013a000002gp8aAAA