كيفية إعداد WireGuard على أوبونتو 22.04

مقدمة

WireGuard هو شبكة افتراضية خاصة (VPN) خفيفة الوزن تدعم اتصالات IPv4 وIPv6. تُمكّنك VPN من الانتقال عبر شبكات غير موثوق بها كما لو كنت على شبكة خاصة. تمنحك حرية الوصول إلى الإنترنت بأمان وسلامة من هاتفك الذكي أو جهاز الكمبيوتر المحمول عند الاتصال بشبكة غير موثوق بها، مثل شبكة الواي فاي في فندق أو مقهى.

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

بالمقارنة، يستخدم برمجيات VPN الأخرى مثل OpenVPN وIPSec تقنية الأمان على طبقة النقل (TLS) والشهادات للمصادقة وإنشاء أنفاق مشفرة بين الأنظمة. تتضمن إصدارات مختلفة من TLS دعمًا لمئات من مجموعات التشفير والخوارزميات المختلفة، وعلى الرغم من أن هذا يتيح مرونة كبيرة لدعم عملاء مختلفين، إلا أنه يجعل تكوين VPN يستخدم TLS أكثر وقتًا وتعقيدًا وعرضة للأخطاء.

في هذا البرنامج التعليمي، ستقوم بإعداد WireGuard على خادم Ubuntu 22.04، ثم تكوين جهاز آخر للاتصال به كزميل باستخدام كل من اتصالات IPv4 و IPv6 (المشار إليها عادة باسم اتصال ثنائي الشبكة). ستتعلم أيضًا كيفية توجيه حركة الإنترنت للزميل من خلال خادم WireGuard في تكوين البوابة، بالإضافة إلى استخدام الشبكة الافتراضية الخاصة لنفق مشفر من نقطة إلى نقطة.

لأغراض هذا البرنامج التعليمي، سنقوم بتكوين نظام Ubuntu 22.04 آخر كزميل (يُشار إليه أيضًا باسم العميل) لخادم WireGuard. ستشرح البرامج التعليمية اللاحقة في هذه السلسلة كيفية تثبيت وتشغيل WireGuard على أنظمة وأجهزة Windows و macOS و Android و iOS.

ملاحظة: إذا كنت تخطط لإعداد WireGuard على Droplet من DigitalOcean، فتأكد من أننا، مثل العديد من مزودي الاستضافة، نفرض رسومًا على التجاوزات في عرض النطاق الترددي. لهذا السبب، يرجى أن تكون حذرًا من كمية حركة المرور التي يتعامل معها خادمك. انظر هذه الصفحة لمزيد من المعلومات.

المتطلبات المسبقة

لمتابعة هذا البرنامج التعليمي، ستحتاج إلى:

  • خادم Ubuntu 22.04 مع مستخدم غير جذري يملك صلاحيات sudo وجدار حماية مفعل. يمكنك إعداد ذلك باتباع دليلنا لإعداد الخادم الأولي مع Ubuntu 22.04. سنشير إليه باسم خادم WireGuard طوال هذا الدليل.
  • ستحتاج إلى جهاز عميل ستستخدمه للاتصال بخادم WireGuard الخاص بك. في هذا البرنامج التعليمي سنشير إلى هذا الجهاز بـ نظير WireGuard. لأغراض هذا البرنامج التعليمي، من المستحسن أن تستخدم جهازك المحلي كنظير WireGuard، ولكن يمكنك استخدام الخوادم البعيدة أو الهواتف المحمولة كعملاء إذا كنت تفضل ذلك. إذا كنت تستخدم نظامًا بعيدًا، تأكد من اتباع جميع الأقسام الاختيارية لاحقًا في هذا البرنامج التعليمي، أو قد تقوم بتأمين نفسك من الوصول إلى النظام.
  • لاستخدام WireGuard مع IPv6، ستحتاج أيضًا إلى التأكد من تكوين خادمك لدعم هذا النوع من حركة المرور. إذا كنت ترغب في تمكين دعم IPv6 مع WireGuard وتستخدم DigitalOcean Droplet، يرجى الرجوع إلى صفحة التوثيق هذه كيفية تمكين IPv6 على Droplets. يمكنك إضافة دعم IPv6 عند إنشاء Droplet، أو بعد ذلك باستخدام التعليمات الموجودة في تلك الصفحة.

الخطوة 1 — تثبيت WireGuard وإنشاء زوج المفاتيح

أول خطوة في هذا البرنامج التعليمي هي تثبيت WireGuard على خادمك. للبدء، قم بتحديث فهرس الحزم لخادم WireGuard الخاص بك وثبت WireGuard باستخدام الأوامر التالية. قد تطلب منك تقديم كلمة مرور مستخدم sudo الخاص بك إذا كانت هذه أول مرة تستخدم فيها sudo في هذه الجلسة:

  1. sudo apt update
  2. sudo apt install wireguard

الآن بعد تثبيت WireGuard، الخطوة التالية هي إنشاء زوج من المفاتيح الخاصة والعامة للخادم. ستستخدم الأوامر المدمجة wg genkey و wg pubkey لإنشاء المفاتيح، ثم ستضيف المفتاح الخاص إلى ملف تكوين WireGuard.

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

أنشئ المفتاح الخاص لـ WireGuard وقم بتغيير أذوناته باستخدام الأوامر التالية:

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

يقوم الأمر sudo chmod go=... بإزالة أي أذونات على الملف للمستخدمين والمجموعات الأخرى بخلاف مستخدم root لضمان أنه يمكن الوصول إلى المفتاح الخاص فقط.

سوف تتلقى سطرًا واحدًا من الإخراج المشفر بتنسيق base64، والذي يُعتبر المفتاح الخاص. يتم أيضًا تخزين نسخة من الإخراج في ملف /etc/wireguard/private.key للرجوع إليها في المستقبل من قبل جزء tee من الأمر. قم بتدوين المفتاح الخاص الذي تم إخراجه بعناية لأنك ستحتاج إلى إضافته إلى ملف تكوين WireGuard لاحقًا في هذا القسم.

الخطوة التالية هي إنشاء المفتاح العام المقابل، والذي يتم استنتاجه من المفتاح الخاص. استخدم الأمر التالي لإنشاء ملف المفتاح العام:

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

