كيف تستخدم Tinc لإعداد شبكة خاصة افتراضية VPN على Ubuntu 14.04


محمد أحمد العيل

يشرح هذا المقال كيفية استخدام Tinc، وهي أداة مفتوحة المصدر، لإنشاء شبكات خاصة افتراضية Virtual Private Network, VPN آمنة تستخدمها الخواديم والأجهزة للتواصل كما لو أنها في شبكة محليّة. يوضح المقال أيضا كيفية استخدام Tinc لإعداد نفق tunnel آمن نحو شبكة خاصة. سنستخدم خواديم Ubuntu 14.04 إلا أن الإعدادات صالحة للتطبيق والتكييف على أنظمة أخرى.

tinc.png

يتضمن Tinc ميزات تجعله مفيدا؛ منها التعمية Encryption، الضغط Compression الاختياري للبيانات، التوجيه Routing التلقائي للشبكة (تُوجَّه حركة البيانات مباشرة إلى الخواديم المتصلة إن أمكن ذلك) واليسر في قابلية التمدد. تفرق هذه الميزات بين أداة Tinc وحلول الشبكات الخاصة الافتراضية الأخرى مثل OpenVPN وتجعلها مناسبة لإنشاء شبكة خاصة افتراضية مكوّنة من شبكات صغيرة موزَّعة على مناطق جغرافية متباعدة. تعمل أداة Tinc على نظم تشغيل مختلفة بما فيها لينوكس، وندوز و Mac OS X.

المتطلبات

يتطلب هذا المقال صلاحيات إدارية للوصول إلى ثلاثة خواديم Ubuntu 14.04 على الأقل. توجد تعليمات هذا الإعداد في الدرس التالي (الخطوات 3 و4): الإعداد الابتدائي لخادوم أوبنتو 14.04.

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

لاتباع هذا الدرس دون تغيير يجب إنشاء خادومين خاصّين افتراضيين ضمن نفس مركز البيانات مع وضعهما في نفس الشبكة المحلية، وإنشاء خادوم آخر ضمن مركز بيانات منفصل. سنعد خادومين في مركز بيانات NYC2 وواحد في مركز بيانات AMS1 بالأسماء التالية:

  • externalnyc: يجب أن تتصل جميع الأجهزة ضمن الشبكة الافتراضية بهذا الخادوم وتحافظ على الاتصال حتى تعمل الشبكة الافتراضية بطريقة صحيحة. يمكن أن تضبَط خواديم أخرى بطريقة مشابهة لضمان التكرار.
  • internalnyc: يتصل بالخادوم externalnyc باستخدام واجهة الشبكة المحلية.
  • ams1: يتصل بexternalnyc عبر الإنترنت.

الهدف

في المخطَّط أدناه توضيح للشبكة الخاصة الافتراضية التي نريد إعدادها والموصوفة في فقرة المتطلبات أعلاه:

01_vpn_setup.thumb.png.3cb770448097d745c

يمثل الأخضر شبكتنا الخاصة الافتراضية، البني شبكة الإنترنت والبرتقالي الشبكة المحلية. تستطيع الخواديم الثلاثة التخاطب عبر الشبكة الخاصة الافتراضية، على الرغم من أن ams1 غير متصل بالشبكة المحلية.

نبدأ بتثبيت Tinc.

تثبيت Tinc

ثبت tinc على كل خادوم تود إلحاقه بالشبكة الخاصة الافتراضية. نبدأ بتحديث فهرس الحزم:

sudo apt-get update

ثم تثبيت حزمة tinc:

sudo apt-get install tinc

ننتقل بعد التثبيت إلى الإعداد.

إعداد Tinc

يستخدم Tinc “اسم شبكة” netname للتفريق بين شبكات خاصة افتراضية عدّة في حالة وجودها. يُنصَح باستخدام أسماء شبكات حتى ولو لم تكن تخطط لإعداد شبكات خاصة افتراضية عدّة. سنسمي شبكتنا الاخاصة الافتراضية hsoub.

