مقدمة
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
في هذه الجلسة:
الآن بعد تثبيت WireGuard، الخطوة التالية هي إنشاء زوج من المفاتيح الخاصة والعامة للخادم. ستستخدم الأوامر المدمجة wg genkey
و wg pubkey
لإنشاء المفاتيح، ثم ستضيف المفتاح الخاص إلى ملف تكوين WireGuard.
سيكون لديك أيضًا حاجة لتغيير أذونات المفتاح الذي أنشأته للتو باستخدام الأمر chmod
، لأن الملف بشكل افتراضي قابل للقراءة من قبل أي مستخدم على الخادم الخاص بك.
أنشئ المفتاح الخاص لـ WireGuard وقم بتغيير أذوناته باستخدام الأوامر التالية:
يقوم الأمر sudo chmod go=...
بإزالة أي أذونات على الملف للمستخدمين والمجموعات الأخرى بخلاف مستخدم root لضمان أنه يمكن الوصول إلى المفتاح الخاص فقط.
سوف تتلقى سطرًا واحدًا من الإخراج المشفر بتنسيق base64
، والذي يُعتبر المفتاح الخاص. يتم أيضًا تخزين نسخة من الإخراج في ملف /etc/wireguard/private.key
للرجوع إليها في المستقبل من قبل جزء tee
من الأمر. قم بتدوين المفتاح الخاص الذي تم إخراجه بعناية لأنك ستحتاج إلى إضافته إلى ملف تكوين WireGuard لاحقًا في هذا القسم.
الخطوة التالية هي إنشاء المفتاح العام المقابل، والذي يتم استنتاجه من المفتاح الخاص. استخدم الأمر التالي لإنشاء ملف المفتاح العام:
يتكون هذا الأمر من ثلاثة أوامر فردية يتم ربطها معًا باستخدام مشغل الأنابيب |
.
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
باستخدام الأمر التالي:
ستتلقى رقمًا مثل الآتي، وهو عدد الثواني (المعبر عنه بـ %s
في الأمر date
)، والنانوثانية (المعبر عنها بـ %N
) منذ 1970-01-01 00:00:00 UTC مدموجة معًا:
Output1650301699497770167
سجّل القيمة في مكان ما لاستخدامها في هذا القسم لاحقًا. بعد ذلك، انسخ قيمة machine-id
الخاصة بخادمك من ملف /var/lib/dbus/machine-id
. هذه المعرفة فريدة لنظامك ولا يجب أن تتغير طالما أن الخادم قائم.
ستتلقى ناتجًا مشابهًا للآتي:
/var/lib/dbus/machine-id610cef4946ed46da8f71dba9d66c67fb
الآن، عليك دمج الطابع الزمني مع machine-id
وتجزئة القيمة الناتجة باستخدام خوارزمية SHA-1. سيستخدم الأمر التنسيق التالي:
printf <timestamp><machine-id> | sha1sum
قم بتشغيل الأمر مع استبدال قيم الطابع الزمني وهوية الجهاز:
ستتلقى قيمة تجزئة مشابهة للآتي:
Output442adea1488d96388dae9ab816045b24609a6c18 -
يرجى ملاحظة أن مخرجات الأمر sha1sum
معرفة بالهيكساديسمال، لذا تستخدم المخرجات حرفين لتمثيل بايت بيانات واحد. على سبيل المثال 4f
و 26
في مخرجات المثال هما أول بايتين من البيانات المجزئة.
تتطلب الخوارزمية في RFC فقط أقل البتات الأكثر أهمية (المتسلسلة) 40 بتًا، أو 5 بايتات، من مخرجات الهاش. استخدم الأمر cut
لطباعة آخر 5 بايتات مجزئة بالهيكساديسمال من الهاش:
المُعلمة “-c” تُخبر أمر “cut” بتحديد مجموعة محددة من الأحرف. المُعلمة “31-” تخبر “cut” بطباعة جميع الأحرف من الموقع 31 إلى نهاية سطر الإدخال.
يجب أن تتلقى إخراجًا مثل التالي:
Output24609a6c18
في هذا المثال من الإخراج، مجموعة البايتات هي: 24 60 9a 6c 18
.
الآن يمكنك بناء بادئة شبكة IPv6 الفريدة الخاصة بك من خلال إضافة البايتات الخمس التي تم إنشاؤها مع بادئة “fd”، مع فصل كل 2 بايت بـ “:” نقطة مزدوجة لسهولة القراءة. نظرًا لأن كل شبكة فرعية في البادئة الفريدة الخاصة بك يمكن أن تحتوي على مجموعة متاحة إجمالية تبلغ 18,446,744,073,709,551,616 عنوان IPv6 ممكن، يمكنك تقييد الشبكة الفرعية إلى حجم قياسي /64
للبساطة.
باستخدام البايتات التي تم إنشاؤها سابقًا مع حجم الشبكة الفرعية /64
، ستكون البادئة الناتجة هي التالية:
Unique Local IPv6 Address Prefixfd24: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 — تثبيت WireGuard وإنشاء زوج المفاتيح.
-
إذا كنت تستخدم WireGuard مع IPv4، ستحتاج إلى عنوان IP الذي اخترته للخادم في الخطوة 2(a) — اختيار نطاق IPv4، والذي في هذا المثال هو
10.8.0.1/24
. -
إذا كنت تستخدم WireGuard مع IPv6، ستحتاج إلى عنوان IP للخادم الذي أنشأته في الخطوة 2(b) — اختيار نطاق IPv6. في هذا المثال، العنوان هو
fd24:609a:6c18::1/64
.
بمجرد الحصول على المفتاح الخاص وعناوين IP المطلوبة، أنشئ ملف تكوين جديد باستخدام nano
أو المحرر الذي تفضله عن طريق تشغيل الأمر التالي:
أضف الأسطر التالية إلى الملف، مستبدلاً المفتاح الخاص بك في مكان القيمة المميزة 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
أو المحرر الذي تفضله:
إذا كنت تستخدم IPv4 مع WireGuard، أضف السطر التالي في نهاية الملف:
net.ipv4.ip_forward=1
إذا كنت تستخدم IPv6 مع WireGuard، أضف هذا السطر في نهاية الملف:
net.ipv6.conf.all.forwarding=1
إذا كنت تستخدم كل من IPv4 و IPv6، تأكد من تضمين كلتا السطور. احفظ وأغلق الملف عند الانتهاء.
لقراءة الملف وتحميل القيم الجديدة لجلسة الطرفية الحالية، قم بتشغيل:
Outputnet.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
:
الواجهة العامة هي السلسلة الموجودة ضمن إخراج هذا الأمر التي تتبع كلمة “dev”. على سبيل المثال، يوضح هذا النتيجة واجهة الاسم eth0
، والتي تم تسليط الضوء عليها أدناه:
Outputdefault via 203.0.113.1 dev eth0 proto static
ادرك اسم الجهاز الخاص بك لأنك ستقوم بإضافته إلى قواعد iptables
في الخطوة التالية.
لإضافة قواعد جدار الحماية إلى خادم WireGuard الخاص بك، افتح ملف /etc/wireguard/wg0.conf
مرة أخرى باستخدام nano
أو محررك المفضل.
في نهاية الملف بعد سطر 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 التي تأتي على واجهة VPNwg0
إلى واجهة الشبكةeth0
على الخادم. تعمل هذه القاعدة بالتنسيق مع قيم sysctlnet.ipv4.ip_forward
وnet.ipv6.conf.all.forwarding
التي قمت بتكوينها في القسم السابق.iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
– تكوين هذه القاعدة يتيح لها الاحتيال، وإعادة كتابة حركة المرور IPv4 التي تأتي على واجهة VPNwg0
لتبدو كما لو أنها تنشأ مباشرة من عنوان IPv4 العام لخادم WireGuard.ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
– تكوين هذه القاعدة يتيح لها الاحتيال، وإعادة كتابة حركة المرور IPv6 التي تأتي على واجهة VPNwg0
لتبدو كما لو أنها تنشأ مباشرة من عنوان 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 عند اتباع البرنامج التعليمي المسبق، أضفه هنا أيضًا:
ملاحظة: إذا كنت تستخدم جدار حماية مختلفًا أو قمت بتخصيص تكوين UFW الخاص بك، قد تحتاج إلى إضافة قواعد جدار حماية إضافية. على سبيل المثال، إذا قررت توجيه كل حركة مرور شبكتك عبر اتصال VPN، ستحتاج إلى التأكد من أن حركة المرور عبر المنفذ 53
مسموح بها لطلبات DNS، ومنافذ مثل 80
و 443
لحركة المرور HTTP و HTTPS على التوالي. إذا كانت هناك بروتوكولات أخرى تستخدمها عبر اتصال VPN، فستحتاج إلى إضافة قواعد لها أيضًا.
بعد إضافة تلك القواعد، قم بتعطيل وتمكين UFW لإعادة تشغيله وتحميل التغييرات من جميع الملفات التي قمت بتعديلها:
يمكنك التحقق من أن القواعد قد تم وضعها بشكل صحيح عن طريق تشغيل الأمر ufw status
. قم بتشغيله، ويجب أن تتلقى إخراجًا مشابهًا للتالي:
OutputStatus: 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:
لاحظ أن الأمر يحدد اسم الجهاز الافتراضي wg0 كجزء من اسم الخدمة. يتعين تعيين هذا الاسم على ملف التكوين /etc/wireguard/wg0.conf. هذا النهج في التسمية يعني أنه يمكنك إنشاء العديد من الأنفاق للشبكة الظاهرية الخاصة المستقلة حسب رغبتك باستخدام الخادم الخاص بك.
على سبيل المثال، يمكن أن يكون لديك جهاز نفق واسم prod
وملف تكوينه يكون /etc/wireguard/prod.conf
. يمكن أن تحتوي كل تكوين للنفق على إعدادات مختلفة لبروتوكول IPv4 وIPv6 وجدار الحماية الخاص بالعميل. بهذه الطريقة، يمكنك دعم العديد من الاتصالات الفردية المختلفة بالأقران، كل واحدة منها بعناوين IP فريدة وقواعد توجيه خاصة بها.
الآن ابدأ الخدمة:
تحقق مرتين من أن خدمة WireGuard نشطة باستخدام الأمر التالي. يجب أن ترى active (running)
في الإخراج:
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 قم بتشغيل:
إنشاء زوج مفاتيح الند الفرعي لـ WireGuard
بعد ذلك، ستحتاج مرة أخرى إلى إنشاء زوج المفاتيح على الند الفرعي باستخدام نفس الخطوات التي استخدمتها على الخادم. من جهازك المحلي أو الخادم عن بُعد الذي سيعمل كند فرعي، قم بإنشاء المفتاح الخاص للند الفرعي باستخدام الأوامر التالية:
ستتلقى مرة أخرى سطرًا واحدًا من الناتج المشفر بتنسيق base64
، والذي هو المفتاح الخاص. يتم أيضًا حفظ نسخة من الناتج في /etc/wireguard/private.key
. قم بتدوين المفتاح الخاص الذي تم إخراجه بعناية، لأنه ستحتاج إلى إضافته إلى ملف تكوين WireGuard لاحقًا في هذا القسم.
استخدم الأمر التالي لإنشاء ملف المفتاح العام:
سوف تتلقى مرة أخرى سطرًا واحدًا من الناتج المشفر بتنسيق base64
، والذي هو المفتاح العام لند الفرعي الخاص بـ WireGuard. قم بنسخه في مكان ما للإشارة إليه، حيث ستحتاج إلى توزيع المفتاح العام إلى خادم WireGuard من أجل إقامة اتصال مشفر.
إنشاء ملف تكوين نظير WireGuard
الآن بعد أن لديك زوج مفاتيح، يمكنك إنشاء ملف تكوين للنظير يحتوي على جميع المعلومات التي يحتاجها لإنشاء اتصال بخادم WireGuard.
ستحتاج إلى بعض المعلومات لملف التكوين:
-
المفتاح الخاص المشفر بترميز base64 الذي أنشأته على النظير.
-
نطاقات عناوين IPv4 وIPv6 التي قمت بتعريفها على خادم WireGuard.
-
المفتاح العمومي المشفر بترميز base64 من خادم WireGuard.
-
عنوان IP العام ورقم المنفذ لخادم WireGuard. عادة ما يكون هذا هو عنوان IPv4، ولكن إذا كان لديك خادم عنوان IPv6 وجهاز العميل الخاص بك يحتوي على اتصال IPv6 بالإنترنت فيمكنك استخدام هذا بدلاً من IPv4.
بعد الحصول على كل هذه المعلومات، افتح ملف /etc/wireguard/wg0.conf
الجديد على جهاز نظير WireGuard باستخدام nano
أو المحرر الذي تفضله:
أضف الأسطر التالية إلى الملف، وقم بتعويض البيانات المختلفة في الأقسام المظللة حسب الحاجة:
/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
التالي:
ستتلقى إخراجًا مثل الآتي:
Outputdefault via 203.0.113.1 dev eth0 proto static
تمت ملاحظة عنوان IP المميز للبوابة 203.0.113.1
للاستخدام لاحقًا، وجهاز eth0
. قد يكون اسم جهازك مختلفًا. إذا كان الأمر كذلك، استبدله بدلاً من eth0
في الأوامر التالية.
الآن ابحث عن عنوان IP العام للنظام عن طريق فحص الجهاز باستخدام الأمر ip address show
:
ستتلقى إخراجًا مثل الآتي:
Outputeth0 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
أو المحرر المفضل لديك.
قبل السطر [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
إذا كان مختلفًا عن هذا المثال:
سوف تتلقى مخرجات مشابهة للتالي:
OutputLink 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
أو المحرر الذي تفضله:
قبل الخط [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:
OutputGlobal: 67.207.67.2 67.207.67.3
. . .
بعد تكوين كل إعدادات محولات DNS هذه، أصبحت الآن جاهزًا لإضافة المفتاح العام للزميل إلى الخادم، ثم بدء نفق WireGuard على الزميل.
الخطوة 8 — إضافة المفتاح العام للزميل إلى خادم WireGuard
قبل الاتصال بالزميل بالخادم، من المهم إضافة المفتاح العام للزميل إلى خادم WireGuard. تضمن هذه الخطوة أنك ستكون قادرًا على الاتصال بالزميل وتوجيه حركة المرور عبر الـ VPN. دون إكمال هذه الخطوة، لن يسمح خادم WireGuard للزميل بإرسال أو استقبال أي حركة مرور عبر النفق.
تأكد من أن لديك نسخة من المفتاح العام المشفر بتنسيق base64 لـ WireGuard Peer عن طريق تشغيل:
OutputPeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
الآن قم بتسجيل الدخول إلى خادم WireGuard، وقم بتشغيل الأمر التالي:
لاحظ أن قسم 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
الموجودة بالفعل، يجب عليك تشغيل الأمر التالي:
بمجرد تشغيل الأمر لإضافة النظير، تحقق من حالة النفق على الخادم باستخدام الأمر wg
:
Outputinterface: 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 قبل بدء النفق. قم بتشغيل الأمر التالي لإعداد هذا:
لبدء النفق، قم بتشغيل الأمر التالي على النظير لـ WireGuard:
ستتلقى إخراجًا مثل الآتي:
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
:
Outputinterface: 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
.
Output1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000
cache
لاحظ جهاز الـ wg0
الذي يتم استخدامه وعنوان IPv4 10.8.0.2
الذي قمت بتعيينه للنظير. بالمثل، إذا كنت تستخدم IPv6، قم بتشغيل ما يلي:
Output2606: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
:
سوف تتلقى مخرجات مثل التالي تشير إلى أن نفق الـ 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، يمكنك تشغيل الأمر التالي، متأكدًا من استبدال المفتاح العام الصحيح للنظير الذي تريد إزالته:
عادةً ما ستحتاج إلى إزالة تكوين النظير فقط إذا لم يعد النظير موجودًا، أو إذا تم التعرض لمفاتيح التشفير الخاصة به أو تغييرها. في غير ذلك، من الأفضل ترك التكوين في مكانه بحيث يمكن للنظير إعادة الاتصال بالـ 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