يتكون هذا الأمر من ثلاثة أوامر فردية يتم ربطها معًا باستخدام مشغل الأنابيب |.

  • sudo cat /etc/wireguard/private.key: هذا الأمر يقرأ ملف المفتاح الخاص ويخرجه إلى تيار الإخراج القياسي.
  • wg pubkey: الأمر الثاني يأخذ الإخراج من الأمر الأول كمدخل قياسي ويعالجه لتوليد مفتاح عام.
  • sudo tee /etc/wireguard/public.key: الأمر النهائي يأخذ الإخراج من أمر توليد المفتاح العام ويعيد توجيهه إلى الملف المسمى /etc/wireguard/public.key.

عند تشغيل الأمر مرة أخرى، ستتلقى سطرًا واحدًا مُشفرًا بترميز base64، وهو المفتاح العام لخادم WireGuard الخاص بك. انسخه في مكان ما للرجوع إليه، لأنه ستحتاج إلى توزيع المفتاح العام لأي نظير يتصل بالخادم.

الخطوة 2 — اختيار عناوين IPv4 وIPv6

في القسم السابق، قمت بتثبيت WireGuard وتوليد زوج مفاتيح سيُستخدم لتشفير حركة المرور إلى ومن الخادم. في هذا القسم، ستقوم بإنشاء ملف تكوين للخادم، وضبط WireGuard للبدء تلقائيًا عند إعادة تشغيل الخادم. ستقوم أيضًا بتعريف عناوين IPv4 وIPv6 الخاصة لاستخدامها مع خادم WireGuard والنظراء.

إذا كنت تخطط لاستخدام عنواني IPv4 و IPv6 فاتبع كلاً من هذه الأقسام. وإلا، اتبع التعليمات في القسم المناسب لاحتياجات شبكة VPN الخاصة بك.

الخطوة 2(أ) — اختيار نطاق IPv4

إذا كنت تستخدم خادم WireGuard الخاص بك مع نظراء IPv4، فإن الخادم بحاجة إلى مجموعة من عناوين IPv4 الخاصة لاستخدامها للعملاء، ولواجهة النفق الخاصة به. يمكنك اختيار أي نطاق من عناوين IP من الكتل المحجوزة التالية من العناوين (إذا كنت ترغب في معرفة المزيد حول كيفية تخصيص هذه الكتل ، قم بزيارة مواصفات RFC 1918):

  • 10.0.0.0 إلى 10.255.255.255 (بادئة 10/8)
  • 172.16.0.0 إلى 172.31.255.255 (بادئة 172.16/12)
  • 192.168.0.0 إلى 192.168.255.255 (بادئة 192.168/16)

لأغراض هذا البرنامج التعليمي ، سنستخدم 10.8.0.0/24 كمجموعة من عناوين IP من أول نطاق من العناوين المحجوزة. ستتيح لك هذه المجموعة ما يصل إلى 255 اتصالًا بنظراء مختلفين، وغالبًا ما يجب ألا تحتوي على عناوين تتداخل أو تتعارض مع نطاقات IP الخاصة الأخرى. لا تتردد في اختيار مجموعة من العناوين التي تعمل مع تكوين شبكتك إذا لم تكن هذه المجموعة المثالية متوافقة مع شبكاتك.

سيستخدم خادم WireGuard عنوان IP واحدًا من النطاق لعنوان IPv4 الخاص بنفقه الخاص. سنستخدم 10.8.0.1/24 هنا، ولكن يمكن استخدام أي عنوان في النطاق من 10.8.0.1 إلى 10.8.0.255. احرص على تدوين عنوان IP الذي تختاره إذا استخدمت شيئًا مختلفًا عن 10.8.0.1/24. ستضيف هذا العنوان IPv4 إلى ملف التكوين الذي تحدده في الخطوة 3 — إنشاء ملف تكوين خادم WireGuard.

الخطوة 2 (ب) — اختيار نطاق IPv6

إذا كنت تستخدم WireGuard مع IPv6، فسوف تحتاج إلى إنشاء بادئة عنوان IPv6 فريدة محلية الخاصة باستخدام خوارزمية في RFC 4193. العناوين التي تستخدمها مع WireGuard ستكون مرتبطة بواجهة نفق افتراضية. ستحتاج إلى إكمال عدة خطوات لإنشاء بادئة IPv6 عشوائية وفريدة ضمن النطاق fd00::/8 المحجوز لعناوين IPv6 الخاصة.

وفقًا لـ RFC، الطريقة الموصى بها للحصول على بادئة IPv6 فريدة هي دمج وقت اليوم مع قيمة تحديد فريدة من نظام مثل الرقم التسلسلي أو معرف الجهاز. ثم يتم تجزئة تلك القيم وتقليصها مما ينتج عنه مجموعة من البتات التي يمكن استخدامها كعنوان فريد ضمن النطاق الخاص fd00::/8 لعناوين IPv6.

للبدء في إنشاء مجموعة IPv6 لخادم WireGuard الخاص بك، قم بجمع الطابع الزمني المكوّن من 64 بت باستخدام أداة date باستخدام الأمر التالي:

  1. date +%s%N

ستتلقى رقمًا مثل الآتي، وهو عدد الثواني (المعبر عنه بـ %s في الأمر date)، والنانوثانية (المعبر عنها بـ %N) منذ 1970-01-01 00:00:00 UTC مدموجة معًا:

Output
1650301699497770167

سجّل القيمة في مكان ما لاستخدامها في هذا القسم لاحقًا. بعد ذلك، انسخ قيمة machine-id الخاصة بخادمك من ملف /var/lib/dbus/machine-id. هذه المعرفة فريدة لنظامك ولا يجب أن تتغير طالما أن الخادم قائم.

  1. cat /var/lib/dbus/machine-id

ستتلقى ناتجًا مشابهًا للآتي:

/var/lib/dbus/machine-id
610cef4946ed46da8f71dba9d66c67fb

الآن، عليك دمج الطابع الزمني مع machine-id وتجزئة القيمة الناتجة باستخدام خوارزمية SHA-1. سيستخدم الأمر التنسيق التالي:

printf <timestamp><machine-id> | sha1sum

قم بتشغيل الأمر مع استبدال قيم الطابع الزمني وهوية الجهاز:

  1. printf 1650301699497770167610cef4946ed46da8f71dba9d66c67fb | sha1sum

ستتلقى قيمة تجزئة مشابهة للآتي:

Output
442adea1488d96388dae9ab816045b24609a6c18 -

يرجى ملاحظة أن مخرجات الأمر sha1sum معرفة بالهيكساديسمال، لذا تستخدم المخرجات حرفين لتمثيل بايت بيانات واحد. على سبيل المثال 4f و 26 في مخرجات المثال هما أول بايتين من البيانات المجزئة.