يتطلب كل واحد من الخواديم التي ستكون جزءا من الشبكة الخاصة الافتراضية العناصر الثلاثة التالية:

  • ملفات الإعداد: مثل tinc-up، tinc-down وtinc.conf.
  • زوجا من المفاتيح (عمومي وخصوصي) للتعمية والاستيثاق.
  • ملفات إعداد المستضيف: تتضمن المفاتيح العمومية وإعدادات أخرى للشبكة الخاصة الافتراضية

نبدأ بإعداد الجهاز الأول من شبكتنا الخاصة الافتراضية وهي externalnyc.

إعداد externalnyc

أنشئ هيكل مجلّد الإعداد الخاص بالشبكة الخاصة الافتراضية hsoub على الخادوم externalnyc:

sudo mkdir -p /etc/tinc/hsoub/hosts

افتح ملف tinc للتعديل عليه:

sudo nano /etc/tinc/hsoub/tinc.conf

أضف الأسطر التالية:

Name = externalnyc
AddressFamily = ipv4
Interface = tun0

تعد التعليمات جهازا باسم externalnyc بواجهة شبكة تسمى tun0 تستخدم الإصدار الرابع من بروتوكول IP. احفظ الملف ثم أغلقه.

ثم ننشئ ملفا لإعداد المستضيفات على الخادوم externalnyc:

sudo nano /etc/tinc/netname/hosts/externalnyc

أضف الأسطر التالية إلى الملف (حيث externalnyc_public_IP عنوان IP العمومي للخادوم):

Address = externalnyc_public_IP
Subnet = 10.0.0.1/32

تستخدم الخواديم الأخرى الملف للتخاطب مع الخادوم externalnyc. تحدد التعليمة Addressعنوان IP المُستخدّم للاتصال بهذا الخادوم فيما تعين Subnet الشبكة الفرعية التي سيستخدمها Tinc. احفظ الملف ثم أغلقه.

أنشئ الآن زوج المفاتيح الخاصة بالمستضيف:

sudo tincd -n hsoub -K4096

ينشئ الأمر مفتاحا خاصا (يوجد على المسار etc/tinc/hsoub/rsa_key.priv/) ويضيف المفتاح العمومي إلى ملف إعداد المستضيف externalnyc الذي أنشأناه قبل قليل (etc/tinc/hsoub/hosts/externalnyc/).

يجب الآن أن ننشئ tinc-up وهو سكربت يعمل على أي خادوم تشغَّل عليه شبكتنا الخاصة الافتراضية.

sudo nano /etc/tinc/hsoub/tinc-up

أضف الأسطر التالية:

#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0

يعمل هذا السكربت على إنشاء واجهة شبكة تستخدمها الشبكة الخاصة الافتراضية عند تشغيلها. سيكون عنوان هذا الخادوم على الشبكة الخاصة الافتراضية 10.0.0.1.

سننشئ أيضا سكربت لحذف واجهة الشبكة الخاصة الافتراضية عند إيقاف هذه الأخيرة:

sudo nano /etc/tinc/hsoub/tinc-down

أضف الأسطر التالية:

#!/bin/sh
ifconfig $INTERFACE down

احفظ الملف ثم أغلقه.

نجعل سكربتات tinc قابلة للتنفيذ:

sudo chmod 755 /etc/tinc/netname/tinc-*

احفظ الملف ثم أغلقه.

ننتقل لإعداد بقية الأجهزة الموجودة في الشبكة الخاصة الافتراضية.

إعداد internalnyc وams1

يتوجب تنفيذ هذه الخطوات على كل من الخادومين internalnyc وams1 مع اختلافات طفيفة بينهما سنشير إليها.

أنشئ هيكل مجلد إعداد الشبكة الخاصة الافتراضية المسماة hsoub على الخادومين internalnyc وams1 وعدل ملف إعداد Tinc:

sudo mkdir -p /etc/tinc/hsoub/hosts
sudo nano /etc/tinc/hsoub/tinc.conf

أضف الأسطر التالية (أبدل node_name باسم الخادوم):