تتطلب الخوارزمية في RFC فقط أقل البتات الأكثر أهمية (المتسلسلة) 40 بتًا، أو 5 بايتات، من مخرجات الهاش. استخدم الأمر cut لطباعة آخر 5 بايتات مجزئة بالهيكساديسمال من الهاش:

  1. printf 442adea1488d96388dae9ab816045b24609a6c18 | cut -c 31-

المُعلمة “-c” تُخبر أمر “cut” بتحديد مجموعة محددة من الأحرف. المُعلمة “31-” تخبر “cut” بطباعة جميع الأحرف من الموقع 31 إلى نهاية سطر الإدخال.

يجب أن تتلقى إخراجًا مثل التالي:

Output
24609a6c18

في هذا المثال من الإخراج، مجموعة البايتات هي: 24 60 9a 6c 18.

الآن يمكنك بناء بادئة شبكة IPv6 الفريدة الخاصة بك من خلال إضافة البايتات الخمس التي تم إنشاؤها مع بادئة “fd”، مع فصل كل 2 بايت بـ “:” نقطة مزدوجة لسهولة القراءة. نظرًا لأن كل شبكة فرعية في البادئة الفريدة الخاصة بك يمكن أن تحتوي على مجموعة متاحة إجمالية تبلغ 18,446,744,073,709,551,616 عنوان IPv6 ممكن، يمكنك تقييد الشبكة الفرعية إلى حجم قياسي /64 للبساطة.

باستخدام البايتات التي تم إنشاؤها سابقًا مع حجم الشبكة الفرعية /64، ستكون البادئة الناتجة هي التالية:

Unique Local IPv6 Address Prefix
fd24:609a:6c18::/64

هذا النطاق fd24:609a:6c18::/64 هو ما ستستخدمه لتعيين عناوين IP فردية لواجهات نفق WireGuard على الخادم والأقران. لتخصيص عنوان IP للخادم، أضف 1 بعد الأحرف النهائية ::. سيكون العنوان الناتج fd24:609a:6c18::1/64. يمكن للأقران استخدام أي عنوان IP في النطاق، ولكن عادةً ما تزيد القيمة بمقدار واحد في كل مرة تُضيف فيها قرينة مثل fd24:609a:6c18::2/64. احرص على تدوين عنوان IP وقم بتكوين خادم WireGuard في القسم التالي من هذا البرنامج التعليمي.

الخطوة 3 — إنشاء تكوين خادم WireGuard

قبل إنشاء تكوين خادم WireGuard الخاص بك، ستحتاج إلى الأجزاء التالية من المعلومات:

  1. تأكد من أن لديك المفتاح الخاص المتاح من الخطوة 1 — تثبيت WireGuard وإنشاء زوج المفاتيح.

  2. إذا كنت تستخدم WireGuard مع IPv4، ستحتاج إلى عنوان IP الذي اخترته للخادم في الخطوة 2(a) — اختيار نطاق IPv4، والذي في هذا المثال هو 10.8.0.1/24.

  3. إذا كنت تستخدم WireGuard مع IPv6، ستحتاج إلى عنوان IP للخادم الذي أنشأته في الخطوة 2(b) — اختيار نطاق IPv6. في هذا المثال، العنوان هو fd24:609a:6c18::1/64.

بمجرد الحصول على المفتاح الخاص وعناوين IP المطلوبة، أنشئ ملف تكوين جديد باستخدام nano أو المحرر الذي تفضله عن طريق تشغيل الأمر التالي:

  1. sudo nano /etc/wireguard/wg0.conf

أضف الأسطر التالية إلى الملف، مستبدلاً المفتاح الخاص بك في مكان القيمة المميزة base64_encoded_private_key_goes_here، وعناوين IP على السطر Address. يمكنك أيضًا تغيير السطر ListenPort إذا كنت ترغب في جعل WireGuard متاحًا على منفذ مختلف:

/etc/wireguard/wg0.conf
[Interface] PrivateKey = base64_encoded_private_key_goes_here Address = 10.8.0.1/24, fd24:609a:6c18::1/64 ListenPort = 51820 SaveConfig = true

السطر SaveConfig يضمن أنه عند إيقاف تشغيل واجهة WireGuard، سيتم حفظ أي تغييرات في ملف التكوين.

احفظ وأغلق ملف /etc/wireguard/wg0.conf. إذا كنت تستخدم nano، يمكنك القيام بذلك بالضغط على CTRL+X، ثم Y و ENTER للتأكيد. الآن لديك تكوين خادم أولي يمكنك بناؤه بناءً على كيفية استخدام خادم VPN WireGuard الخاص بك.

الخطوة 4 – ضبط تكوين شبكة خادم WireGuard

إذا كنت تستخدم WireGuard للاتصال بنظيره بخادم WireGuard للوصول إلى الخدمات على الـ الخادم فقط، فلن تحتاج إلى استكمال هذا القسم. إذا كنت ترغب في توجيه حركة الإنترنت لنظير WireGuard الخاص بك عبر خادم WireGuard، فسيتعين عليك تكوين توجيه IP عن طريق اتباع هذا القسم من البرنامج التعليمي.

لتكوين التوجيه، افتح ملف /etc/sysctl.conf باستخدام nano أو المحرر الذي تفضله:

  1. sudo nano /etc/sysctl.conf

إذا كنت تستخدم IPv4 مع WireGuard، أضف السطر التالي في نهاية الملف:

/etc/sysctl.conf
net.ipv4.ip_forward=1

إذا كنت تستخدم IPv6 مع WireGuard، أضف هذا السطر في نهاية الملف:

/etc/sysctl.conf
net.ipv6.conf.all.forwarding=1

إذا كنت تستخدم كل من IPv4 و IPv6، تأكد من تضمين كلتا السطور. احفظ وأغلق الملف عند الانتهاء.

لقراءة الملف وتحميل القيم الجديدة لجلسة الطرفية الحالية، قم بتشغيل:

  1. sudo sysctl -p
Output
net.ipv6.conf.all.forwarding = 1 net.ipv4.ip_forward = 1

الآن سيكون بإمكان خادم WireGuard الخاص بك توجيه حركة المرور الواردة من جهاز الـ VPN الافتراضي إلى الآخرين على الخادم، ومن هناك إلى الإنترنت العام. باستخدام هذا التكوين، ستتمكن من توجيه كل حركة الويب من نظير WireGuard الخاص بك عبر عنوان IP الخاص بخادمك، وسيتم إخفاء عنوان IP العام لعميلك بشكل فعال.

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

الخطوة ٥ — تكوين جدار الحماية لخادم WireGuard

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