Name = node_name
AddressFamily = ipv4
Interface = tun0
ConnectTo = externalnyc

تعد التعليمات الخواديم لمحاولة الاتصال بexternalnyc (العقدة التي أنشأناها قبل هذا). احفظ الملف ثم أغلقه.

ملحوظة: يستخدم Tinc مصطلح العقدة Node للدلالة على جهاز مربوط بالشبكة الخاصة الافتراضية..

ننشئ ملف إعداد المستضيف:

sudo nano /etc/tinc/hsoub/hosts/node_name

بالنسبة لinternalnyc أضف السطر التالي:

Subnet = 10.0.0.2/32

وبالنسبة لams1:

Subnet = 10.0.0.3/32

لاحظ الفرق بين العنوانين. احفظ الملف ثم أغلقه.

ثم ولّد زوج المفاتيح:

sudo tincd -n hsoub -K4096

وأنشئ السكربت الخاص ببدء تشغيل واجهة الشبكة:

sudo nano /etc/tinc/hsoub/tinc-up

بالنسبة لinternalnyc أضف السطر التالي:

ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0

وبالنسبة لams1:

ifconfig $INTERFACE 10.0.0.3 netmask 255.255.255.0

تستخدم عناوين IP المذكورة للاتصال بالشبكة الخاصة الافتراضية. احفظ الملف ثم أغلقه.

أنشئ سكربت الإيقاف الخاص بواجهة الشبكة:

sudo nano /etc/tinc/hsoub/tinc-down

أضف السطر التالي:

ifconfig $INTERFACE down

احفظ الملف ثم أغلقه. في الأخير نجعل السكربت قابلا للتنفيذ:

sudo chmod 755 /etc/tinc/hsoub/tinc-*

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

توزيع المفاتيح

لكي يستطيع جهازان التخاطب مباشرة ضمن الشبكة الخاصة الافتراضية فيجب عليهما تبادل المفاتيح العمومية التي توجد في ملف إعدادات المستضيف الخاص بكل جهاز. في حالتنا فقط الخادوم externalnyc يحتاج لتبادل المفاتيح العمومية مع بقية الخواديم. يسهل نقل كل مفتاح عمومي إلى جميع الأجهزة إدارة الشبكة الخاصة الافتراضية. ينبغي الانتباه إلى أنه يجب تغيير قيمة التعليمة Address ضمن ملف الإعداد الخاص بexternalnyc بعد نسخه على الخادوم internalnyc وإبدالها بعنوان IP المحلي للخادوم externalnyc لكي يُجرى الاتصال عبر الشبكة المحلية.

توجد ملفات إعدادات المستضيف على المسار etc/tinc/hsoub/hosts/ حيث hsoub اسم الشبكة الخاصة الافتراضية.

تبادل المفاتيح بين الخادومين externalnyc وinternalnyc

انسخ ملف إعداد المستضيف على الخادوم internalnyc إلى externalnyc (يُنفَّذ الأمر على الخادوم internalnyc):

scp /etc/tinc/hsoub/hosts/internalnyc user@externalnyc_private_IP:/tmp

ثم انقل الملف إلى المجلَّد المناسب على الخادوم externalnyc (يُنفَّذ الأمر على الخادوم externalnyc):

cd /etc/tinc/hsoub/hosts; sudo cp /tmp/internalnyc .

نكرر نفس الخطوات في الاتجاه المعاكس.

انسخ ملف إعداد المستضيف على الخادوم externalnyc إلى internalnyc(يُنفَّذ الأمر على الخادوم externalnyc):

scp /etc/tinc/hsoub/hosts/externalnyc user@internalnyc_private_IP:/tmp

ثم انقل الملف إلى المجلَّد المناسب على الخادوم internalnyc (يُنفَّذ الأمر على الخادوم internalnyc):

cd /etc/tinc/hsoub/hosts; sudo cp /tmp/externalnyc .

نعدّل على ملف إعداد المستضيف externalnyc بعد نسخه على الخادوم internalnyc ونغير قيمة التعليمة Address ونبدلها بعنوان IP الخادوم externalnycضمن الشبكة المحلية (وهو ما يعني أن internalnyc سيتصل بexternalnyc عبر الشبكة المحلية):