للسماح بحركة مرور VPN WireGuard من خلال جدار الحماية للخادم، ستحتاج إلى تمكين التخفي، وهو مفهوم iptables الذي يوفر ترجمة عناوين الشبكة الديناميكية على الطاير (NAT) لتوجيه اتصالات العميل بشكل صحيح.

ابحث أولاً عن واجهة الشبكة العامة لخادم WireGuard باستخدام الأمر الفرعي ip route:

  1. ip route list default

الواجهة العامة هي السلسلة الموجودة ضمن إخراج هذا الأمر التي تتبع كلمة “dev”. على سبيل المثال، يوضح هذا النتيجة واجهة الاسم eth0، والتي تم تسليط الضوء عليها أدناه:

Output
default via 203.0.113.1 dev eth0 proto static

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

لإضافة قواعد جدار الحماية إلى خادم WireGuard الخاص بك، افتح ملف /etc/wireguard/wg0.conf مرة أخرى باستخدام nano أو محررك المفضل.

  1. sudo nano /etc/wireguard/wg0.conf

في نهاية الملف بعد سطر SaveConfig = true، قم بلصق الأسطر التالية:

/etc/wireguard/wg0.conf
. . . PostUp = ufw route allow in on wg0 out on eth0 PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE PreDown = ufw route delete allow in on wg0 out on eth0 PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

ستقوم أسطر PostUp بالتشغيل عند بدء خادم WireGuard في إنشاء نفق VPN الافتراضي. في المثال هنا، سيتم إضافة ثلاثة قواعد ufw و iptables:

  • ufw route allow in on wg0 out on eth0 – هذه القاعدة ستسمح بإعادة توجيه حركة المرور IPv4 و IPv6 التي تأتي على واجهة VPN wg0 إلى واجهة الشبكة eth0 على الخادم. تعمل هذه القاعدة بالتنسيق مع قيم sysctl net.ipv4.ip_forward و net.ipv6.conf.all.forwarding التي قمت بتكوينها في القسم السابق.
  • iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE – تكوين هذه القاعدة يتيح لها الاحتيال، وإعادة كتابة حركة المرور IPv4 التي تأتي على واجهة VPN wg0 لتبدو كما لو أنها تنشأ مباشرة من عنوان IPv4 العام لخادم WireGuard.
  • ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE – تكوين هذه القاعدة يتيح لها الاحتيال، وإعادة كتابة حركة المرور IPv6 التي تأتي على واجهة VPN wg0 لتبدو كما لو أنها تنشأ مباشرة من عنوان IPv6 العام لخادم WireGuard.

تقوم أسطر PreDown بالتشغيل عند إيقاف خادم WireGuard لنفق VPN الافتراضي. تعمل هذه القواعد على العكس من القواعد PostUp، وتعمل على التراجع عن قواعد الإعادة التوجيه والاحتيال لواجهة VPN عند إيقاف VPN.

في كلتا الحالتين، قم بتحرير التكوين لتضمين أو استبعاد القواعد IPv4 و IPv6 التي تكون مناسبة لنفق VPN الخاص بك. على سبيل المثال، إذا كنت تستخدم فقط IPv4، يمكنك استبعاد الأسطر التي تحتوي على أوامر ip6tables.

على الجانب الآخر، إذا كنت تستخدم فقط IPv6، فيرجى تحرير التكوين لتتضمن فقط أوامر ip6tables. يجب أن تكون الأسطر ufw موجودة لأي تركيبة من الشبكات IPv4 و IPv6. احفظ وأغلق الملف عند الانتهاء.

الجزء الأخير من تكوين جدار الحماية على خادم WireGuard الخاص بك هو السماح بحركة المرور من وإلى منفذ UDP لـ WireGuard ذاته. إذا لم تقم بتغيير المنفذ في ملف /etc/wireguard/wg0.conf الخاص بالخادم، فسيكون المنفذ الذي ستفتحه هو 51820. إذا اخترت منفذًا مختلفًا عند تحرير التكوين، فتأكد من استبداله في الأمر التالي لـ UFW.

في حال نسيت فتح منفذ SSH عند اتباع البرنامج التعليمي المسبق، أضفه هنا أيضًا:

  1. sudo ufw allow 51820/udp
  2. sudo ufw allow OpenSSH

ملاحظة: إذا كنت تستخدم جدار حماية مختلفًا أو قمت بتخصيص تكوين UFW الخاص بك، قد تحتاج إلى إضافة قواعد جدار حماية إضافية. على سبيل المثال، إذا قررت توجيه كل حركة مرور شبكتك عبر اتصال VPN، ستحتاج إلى التأكد من أن حركة المرور عبر المنفذ 53 مسموح بها لطلبات DNS، ومنافذ مثل 80 و 443 لحركة المرور HTTP و HTTPS على التوالي. إذا كانت هناك بروتوكولات أخرى تستخدمها عبر اتصال VPN، فستحتاج إلى إضافة قواعد لها أيضًا.

بعد إضافة تلك القواعد، قم بتعطيل وتمكين UFW لإعادة تشغيله وتحميل التغييرات من جميع الملفات التي قمت بتعديلها:

  1. sudo ufw disable
  2. sudo ufw enable

يمكنك التحقق من أن القواعد قد تم وضعها بشكل صحيح عن طريق تشغيل الأمر ufw status. قم بتشغيله، ويجب أن تتلقى إخراجًا مشابهًا للتالي:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- 51280/udp ALLOW Anywhere 22/tcp ALLOW Anywhere 51280/udp (v6) ALLOW Anywhere (v6) 22/tcp (v6) ALLOW Anywhere (v6)

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

الخطوة 6 — بدء خادم WireGuard

يمكن تكوين WireGuard للتشغيل كخدمة systemd باستخدام نص wg-quick المضمن. بينما يمكنك استخدام أمر wg يدويًا لإنشاء النفق في كل مرة ترغب في استخدام الشبكة الظاهرية الخاصة، إلا أن القيام بذلك يعتبر عملية يدوية تصبح مكررة ومعرضة للأخطاء. بدلاً من ذلك، يمكنك استخدام systemctl لإدارة النفق بمساعدة نص wg-quick.

استخدام خدمة systemd يعني أنه يمكنك تكوين WireGuard للتشغيل عند التمهيد حتى تتمكن من الاتصال بشبكة الظاهرية الخاصة في أي وقت طالما أن الخادم يعمل. للقيام بذلك، قم بتمكين خدمة wg-quick للنفق wg0 الذي قمت بتعريفه عن طريق إضافته إلى systemctl:

  1. sudo systemctl enable [email protected]