sudo nano /etc/tinc/hsoub/hosts/externalnyc

أعط القيمة externalnyc_private_IP للتعليمة Address(حيث externalnyc_private_IP عنوان externalnyc في الشبكة المحلية):

Address = externalnyc_private_IP

احفظ الملف ثم أغلقه. ننتقل الآن للعقدة المتبقية، ams1.

تبادل المفاتيح بين الخادومين externalnyc وams1

نتبع نفس الخطوات السابقة. نبدأ بنسخ ملف إعداد المستضيفات الخاص بams1 على الخادوم externalnyc:

scp /etc/tinc/hsoub/hosts/ams1 user@externalnyc_public_IP:/tmp

ثم انتقل إلى externalnyc وانقل الملف إلى المجلد المناسب:

cd /etc/tinc/hsoub/hosts; sudo cp /tmp/ams1 .

نكرر نفس الخطوات في الاتجاه المعاكس؛ فننسخ ملف إعدادات المستضيف الخاص ب externalnyc على ams1:

scp /etc/tinc/hsoub/hosts/externalnyc user@ams1_public_IP:/tmp

وننقل الملف إلى المجلد المناسب على الخادوم ams1:

cd /etc/tinc/hsoub/hosts; sudo cp /tmp/externalnyc .

تبادل المفاتيح بين العقد الإضافية

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

اختبار الإعداد

شغل أداة Tinc على كل واحد من الخواديم، بدءا بالخادوم externalnyc، مع تفعيل وضع التنقيح Debug:

sudo tincd -n hsoub -D -d3

يجب بعد تشغيل البرنامج أن تظهر أسماء العقد في المخرجات حال اتصالها بالخادوم externalnyc. في ما يلي نختبر الاتصال عبر الشبكة الخاصة الافتراضية.

افتح نافذة جديدة لسطر الأوامر على الخادوم ams1 وجرب تنفيذ أمر ping مع إعطائه عنوان IP الخادوم internalnyc ضمن الشبكة الخاصة الافتراضية (أي 10.0.0.2 الذي ضبطناه سابقا):

ping 10.0.0.2

ينبغي أن يعمل الأمر دون مشاكل. سترى في نافذة سطر الأوامر الأولى بعض المخرجات المتعلقة بالاتصال عبر الشبكة الخاصة الافتراضية. يعني هذا أن ams1 قادر على التخاطب مع internalnyc عبر الشبكة الخاصة الافتراضية مرورا بexternalnyc. اضغط الزرين CTRL وC لتوقيف أمر ping في النافذة الجديدة.

يمكن استخدام واجهات الشبكة الخاصة الافتراضية في أمور مثل اتصالات التطبيقات و SSH.

لإيقاف وضعية التنقيح اضغط الزرين CTRL و\.

ملحوظة: تأكد من إعدادات الجدار الناري لديك إن لم تعمل الاتصالات في الشبكة الخاصة الافتراضية.

إعداد Tinc للعمل مع بدء تشغيل النظام

يجب وضع اسم الشبكة الخاصة الافتراضية في ملف الإعداد nets.boot لكي تعمل بطريقة صحيحة. حرر ملف nets.boot على كل عقدة:

sudo nano /etc/tinc/nets.boot

أضف أسماء الشبكات الخاصة الافتراضية التي تستعملها، بالنسبة للمثال اسم الشبكة هو hsoub:

# This file contains all names of the networks to be started on system startup.
hsoub

احفظ الملف ثم أغلقه. Tinc معد الآن للعمل مع بدء تشغيل النظام؛ ويمكن اسخدام سطر الأوامر للتحكم فيه. استخدم الأمر التالي على كل عقدة إن أردت تشغيله الآن:

sudo service tinc start

خاتمة

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

ترجمة -وبتصرف- للمقال How To Install Tinc and Set Up a Basic VPN on Ubuntu 14.04 لصاحبه Mitchell Anicas.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


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