لاحظ أن الأمر يحدد اسم الجهاز الافتراضي wg0 كجزء من اسم الخدمة. يتعين تعيين هذا الاسم على ملف التكوين /etc/wireguard/wg0.conf. هذا النهج في التسمية يعني أنه يمكنك إنشاء العديد من الأنفاق للشبكة الظاهرية الخاصة المستقلة حسب رغبتك باستخدام الخادم الخاص بك.

على سبيل المثال، يمكن أن يكون لديك جهاز نفق واسم prod وملف تكوينه يكون /etc/wireguard/prod.conf. يمكن أن تحتوي كل تكوين للنفق على إعدادات مختلفة لبروتوكول IPv4 وIPv6 وجدار الحماية الخاص بالعميل. بهذه الطريقة، يمكنك دعم العديد من الاتصالات الفردية المختلفة بالأقران، كل واحدة منها بعناوين IP فريدة وقواعد توجيه خاصة بها.

الآن ابدأ الخدمة:

  1. sudo systemctl start [email protected]

تحقق مرتين من أن خدمة WireGuard نشطة باستخدام الأمر التالي. يجب أن ترى active (running) في الإخراج:

  1. sudo systemctl status [email protected]
Output
[email protected] - WireGuard via wg-quick(8) for wg0 Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled) Active: active (exited) since Mon 2022-04-18 17:22:13 UTC; 2s ago Docs: man:wg-quick(8) man:wg(8) https://www.wireguard.com/ https://www.wireguard.com/quickstart/ https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8 https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8 Process: 98834 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS) Main PID: 98834 (code=exited, status=0/SUCCESS) CPU: 193ms Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] wg setconf wg0 /dev/fd/63 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -4 address add 10.8.0.1/24 dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -6 address add fd24:609a:6c18::1/64 dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip link set mtu 1420 up dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ufw route allow in on wg0 out on ens3 Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added (v6) Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip6tables -t nat -I POSTROUTING -o ens3 -j MASQUERADE Apr 18 17:22:13 thats-my-jam systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

يظهر الإخراج الأوامر ip التي تستخدم لإنشاء جهاز wg0 الافتراضي وتخصيصه عناوين IPv4 وIPv6 التي أضفتها إلى ملف التكوين. يمكنك استخدام هذه القواعد لاستكشاف الأخطاء في النفق، أو مع الأمر wg ذاته إذا كنت ترغب في محاولة تكوين واجهة VPN يدويًا.

بعد تكوين الخادم وتشغيله، الخطوة التالية هي تكوين جهاز العميل كنقطة اتصال WireGuard والاتصال بخادم WireGuard.

الخطوة 7 — تكوين نقطة اتصال WireGuard

تكوين نقطة اتصال WireGuard مشابه لإعداد خادم WireGuard. بمجرد تثبيت برنامج العميل، ستقوم بإنشاء زوج مفاتيح عامة وخاصة، وتقرر عنوان IP أو عناوين للنقطة البعيدة، وتحدد ملف تكوين للنقطة البعيدة، ثم تبدأ النفق باستخدام نصي wg-quick.

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

لتكوين الند الفرعي لـ WireGuard، تأكد من تثبيت حزمة WireGuard باستخدام الأوامر التالية apt. على الند الفرعي لـ WireGuard قم بتشغيل:

  1. sudo apt update
  2. sudo apt install wireguard

إنشاء زوج مفاتيح الند الفرعي لـ WireGuard

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

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

ستتلقى مرة أخرى سطرًا واحدًا من الناتج المشفر بتنسيق base64، والذي هو المفتاح الخاص. يتم أيضًا حفظ نسخة من الناتج في /etc/wireguard/private.key. قم بتدوين المفتاح الخاص الذي تم إخراجه بعناية، لأنه ستحتاج إلى إضافته إلى ملف تكوين WireGuard لاحقًا في هذا القسم.

استخدم الأمر التالي لإنشاء ملف المفتاح العام:

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

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

إنشاء ملف تكوين نظير WireGuard

الآن بعد أن لديك زوج مفاتيح، يمكنك إنشاء ملف تكوين للنظير يحتوي على جميع المعلومات التي يحتاجها لإنشاء اتصال بخادم WireGuard.

ستحتاج إلى بعض المعلومات لملف التكوين:

  • المفتاح الخاص المشفر بترميز base64 الذي أنشأته على النظير.

  • نطاقات عناوين IPv4 وIPv6 التي قمت بتعريفها على خادم WireGuard.

  • المفتاح العمومي المشفر بترميز base64 من خادم WireGuard.

  • عنوان IP العام ورقم المنفذ لخادم WireGuard. عادة ما يكون هذا هو عنوان IPv4، ولكن إذا كان لديك خادم عنوان IPv6 وجهاز العميل الخاص بك يحتوي على اتصال IPv6 بالإنترنت فيمكنك استخدام هذا بدلاً من IPv4.

بعد الحصول على كل هذه المعلومات، افتح ملف /etc/wireguard/wg0.conf الجديد على جهاز نظير WireGuard باستخدام nano أو المحرر الذي تفضله:

  1. sudo nano /etc/wireguard/wg0.conf

أضف الأسطر التالية إلى الملف، وقم بتعويض البيانات المختلفة في الأقسام المظللة حسب الحاجة:

/etc/wireguard/wg0.conf
[Interface] PrivateKey = base64_encoded_peer_private_key_goes_here Address = 10.8.0.2/24 Address = fd24:609a:6c18::2/64 [Peer] PublicKey = U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= AllowedIPs = 10.8.0.0/24, fd24:609a:6c18::/64 Endpoint = 203.0.113.1:51820

لاحظ كيفية استخدام السطر الأول Address عنوان IPv4 من الشبكة الفرعية 10.8.0.0/24 التي اخترتها سابقًا. يمكن أن يكون هذا العنوان IP أي شيء في الشبكة الفرعية طالما أنه مختلف عن عنوان الخادم. زيادة العناوين بمقدار واحد في كل مرة تضيف فيها نظيرًا عادةً هي أسهل طريقة لتخصيص عناوين IP.

بالمثل، لاحظ كيفية استخدام السطر الثاني Address عنوان IPv6 من الشبكة الفرعية التي قمت بإنشائها سابقًا، وزيادة عنوان الخادم بمقدار واحد. مرة أخرى، أي عنوان IP في النطاق هو صالح إذا قررت استخدام عنوان مختلف.

الجزء الآخر الملحوظ في الملف هو السطر الأخير AllowedIPs. هذه النطاقات IPv4 و IPv6 توجه النظير إلى إرسال حركة المرور عبر الشبكة الافتراضية الخاصة فقط إذا كان لديه النظام المقصد عنوان IP في أحد النطاقين. باستخدام التوجيه AllowedIPs، يمكنك تقييد الشبكة الافتراضية الخاصة على النظير بالاتصال فقط بالنظائر والخدمات الأخرى على الشبكة الافتراضية الخاصة، أو يمكنك تكوين الإعداد لنفق جميع حركة المرور عبر الشبكة الافتراضية الخاصة واستخدام خادم WireGuard كبوابة.

إذا كنت تستخدم IPv4 فقط، فلا داعي لتضمين النطاق fd24:609a:6c18::/64 (بما في ذلك الفاصلة , الموجودة في النهاية). وعلى العكس، إذا كنت تستخدم IPv6 فقط، فقط قم بتضمين البادئة fd24:609a:6c18::/64 واترك النطاق IPv4 10.8.0.0/24 من دون تضمينه.

في كلتا الحالتين، إذا كنت ترغب في إرسال كل حركة مرور النظير عبر شبكة الخاصة الظاهرية واستخدام خادم WireGuard كبوابة لجميع حركة المرور، فيمكنك استخدام 0.0.0.0/0، الذي يمثل مساحة عناوين IPv4 بأكملها، و ::/0 لمساحة عناوين IPv6 بأكملها.

(اختياري) تكوين نظير لتوجيه كل حركة المرور عبر النفق

إذا اخترت توجيه كل حركة مرور النظير عبر النفق باستخدام مسارات 0.0.0.0/0 أو ::/0 وكان النظير نظامًا بعيدًا، فيجب عليك إكمال الخطوات في هذا القسم. إذا كان النظير نظامًا محليًا، فمن الأفضل تجاهل هذا القسم.

بالنسبة للنظراء البعيدين الذين تصل إليهم عبر SSH أو بعض بروتوكول آخر باستخدام عنوان IP العام، ستحتاج إلى إضافة بعض القواعد الإضافية إلى ملف wg0.conf الخاص بالنظير. ستضمن هذه القواعد أنه يمكنك الاتصال بالنظام لاحقًا من خارج النفق عند الاتصال به. وإلا، عند تأسيس النفق، لن يتم توجيه جميع حركة المرور التي تُعالج عادة على واجهة الشبكة العامة بشكل صحيح لتجاوز واجهة النفق wg0، مما يؤدي إلى عدم إمكانية الوصول إلى النظام البعيد.

أولاً، ستحتاج إلى تحديد عنوان IP الذي يستخدمه النظام كبوابة افتراضية. قم بتشغيل الأمر ip route التالي:

  1. ip route list table main default

ستتلقى إخراجًا مثل الآتي:

Output
default via 203.0.113.1 dev eth0 proto static

تمت ملاحظة عنوان IP المميز للبوابة 203.0.113.1 للاستخدام لاحقًا، وجهاز eth0. قد يكون اسم جهازك مختلفًا. إذا كان الأمر كذلك، استبدله بدلاً من eth0 في الأوامر التالية.

الآن ابحث عن عنوان IP العام للنظام عن طريق فحص الجهاز باستخدام الأمر ip address show:

  1. ip -brief address show eth0

ستتلقى إخراجًا مثل الآتي:

Output
eth0 UP 203.0.113.5/20 10.20.30.40/16 2604:a880:400:d1::3d3:6001/64 fe80::68d5:beff:feff:974c/64

في هذا المثال، يُعتبر عنوان IP المميز 203.0.113.5 (بدون /20 المُضاف في النهاية) هو العنوان العام الذي يتم تخصيصه لجهاز eth0 الذي ستحتاج إلى إضافته إلى تكوين WireGuard.

الآن افتح ملف WireGuard Peer’s /etc/wireguard/wg0.conf باستخدام nano أو المحرر المفضل لديك.

  1. sudo nano /etc/wireguard/wg0.conf

قبل السطر [Peer]، أضف الأسطر الأربعة التالية:

PostUp = ip rule add table 200 from 203.0.113.5
PostUp = ip route add table 200 default via 203.0.113.1
PreDown = ip rule delete table 200 from 203.0.113.5
PreDown = ip route delete table 200 default via 203.0.113.1

[Peer]
. . .

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

  • PostUp = ip rule add table 200 from 203.0.113.5 – هذا الأمر ينشئ قاعدة تحقق من أي إدخالات توجيه في الجدول المرقم 200 عندما يتطابق عنوان IP مع 203.0.113.5 العام للنظام.
  • PostUp = ip route add table 200 default via 203.0.113.1 – هذا الأمر يضمن أن أي حركة مرور يتم معالجتها بواسطة الجدول 200 ستستخدم البوابة 203.0.113.1 للتوجيه بدلاً من واجهة WireGuard.

الأسطر PreDown تقوم بإزالة القاعدة المخصصة والمسار عند إيقاف التونل.

ملاحظة: رقم الجدول 200 عشوائي عند إنشاء هذه القواعد. يمكنك استخدام قيمة بين 2 و 252، أو يمكنك استخدام اسم مخصص عن طريق إضافة تسمية إلى ملف /etc/iproute2/rt_tables ثم الإشارة إلى الاسم بدلاً من القيمة الرقمية.

لمزيد من المعلومات حول كيفية عمل الجداول التوجيهية في Linux زر قسم جداول التوجيه من دليل إدارة الشبكة بطبقة بروتوكول الإنترنت باستخدام Linux.

إذا كنت توجه جميع حركة البيانات للأقران عبر الشبكة الافتراضية الخاصة، تأكد من تكوين القواعد الصحيحة في sysctl و iptables على خادم WireGuard في الخطوة 4 — ضبط تكوين الشبكة لخادم WireGuard و الخطوة 5 — تكوين جدار الحماية لخادم WireGuard.

(اختياري) تكوين محل حلول DNS لنظير WireGuard

إذا كنت تستخدم خادم WireGuard كبوابة VPN لكل حركة مرور الأقران الخاصة بك، فستحتاج إلى إضافة سطر إلى قسم [Interface] الذي يحدد محولات DNS. إذا لم تقم بإضافة هذا الإعداد، فقد لا تتم حماية طلبات DNS الخاصة بك بواسطة الـ VPN، أو قد يتم الكشف عنها لمزود خدمة الإنترنت الخاص بك أو أطراف ثالثة أخرى.

إذا كنت تستخدم WireGuard فقط للوصول إلى الموارد على شبكة الـ VPN أو في تكوين الند للند بين الأقران، فيمكنك تخطي هذا القسم.

لإضافة محولات DNS إلى تكوين الند للند الخاص بك، احدد أولاً أي خوادم DNS يستخدمها خادم WireGuard. قم بتشغيل الأمر التالي على خادم WireGuard، مستبدلاً اسم جهاز Ethernet الخاص بك بدلاً من eth0 إذا كان مختلفًا عن هذا المثال:

  1. resolvectl dns eth0

سوف تتلقى مخرجات مشابهة للتالي:

Output
Link 2 (eth0): 67.207.67.2 67.207.67.3 2001:4860:4860::8844 2001:4860:4860::8888

عناوين IP التي تظهر هي محولات DNS التي يستخدمها الخادم. يمكنك اختيار استخدام أي منها، أو جميعها، أو فقط IPv4 أو IPv6 حسب احتياجاتك. قم بتدوين المحولات التي ستستخدمها.

الخطوة التالية هي إضافة المحولات التي تم اختيارها إلى ملف تكوين الند للند في WireGuard Peer. على WireGuard Peer، قم بفتح ملف /etc/wireguard/wg0.conf باستخدام nano أو المحرر الذي تفضله:

  1. sudo nano /etc/wireguard/wg0.conf

قبل الخط [Peer]، قم بإضافة ما يلي:

DNS = 67.207.67.2 2001:4860:4860::8844

[Peer]
. . .

مرة أخرى، حسب تفضيلك أو متطلباتك لـ IPv4 و IPv6، يمكنك تحرير القائمة وفقًا لاحتياجاتك.

بمجرد الاتصال بشبكة VPN في الخطوة التالية، يمكنك التحقق من إرسال استعلامات DNS عبر شبكة الـ VPN عن طريق استخدام موقع مثل DNS leak test.com.

يمكنك أيضًا التحقق من استخدام الزميل لمحولات الـ DNS المكونة مسبقًا باستخدام الأمر resolvectl dns مثلما قمت بتشغيله على الخادم. يجب أن تتلقى الناتج مثلما يلي، معرضًا محولات DNS التي قمت بتكوينها لنفق الـ VPN:

Output
Global: 67.207.67.2 67.207.67.3 . . .

بعد تكوين كل إعدادات محولات DNS هذه، أصبحت الآن جاهزًا لإضافة المفتاح العام للزميل إلى الخادم، ثم بدء نفق WireGuard على الزميل.

الخطوة 8 — إضافة المفتاح العام للزميل إلى خادم WireGuard

قبل الاتصال بالزميل بالخادم، من المهم إضافة المفتاح العام للزميل إلى خادم WireGuard. تضمن هذه الخطوة أنك ستكون قادرًا على الاتصال بالزميل وتوجيه حركة المرور عبر الـ VPN. دون إكمال هذه الخطوة، لن يسمح خادم WireGuard للزميل بإرسال أو استقبال أي حركة مرور عبر النفق.

تأكد من أن لديك نسخة من المفتاح العام المشفر بتنسيق base64 لـ WireGuard Peer عن طريق تشغيل:

  1. sudo cat /etc/wireguard/public.key
Output
PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=

الآن قم بتسجيل الدخول إلى خادم WireGuard، وقم بتشغيل الأمر التالي:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd24:609a:6c18::2

لاحظ أن قسم allowed-ips من الأمر يأخذ قائمة مفصولة بفاصلة من عناوين IPv4 و IPv6. يمكنك تحديد عناوين IP فردية إذا كنت ترغب في تقييد عنوان IP الذي يمكن للنظير تعيين نفسه، أو نطاقًا مثلما في المثال إذا كان بإمكان نظرائك استخدام أي عنوان IP في نطاق الشبكة الافتراضية الخاصة بالشبكة الخاصة الافتراضية. كما لاحظ أنه لا يمكن لنظيرين اثنين أن يحتويا على إعدادات allowed-ips متطابقة.

إذا كنت ترغب في تحديث allowed-ips لنظير موجود، يمكنك تشغيل نفس الأمر مرة أخرى، لكن قم بتغيير عناوين IP. يتم دعم عدة عناوين IP. على سبيل المثال، لتغيير نظير WireGuard الذي قمت للتو بإضافته لإضافة عنوان IP مثل 10.8.0.100 إلى عناوين 10.8.0.2 و fd24:609a:6c18::2 الموجودة بالفعل، يجب عليك تشغيل الأمر التالي:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd24:609a:6c18::2

بمجرد تشغيل الأمر لإضافة النظير، تحقق من حالة النفق على الخادم باستخدام الأمر wg:

  1. sudo wg
Output
interface: wg0 public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= private key: (hidden) listening port: 51820 peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed ips: 10.8.0.2/32, fd24:609a:6c18::/128

لاحظ كيف تُظهر السطر peer مفتاح النظير WireGuard العام، وعناوين IP، أو نطاقات العناوين التي يُسمح له باستخدامها لتعيين عنوان IP لنفسه.

الآن بعد أن قمت بتعريف معلمات اتصال النظير على الخادم، الخطوة التالية هي بدء النفق على النظير.

الخطوة 9 — ربط النظير WireGuard بالنفق

الآن بعد أن تم تكوين الخادم والنظير لدعم اختيارك من IPv4، IPv6، إعادة توجيه الحزم، وحل DNS، حان الوقت لربط النظير بنفق الشبكة الافتراضية الخاصة.

نظرًا لأنه قد ترغب فقط في تشغيل الشبكة الافتراضية الخاصة لحالات استخدام معينة، سنستخدم أمر wg-quick لإقامة الاتصال يدويًا. إذا كنت ترغب في أتمتة بدء النفق مثلما فعلت على الخادم، اتبع تلك الخطوات في الخطوة 6 — بدء خادم WireGuard بدلاً من استخدام أمر wq-quick.

في حال كنت توجّه كل حركة مرور من خلال الشبكة الافتراضية الخاصة وقد قمت بإعداد إعادة التوجيه للـ DNS، ستحتاج إلى تثبيت أداة resolvconf على النظير لـ WireGuard قبل بدء النفق. قم بتشغيل الأمر التالي لإعداد هذا:

  1. sudo apt install resolvconf

لبدء النفق، قم بتشغيل الأمر التالي على النظير لـ WireGuard:

  1. sudo wg-quick up wg0

ستتلقى إخراجًا مثل الآتي:

Output
[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.8.0.2/24 dev wg0 [#] ip -6 address add fd24:609a:6c18::2/64 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a tun.wg0 -m 0 -x

لاحظ العناوين IPv4 و IPv6 المميزة التي قمت بتعيينها للنظير.

إذا قمت بتعيين AllowedIPs على النظير لـ 0.0.0.0/0 و ::/0 (أو لاستخدام نطاقات أخرى غير تلك التي اخترتها للشبكة الافتراضية الخاصة)، فستكون النتيجة مشابهة للتالي:

Output
[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.8.0.2/24 dev wg0 [#] ip -6 address add fd24:609a:6c18::2/64 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a tun.wg0 -m 0 -x [#] wg set wg0 fwmark 51820 [#] ip -6 route add ::/0 dev wg0 table 51820 [#] ip -6 rule add not fwmark 51820 table 51820 [#] ip -6 rule add table main suppress_prefixlength 0 [#] ip6tables-restore -n [#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820 [#] ip -4 rule add not fwmark 51820 table 51820 [#] ip -4 rule add table main suppress_prefixlength 0 [#] sysctl -q net.ipv4.conf.all.src_valid_mark=1 [#] iptables-restore -n

في هذا المثال، لاحظ الطرق المميزة التي أضافها الأمر والتي تتوافق مع AllowedIPs في تكوين النظير.

يمكنك التحقق من حالة النفق على النظير باستخدام الأمر wg:

  1. sudo wg
Output
interface: wg0 public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= private key: (hidden) listening port: 49338 fwmark: 0xca6c peer: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= endpoint: 203.0.113.1:51820 allowed ips: 10.8.0.0/24, fd24:609a:6c18::/64 latest handshake: 1 second ago transfer: 6.50 KiB received, 15.41 KiB sent

يمكنك أيضًا التحقق من الحالة على الخادم مرة أخرى، وستتلقى إخراجًا مماثلًا.

تحقق من استخدام النظير لـ VPN باستخدام الأوامر ip route و ip -6 route. إذا كنت تستخدم VPN كبوابة لكل حركة مرور الإنترنت الخاصة بك، فتحقق من الواجهة التي سيتم استخدامها لحركة المرور المتجهة إلى محولات DNS لـ CloudFlare، 1.1.1.1 و 2606:4700:4700::1111.

إذا كنت تستخدم WireGuard فقط للوصول إلى الموارد على الـ VPN، فاستبدل عنوان IPv4 أو IPv6 صالحًا مثل البوابة نفسها في هذه الأوامر. على سبيل المثال، 10.8.0.1 أو fd24:609a:6c18::1.

  1. ip route get 1.1.1.1
Output
1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000 cache

لاحظ جهاز الـ wg0 الذي يتم استخدامه وعنوان IPv4 10.8.0.2 الذي قمت بتعيينه للنظير. بالمثل، إذا كنت تستخدم IPv6، قم بتشغيل ما يلي:

  1. ip -6 route get 2606:4700:4700::1111
Output
2606:4700:4700::1111 from :: dev wg0 table 51820 src fd24:609a:6c18::2 metric 1024 pref medium

مرة أخرى لاحظ واجهة wg0، وعنوان IPv6 fd24:609a:6c18::2 الذي قمت بتعيينه للنظير.

إذا كان لدى النظير متصفح مثبت، يمكنك أيضًا زيارة ipleak.net و ipv6-test.com للتحقق من أن النظير يوجه حركة مروره عبر الـ VPN.

عندما تكون جاهزًا للفصل من الـ VPN على النظير، استخدم الأمر wg-quick:

  1. sudo wg-quick down wg0

سوف تتلقى مخرجات مثل التالي تشير إلى أن نفق الـ VPN قد تم إيقافه:

Output
[#] ip link delete dev wg0 [#] resolvconf -d tun.wg0 -f

إذا قمت بتعيين AllowedIPs على النظير إلى 0.0.0.0/0 و ::/0 (أو لاستخدام نطاقات أخرى غير تلك التي اخترتها للـ VPN)، فسوف تشبه مخرجاتك ما يلي:

Output
[#] ip rule delete table 200 from 203.0.113.5 [#] ip route delete table 200 default via 203.0.113.1 [#] ip -4 rule delete table 51820 [#] ip -4 rule delete table main suppress_prefixlength 0 [#] ip -6 rule delete table 51820 [#] ip -6 rule delete table main suppress_prefixlength 0 [#] ip link delete dev wg0 [#] resolvconf -d tun.wg0 -f [#] iptables-restore -n [#] ip6tables-restore -n

لإعادة الاتصال بـ VPN، قم بتشغيل الأمر wg-quick up wg0 مرة أخرى على النظير. إذا كنت ترغب في إزالة تكوين النظير بالكامل من خادم WireGuard، يمكنك تشغيل الأمر التالي، متأكدًا من استبدال المفتاح العام الصحيح للنظير الذي تريد إزالته:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove

عادةً ما ستحتاج إلى إزالة تكوين النظير فقط إذا لم يعد النظير موجودًا، أو إذا تم التعرض لمفاتيح التشفير الخاصة به أو تغييرها. في غير ذلك، من الأفضل ترك التكوين في مكانه بحيث يمكن للنظير إعادة الاتصال بالـ VPN دون الحاجة إلى إضافة مفتاحه وallowed-ips في كل مرة.

الاستنتاج

في هذا البرنامج التعليمي، قمت بتثبيت حزمة WireGuard وأدواتها على نظامي Ubuntu 22.04 الخادم والعميل. قمت بتكوين قواعد جدار الحماية لـ WireGuard، وقمت بتكوين إعدادات النواة للسماح بتوجيه الحزم باستخدام الأمر sysctl على الخادم. تعلمت كيفية إنشاء مفاتيح تشفير خاصة وعامة لـ WireGuard، وكيفية تكوين الخادم والنظير (أو النظراء) للاتصال ببعضها البعض.

إذا كانت شبكتك تستخدم IPv6، تعلمت أيضًا كيفية إنشاء نطاق عنوان محلي فريد لاستخدامه مع اتصالات النظير. وأخيرًا، تعلمت كيفية تقييد الحركة التي يجب أن تمر عبر الـ VPN من خلال تقييد البادئات الشبكية التي يمكن للنظير استخدامها، بالإضافة إلى كيفية استخدام خادم WireGuard كبوابة VPN لمعالجة جميع حركة الإنترنت للنظراء.

إذا كنت ترغب في معرفة المزيد عن WireGuard، بما في ذلك كيفية تكوين الأنفاق المتقدمة أكثر، أو استخدام WireGuard مع الحاويات، قم بزيارة وثائق WireGuard الرسمية.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-wireguard-on-ubuntu-22-04