macOS Sequoia وخادم VPN: كيفية إعداد مفتاح إيقاف النظام وتكوين Network Extension
دليل خطوة بخطوة لإعداد مفتاح إيقاف على مستوى النظام لخادم VPN في macOS Sequoia وأساسيات واجهة برمجة تطبيقات Network Extension. خلال 60–120 دقيقة، ستقوم بتثبيت العميل، استيراد الإعدادات، إعداد مرشح PF، أتمتته، والتحقق من عدم وجود تسريبات.
محتوى المقال
- مقدمة
- التحضير
- المفاهيم الأساسية
- الخطوة 1: اختيار البروتوكول والعميل
- الخطوة 2: استيراد الإعداد والاتصال الأولي
- الخطوة 3: تفعيل حماية تسرب dns وميزة on-demand
- الخطوة 4: مفتاح إيقاف النظام عبر pf: الإعداد الأساسي
- الخطوة 5: أتمتة مفتاح الإيقاف: سكربت وlaunchagent
- الخطوة 6: ضبط القواعد والسيناريوهات حسب البروتوكولات المختلفة
- الخطوة 7: قسم متقدم: أساسيات network extension api لمفتاح الإيقاف
- الخطوة 8: اختبار شامل: الحركة، dns، الانقطاعات
- التحقق من النتيجة
- المشاكل الشائعة والحلول
- ميزات إضافية
- الأسئلة الشائعة
- الخاتمة
مقدمة
في هذا الدليل التفصيلي، ستُعد مفتاح إيقاف موثوق على مستوى النظام لخادم VPN في macOS Sequoia، وستفهم كيفية عمل الأجزاء الرئيسية من واجهة برمجة تطبيقات Network Extension. سنبدأ باختيار البروتوكول والعميل، وصولاً إلى إنشاء قواعد على مستوى النظام باستخدام مرشح PF، وإذا أردت، سنتعمق في الدمج المتقدم عبر Network Extension. في النهاية، سيكون لديك اتصال موثوق دون تسريبات بيانات خارج خادم VPN — حتى أثناء انقطاع الاتصال غير المتوقع. هذا الدليل مصمم للمبتدئين، لكنه يحتوي على أقسام متقدمة لمن يرغبون بفهم أعمق.
بعد إكمال جميع الخطوات، ستتمكن من: تكوين عميل VPN على macOS Sequoia، استيراد ملف إعدادات جاهز، تفعيل حماية من تسرب DNS، إنشاء واختبار مفتاح إيقاف النظام باستخدام PF، أتمتة تفعيل وتعطيل المرشح، وتجربة نموذج بسيط مع Network Extension API اختياريًا.
هذا الدليل مثالي لـ: مستخدمي Mac على macOS Sequoia (حتى 2026)، المبتدئين في الأمن، المطورين الراغبين بفهم المبادئ، وأي شخص يحتاج لضمان حظر حركة البيانات خارج VPN.
ما تحتاج معرفته مسبقًا: خبرة أساسية مع تفضيلات النظام، القدرة على نسخ الأوامر إلى الطرفية، وفهم بسيط لما هو عنوان IP والمنفذ. هذا كل شيء. سنشرح تفاصيل API بوضوح وباختصار.
الوقت المطلوب: الإعداد الأساسي لخادم VPN ومفتاح الإيقاف يستغرق 60–90 دقيقة، بالإضافة لـ 30 دقيقة للأتمتة والاختبار. خصص 60 دقيقة إضافية لأقسام Network Extension المتقدمة إذا كان لديك حساب مطور آبل.
التحضير
قبل البدء، تأكد أن كل شيء جاهز. سنجهز النظام، نختار العميل والإعدادات، نتحقق من نسخة macOS، وننشئ نقطة استعادة للإعدادات الشبكية الحيوية.
الأدوات وصلاحيات الوصول المطلوبة
- جهاز Mac يعمل بنظام macOS Sequoia (الإصدار 15.x أو أحدث).
- صلاحيات المدير على الجهاز (مطلوبة لتكوين PF وتثبيت العملاء).
- ملف إعداد للبروتوكول الذي تختاره (WireGuard، OpenVPN، أو IKEv2). قد يكون ملف .conf لـ WireGuard، .ovpn لـ OpenVPN، أو معلمات IKEv2.
- عنوان IP المخصص لخادم VPN والمنفذ. من الأفضل أن يكون لديك IP وليس مجرد اسم نطاق، لتجنب الاعتماد على DNS خارجي عند إنشاء الاتصال.
- اتصال إنترنت نشط أثناء الإعداد.
متطلبات النظام
- macOS Sequoia 15.x (تحقق: قائمة آبل → حول هذا الـMac → نظرة عامة).
- مساحة حرة لا تقل عن 200 ميجابايت لتثبيت العملاء وسجلات النظام.
- السماح بالاتصال الصادر إلى خادم VPN (المنافذ تعتمد على البروتوكول: WireGuard عادة UDP 51820؛ OpenVPN UDP 1194 أو TCP 443 افتراضيًا؛ IKEv2 UDP 500 و UDP 4500).
ما يجب تنزيله وتثبيته
- WireGuard لنظام macOS أو بديلًا Tunnelblick/Viscosity لـ OpenVPN؛ إذا كنت تستخدم IKEv2، فالعميل المدمج في macOS كافٍ.
- محرر نصوص لتعديل الإعدادات (مثل TextEdit المدمج أو أي محرر آخر).
النسخ الاحتياطي
التغييرات الشبكية تؤثر على إعدادات النظام. قبل البدء، سجّل الوضع الحالي. احفظ خوادم DNS الحالية، الواجهات الفعالة، والمسار الافتراضي.
- افتح الطرفية (Terminal).
- شغل الأمر scutil --dns. انسخ القسم الرئيسي الخاص بخوادم DNS إلى ملف نصي.
- شغّل الأمرين ifconfig و route -n get default. احفظ النتائج للرجوع إليها.
- أنشئ نقطة استعادة عبر Time Machine إذا كنت تستخدمه.
نصيحة: دوّن IP ومنفذ خادم VPN في ملاحظة. ستحتاجها لقواعد PF للسماح بالمرور الصادر فقط إلى خادم VPN عندما يكون كل شيء آخر محظوراً.
المفاهيم الأساسية
لتسهيل متابعة التعليمات، دعنا نوضح بعض المصطلحات الرئيسية بأسلوب بسيط ودون تعقيدات.
- خادم VPN — قناة مشفرة بين جهازك وخادم VPN البعيد، تمر عبرها كل حركة بياناتك.
- مفتاح الإيقاف (Kill switch) — آلية تمنع كل حركة البيانات إذا انقطع خادم VPN لأي سبب، تحمي من التسريبات.
- PF (مرشح الحزم) — مرشح النظام في macOS. يسمح لك بوضع قواعد تحدد الاتصالات المسموح بها أو المحظورة بغض النظر عن التطبيقات.
- واجهة utun — واجهة شبكة افتراضية ينشئها عميل VPN، مثل utun0. تمر كل الحزم المشفرة عبر هذه الواجهة.
- واجهة برمجة تطبيقات Network Extension — إطار عمل آبل لتطوير عملاء VPN ومرشحات المحتوى والوكيلات، يسمح بالتحكم البرمجي بالنفق وإعدادات الشبكة.
- On-Demand — مجموعة قواعد تحدد متى وكيف يتصل VPN تلقائيًا (مثل على أي شبكة باستثناء الموثوقة) وكيف يتصرف عند انقطاع الاتصال.
- تسرب DNS — عندما تذهب طلبات DNS مباشرة إلى الإنترنت خارج النفق، مما يكشف سجلات البحث وربما عنوان IP الخاص بك.
نصيحة: إذا رأيت مصطلحات غير مألوفة لاحقًا، عد إلى هنا. معرفة utun و PF يجعل إعداد مفتاح الإيقاف أسهل بكثير.
الخطوة 1: اختيار البروتوكول والعميل
الهدف
اختيار البروتوكول والعميل على macOS Sequoia للبدء في تكوين الاتصال ومفتاح إيقاف النظام.
التعليمات التفصيلية
- حدد احتياجك: هل تريد أسرع وأسهل حل؟ اختر WireGuard. هل تحتاج توافقًا مع شبكات قديمة؟ جرب OpenVPN. هل تفضل الدمج الأصلي بدون عملاء خارجيين؟ استخدم IKEv2.
- إذا اخترت WireGuard: قم بتثبيت تطبيق WireGuard لنظام macOS من مصدر موثوق وجهز ملف الإعداد .conf.
- إذا اخترت OpenVPN: ثبت Tunnelblick أو Viscosity وجهز ملف .ovpn.
- إذا اخترت IKEv2: استخدم العميل المدمج في macOS. جهز المعلمات: عنوان الخادم (IP)، معرف بعيد، معرف محلي، المصادقة (اسم المستخدم/كلمة المرور أو الشهادة)، وفعل خيار «إرسال كل البيانات».
- جهز IP والمنفذ الخاص بالخادم: WireGuard عادة UDP 51820؛ OpenVPN تحقق من المنفذ في ملف .ovpn؛ IKEv2 يستخدم UDP 500 و 4500.
⚠️ تنبيه: لمفتاح إيقاف صحيح على مستوى النظام، تحتاج إلى IP الخادم الدقيق، لا اسم النطاق فقط. قواعد PF ستسمح فقط بالاتصالات لذلك العنوان والمنفذ. إذا كان لديك نطاق فقط، قم بحله إلى IP مسبقًا وسجله.
نصيحة: مع WireGuard حاول أن تستخدم إعدادًا حيث AllowedIPs مضبوط على 0.0.0.0/0, ::/0. هذا يوجه كل الحركة عبر النفق، مما يبسط العملية ويقلل من خطر التسرب.
النتيجة المتوقعة
لقد اخترت البروتوكول، ثبت العميل (أو قررت استخدام العميل المدمج)، ويوجد لديك إعداد يعمل به IP الخادم والمنافذ المعروفة.
المشكلات المحتملة والحلول
- غير متأكد ماذا تختار؟ الحل: WireGuard هو الخيار الأفضل كبداية لـ macOS Sequoia — إعداد سهل، سريع، وحجم أقل.
- لديك نطاق فقط بدون IP؟ الحل: شغّل dig +short your.domain أو nslookup your.domain في الطرفية وسجل IP.
- شركة الإنترنت تحجب UDP؟ الحل: استخدم OpenVPN على TCP 443 أو IKEv2 المهيأ، أو فعل الإخفاء إذا كان خادمك يدعمه.
✅ تحقق: لديك: بروتوكول مختار، عميل مثبت (أو مدعوم مدمج لـ IKEv2)، إعداد، وIP الخادم مع المنافذ.
الخطوة 2: استيراد الإعداد والاتصال الأولي
الهدف
استيراد الإعداد إلى العميل المختار والتأكد من اتصال VPN وتوجيه حركة البيانات.
تعليمات WireGuard التفصيلية
- افتح WireGuard على جهاز Mac.
- اضغط «استيراد نفق» أو «إضافة نفق» واختر ملف .conf.
- تأكد من أن حقل Address يحتوي على عناوين شبكة VPN الفرعية (مثلاً 10.14.0.2/32)، وPrivateKey يحتوي على مفتاحك، وPeer يحتوي Endpoint على IP:port مع AllowedIPs = 0.0.0.0/0, ::/0.
- فعّل المفتاح للاتصال. يجب أن يتحول المؤشر إلى الأخضر ويظهر إحصائيات الحركة.
تعليمات OpenVPN (Tunnelblick) التفصيلية
- شغّل Tunnelblick.
- اسحب ملف .ovpn إلى أيقونة Tunnelblick في شريط القائمة أو اختر «إضافة إعداد» من قائمة التطبيق.
- اختر التثبيت إما «للمستخدم الحالي فقط» أو «لكل المستخدمين» حسب الحاجة.
- اتصل بالضغط على «اتصال» بجانب الملف الشخصي. أدخل اسم المستخدم وكلمة المرور إذا طلب.
تعليمات IKEv2 (العميل المدمج) التفصيلية
- اذهب إلى «تفضيلات النظام» → «الشبكة» → «خادم VPN» → «إضافة إعداد VPN».
- اختر النوع «IKEv2».
- أدخل عنوان IP للخادم كعنوان «الخادم».
- املأ «المعرف البعيد» (عادةً نطاق الخادم) و«المعرف المحلي» إذا مطلوب.
- اختر طريقة المصادقة: «اسم المستخدم وكلمة المرور» أو «شهادة». أدخل بيانات الاعتماد.
- فعّل خيار «إرسال كل البيانات» (أو إعداد المسار الافتراضي المماثل).
- حفظ واضغط «اتصال».
نصيحة: إذا كان بإمكانك الوصول إلى لوحة تحكم موفر VPN، من الأسهل استخدام ملفات إعدادات جاهزة. على سبيل المثال، vpn.how يقدم إعدادات جاهزة للاستخدام لـ WireGuard و OpenVPN و IKEv2 يمكن تنزيلها واستيرادها على macOS. يقدمون خادم VPN شخصي (غير مشترك) مع عنوان IP مخصص، ودعم WireGuard، OpenVPN، IKEv2، L2TP، SSTP، وخوادم في موسكو، سانت بطرسبرغ، أمستردام، فرانكفورت، لندن، نيويورك، سان خوسيه، شيكاغو، سنغافورة، سيدني، مدريد، هلسنكي، ستوكهولم، وارسو، كوبنهاغن وستافنجر، يقبلون بطاقات الدفع الروسية (Tinkoff, Ozon)، SBP، USDT/BTC، الأسعار تبدأ من 490 ₽ يوميًا و2490 ₽ شهريًا، خصومات للاستخدام طويل الأمد، بدء تلقائي للخادم خلال 5 دقائق وبدون سجلات. ذُكر هذا هنا للحفاظ على وضوح التعليمات.
النتيجة المتوقعة
ينجح اتصال VPN وتحصل على وصول إلى الإنترنت عبر النفق، وتتوافق المعايير الأساسية مع الإعداد.
المشكلات المحتملة والحلول
- فشل الاتصال. السبب: منفذ أو IP خاطئ. الحل: تحقق مرتين من Endpoint في الإعداد وتأكد من المنفذ مع الموفر.
- متصل ولكن لا يوجد إنترنت. السبب: المسارات أو DNS خاطئة. الحل: راجع AllowedIPs في WireGuard أو خيار «إرسال كل البيانات» في IKEv2، وأضف خوادم DNS الخاصة بالنفق.
- يطلب اسم المستخدم/كلمة السر في كل مرة. الحل: فعل حفظ بيانات الاعتماد إذا تسمح سياسة الأمان.
✅ تحقق: زر موقع معلومات IP وتأكد أنه يعرض الـIP الخاص بك من VPN. افصل VPN وتأكد من تغير IP. هذا يؤكد صحة التوجيه الأساسية.
الخطوة 3: تفعيل حماية تسرب DNS وميزة On-Demand
الهدف
تأكد من أن طلبات DNS دائماً تمر عبر VPN وأنه يتصل تلقائياً في الشبكات المناسبة، مما يقلل مخاطر التسرب قبل تطبيق مفتاح إيقاف النظام.
التعليمات التفصيلية
- في WireGuard، افتح الملف الشخصي وتأكد من وجود قسم DNS (مثل DNS = 10.14.0.1 أو عنوان DNS للنفق). إذا مفقود، أضف خوادم DNS الموصى بها من الإعداد لكي يضبطها العميل عند الاتصال.
- في OpenVPN (Tunnelblick)، تأكد أن ملف .ovpn يحتوي على توجيه يحدد DNS عبر push من الخادم (مثلاً dhcp-option DNS 10.14.0.1). إذا لم يدفع الخادم DNS، اضبط إعدادات DNS يدويًا في النظام بعد الاتصال: الشبكة → محول VPN → DNS.
- في IKEv2، تحقق من أن الخادم يوفر DNS عبر الإعداد. إذا لزم الأمر، عين DNS يدويًا في إعدادات اتصال VPN.
- فعّل ميزة On-Demand (إذا متاحة). تقدم WireGuard خيار «التفعيل حسب الطلب» وقواعد شبكة SSID/الشبكة. يسمح Tunnelblick باستخدام «الاتصال عند بدء تشغيل الكمبيوتر» أو ما يشابه في Viscosity. في IKEv2، فعّل «الاتصال تلقائيًا» إذا كان macOS Sequoia يدعم ذلك.
- اختبر بعد إعادة تشغيل جهاز Mac أن العميل يبدأ النفق تلقائيًا عند أول اتصال بشبكة.
نصيحة: إذا كنت تستخدم اسم نطاق في Endpoint، حوّل إلى IP الخادم أثناء إعداد مفتاح الإيقاف. هذا يضمن أن إنشاء النفق لا يُحجب بسبب DNS خارجي غير متاح. بعد الانتهاء من التصحيح، يمكنك العودة لاستخدام النطاق وإضافة قاعدة PF تسمح بطلبات DNS فقط للحل الأولي. لتبسيط الشرح، هذا الدليل يفترض خادم IP ثابت.
النتيجة المتوقعة
طلبات DNS تمر عبر النفق وVPN يتصل تلقائيًا. هذا ليس مفتاح الإيقاف النهائي لكنه يغلق العديد من مسارات التسرب.
المشكلات المحتملة والحلول
- التسرب ما زال موجودًا. السبب: أولويات DNS في النظام. الحل: عطل محولات DNS من طرف ثالث في الواجهة النشطة أو استخدم matchDomains في العملاء الداعمين.
- الاتصال التلقائي لا يعمل. السبب: تعارضات في السياسات. الحل: راجع إعدادات On-Demand وصلاحيات بدء التشغيل التلقائي في macOS.
✅ تحقق: شغّل scutil --dns وتأكد أن الخادم النشط هو عنوان نفق VPN. افصل VPN وتحقق من تغير الخادم. أعد الاتصال وتأكد من الوصول للمواقع.
الخطوة 4: مفتاح إيقاف النظام عبر PF: الإعداد الأساسي
الهدف
إنشاء إعداد PF (مرشح الحزم) أساسي يحجب كل حركة المرور الصادرة عدا المسموح: لخادم VPN أثناء إنشاء النفق، ومن خلال واجهة VPN بعد تشغيله.
كيف يعمل
سنفعل PF في النظام ونحدد قواعد: حجب كل شيء افتراضيًا، السماح فقط لحركة المرور عبر واجهة utun، والسماح لحزم الصادر إلى IP ومنفذ خادم VPN على الواجهة المادية لإعداد النفق. هذا يضمن أنه إذا انقطع النفق، لن تتسرب بياناتك لأن كل الاتصالات عدا تلك الخاصة بخادم VPN وواجهة النفق ممنوعة.
تحضير بياناتك
- سجل عنوان IP لخادم VPN، مثلاً 203.0.113.10.
- سجل المنافذ المستخدمة: WireGuard يستخدم 51820/UDP؛ OpenVPN عادة 1194/UDP (أو منفذك المخصص)؛ IKEv2 يستخدم 500/UDP و4500/UDP.
- اعرف الواجهة الفيزيائية الرئيسية لديك: شغّل route -n get default وابحث عن «interface: en0» أو «en1». دوّن هذا الاسم (مثلاً en0).
إنشاء ملف مرساة PF
- افتح الطرفية.
- أنشئ ملف المرساة: sudo nano /etc/pf.anchors/vpn-killswitch.
- الصق قواعد التالية مع استبدال القيم بتفاصيلك. اعتبر كل سطر بند منفصل للوضوح:
- set block-policy drop
- set skip on lo0
- block all
- pass quick on utun0 all keep state
- pass quick on utun1 all keep state (إذا كان العميل يستخدم utun مختلف؛ أضف utun2, utun3 إذا لزم)
- pass out quick on en0 proto udp to 203.0.113.10 port 51820 keep state (لـ WireGuard)
- pass in quick on en0 proto udp from 203.0.113.10 port 51820 keep state (اختياري لحزم العودة رغم أن الحالة تغطي ذلك)
- pass out quick on en0 proto udp to 203.0.113.10 port 500 keep state (لـ IKEv2)
- pass out quick on en0 proto udp to 203.0.113.10 port 4500 keep state (لـ IKEv2)
- pass out quick on en0 proto udp to 203.0.113.10 port 1194 keep state (لـ OpenVPN UDP)
- pass out quick on en0 proto tcp to 203.0.113.10 port 443 keep state (لـ OpenVPN TCP 443 إذا استُخدم)
احفظ واغلق. أدرج فقط المنافذ والبروتوكولات التي تستخدمها فعليًا لتقليل سطح الهجوم.
تحميل المرساة في pf.conf الرئيسي
- حرر الملف الرئيسي: sudo nano /etc/pf.conf.
- أضف السطور التالية في النهاية: anchor "vpn-killswitch" وأسفله load anchor "vpn-killswitch" from "/etc/pf.anchors/vpn-killswitch".
- احفظ وأغلق.
تفعيل PF والاختبار
- تحقق من صحة الصياغة: sudo pfctl -nf /etc/pf.conf (يجب أن لا يظهر أخطاء).
- حمّل الإعداد: sudo pfctl -f /etc/pf.conf.
- فعّل PF إذا كان معطلاً: sudo pfctl -e.
- اعرض القواعد الفعالة: sudo pfctl -sr؛ وتأكد من ظهور قواعدك.
نصيحة: إذا لم تكن متأكدًا من utun الذي يستخدمه العميل، أدرج قواعد مثل «pass quick on utun0..utun3». هذا آمن ويسهل الصيانة للعملاء الذين ينشئون عدة utun عند إعادة الاتصال.
⚠️ تحذير: قد يتوقف الإنترنت الآن إذا كان VPN غير متصل ولم تسمح بحركة خروج إلى IP الخادم والمنافذ. هذا أمر متوقع. فقط اتصل بعميل VPN—سيتوجه المرور عبر النفق.
النتيجة المتوقعة
عند تفعيل PF، الإنترنت يعمل فقط عندما يكون VPN نشطًا. إذا انقطع VPN، تُحجب كل حركة البيانات باستثناء محاولة الوصول إلى خادم VPN IP والمنافذ المهيأة.
المشكلات المحتملة والحلول
- انقطاع الاتصال حتى عندما يكون VPN متصلاً. السبب: utun خاطئ أو غياب قواعد السماح على واجهات utun. الحل: تحقق من ifconfig بعد الاتصال، أضف الواجهة الصحيحة إلى القواعد، وأعد تحميل PF.
- غير قادر على إنشاء VPN. السبب: حركة الصادر إلى IP والمنفذ محرومة. الحل: أضف قاعدة pass out دقيقة على الواجهة الفيزيائية.
- نطاق Endpoint لا يُحل. السبب: DNS محجوب قبل اتصال VPN. الحل: استخدم IP مؤقتًا في Endpoint أو أضف قواعد DNS اختيارية لمُفسر DNS، لكن كن حذرًا من مخاطر التسريب.
✅ تحقق: افصل VPN — يجب أن يتوقف الإنترنت. اتصل VPN — يعود الإنترنت. شغّل curl https://ifconfig.me للتحقق أن الـIP تابع لـVPN. افصل وأعد المحاولة؛ يجب أن يتوقف الطلب أو يفشل.
الخطوة 5: أتمتة مفتاح الإيقاف: سكربت وLaunchAgent
الهدف
ضمان تحميل قواعد PF والثبات عبر إعادة التشغيل وإعادة الاتصال، مع إمكانية تبديل الوضع بسرعة عند الحاجة.
التعليمات التفصيلية
- أنشئ سكربت مساعد لإعادة تحميل PF والتحقق من حالة واجهة VPN: sudo nano /usr/local/bin/vpn-ks-reload.sh.
- الصق كل سطر أدناه منفردًا، مع استبدال القيم حسب حاجتك:
- #!/bin/sh
- /sbin/pfctl -nf /etc/pf.conf || exit 1
- /sbin/pfctl -f /etc/pf.conf
- /sbin/pfctl -e
- exit 0
- احفظ وأغلق الملف.
- اجعله قابلاً للتنفيذ: sudo chmod +x /usr/local/bin/vpn-ks-reload.sh.
- أنشئ LaunchAgent لإعادة تحميل PF عند تسجيل الدخول: nano ~/Library/LaunchAgents/com.local.vpnks.reload.plist.
- الصق XML التالي بدون مسافات بادئة لتجنب أخطاء التنسيق:
- <plist version="1.0"><dict><key>Label</key><string>com.local.vpnks.reload</string><key>ProgramArguments</key><array><string>/usr/local/bin/vpn-ks-reload.sh</string></array><key>RunAtLoad</key><true/></dict></plist>
- احفظ الملف وحمّل الوكيل: launchctl load ~/Library/LaunchAgents/com.local.vpnks.reload.plist.
- اختبر عن طريق تسجيل الخروج والعودة أو تشغيل السكربت يدويًا للتحقق من الأخطاء.
نصيحة: لتعطيل مفتاح الإيقاف مؤقتًا، شغّل sudo pfctl -d. تذكر، هذا يعطل حماية النظام. لإعادة التفعيل استعمل sudo pfctl -e و sudo pfctl -f /etc/pf.conf.
النتيجة المتوقعة
بعد إعادة تشغيل جهاز Mac، تنشط قواعد PF تلقائيًا وتستمر خلال إعادة الاتصال بـVPN. يمكنك كذلك إعادة تحميل PF يدويًا بأمر واحد.
المشكلات المحتملة والحلول
- LaunchAgent لا يبدأ. السبب: خطأ في صياغة plist. الحل: تحقق الصياغة، أعد تحميل الوكيل، وراجع launchctl list وسجلات Console.app.
- تعطيل PF بعد تحديث النظام. الحل: شغّل sudo pfctl -e مجددًا، وأعد تحميل الإعداد، وطبّق المرساة إذا لزم.
✅ تحقق: أعد تشغيل الجهاز. بعد تسجيل الدخول، شغّل sudo pfctl -sr للتحقق من القواعد. اتصل وفصل VPN؛ يجب أن تعمل الإنترنت بشكل متسق (دائماً عبر VPN فقط).
الخطوة 6: ضبط القواعد والسيناريوهات حسب البروتوكولات المختلفة
الهدف
التأكد من عمل مفتاح الإيقاف باعتمادية مع WireGuard وOpenVPN وIKEv2، مع مراعاة خصوصيات كل بروتوكول، المنافذ والصلاحيات الإضافية.
WireGuard
- اسمح فقط بـ UDP إلى IP الخادم والمنفذ 51820 على الواجهة الفيزيائية (مثل en0). هذا الحد الأدنى اللازم لإنشاء النفق.
- تأكد من ضبط AllowedIPs على 0.0.0.0/0, ::/0 لتوجيه كامل عبر utun.
- تحقق من وجود DNS ضمن النفق لتجنب التسريبات.
OpenVPN
- إذا كنت تستخدم UDP: اسمح بـ proto udp to IP port 1194 (أو المنفذ الخاص بك) على الواجهة الفيزيائية.
- إذا كنت تستخدم TCP 443: اسمح بـ proto tcp to IP port 443.
- تحقق من توجيهات DNS المدفوعة من الخادم؛ بديلًا، اضبط DNS يدويًا عندما يكون محول VPN نشطًا.
IKEv2
- اسمح بـ proto udp to IP port 500 وproto udp to IP port 4500 للحركة الصادرة.
- فعّل خيار «إرسال كل البيانات» في إعدادات IKEv2. بدون هذا الخيار، قد تتجاوز بعض الحركة النفق، ممّا يخلّ بمفتاح الإيقاف.
- تأكد أن DNS يمر عبر النفق.
نصيحة: إذا كنت تغير الشبكات بانتظام (منزل، مكتب، نقطة اتصال متنقلة)، راقب ما إذا كانت الواجهة الفيزيائية (en0، en1) تتغير. إذا كان الأمر كذلك، أضف قواعد سماح لكل واجهة أو استخدم قاعدة «group egress» للسماح بمرور حركة الخادم بغض النظر عن الواجهة.
النتيجة المتوقعة
قواعد PF دقيقة ومبسطة: تسمح فقط بإنشاء النفق إلى خادمك وكل الحركة داخل النفق. لا استثناءات غير ضرورية.
المشكلات المحتملة والحلول
- انقطاع الاتصال عند التبديل بين شبكات Wi-Fi. السبب: تغيير الواجهة الفيزيائية أو حجب الموفر للمنفذ. الحل: أضف قواعد للواجهة الجديدة؛ استخدم OpenVPN TCP 443 إذا لزم.
- عدم الوصول إلى الموارد الداخلية (مثلاً الطابعات أو NAS). السبب: المسارات وAllowedIPs. الحل: أضف الشبكات الفرعية الداخلية إلى AllowedIPs أو عيّن التوجيه على خادم VPN.
✅ تحقق: جرّب اتصال VPN مع أوامر ping وtraceroute لعناوين خارجية. افصل VPN وتأكد من عدم نجاح اتصالات جديدة وتوقف التدفقات النشطة.
الخطوة 7: قسم متقدم: أساسيات Network Extension API لمفتاح الإيقاف
الهدف
فهم كيف تسمح لك Network Extension API بتعيين معايير للتحكم بسلوك الحركة وفرض التوجيه الصارم عبر النفق. هذا القسم اختياري ويتطلب حساب مطور آبل.
ملاحظات مهمة
العمل مع Network Extension على macOS قد يحتاج اشتراك مطور آبل وتفعيل الصلاحيات (entitlements). بعض أنواع الموفر، خصوصًا مرشحات المحتوى (NEFilter)، تحتاج موافقة منفصلة من آبل. للاستخدام الشخصي والتجريب على جهازك، يمكنك بناء تطبيق مع Packet Tunnel Provider إذا لديك صلاحيات أساسية. هذا القسم للتعلم والتجريب فقط.
الفئات الرئيسية والسمات
- NEPacketTunnelProvider — نقطة الدخول لعميل VPN مخصص. هنا تبدأ النفق وتضبط إعدادات الشبكة.
- NEPacketTunnelNetworkSettings — ضمن هذا الكائن، حدد إعدادات IPv4/IPv6 وDNS والمسارات. السمات الرئيسية: includeAllNetworks = true وexcludeLocalNetworks = true لإجبار كل الحركة على المرور عبر النفق.
- NEVPNManager — يدير سياسة On-Demand ودورة حياة VPN في النظام (لـ IKEv2 وPacket Tunnel).
- NEDNSSettings — يعين DNS عبر النفق مع matchDomains = [""] لالتقاط كل طلبات DNS.
سير العمل الأدنى في Xcode
- أنشئ مشروع تطبيق macOS جديد في Xcode. أضف هدف Network Extension من نوع Packet Tunnel Provider.
- فعل الصلاحيات مثل «VPN شخصي». تأكد من إضافة Network Extensions مع الموفر المطلوب في Signing & Capabilities.
- في كود Packet Tunnel Provider، أنشئ NEPacketTunnelNetworkSettings أثناء الإعداد. حدد ipv4Settings مع عنوان النفق (مثلاً 10.14.0.2/32) والمسارات الافتراضية (0.0.0.0/0). اضبط includeAllNetworks = true وexcludeLocalNetworks = true.
- أضف NEDNSSettings مع DNS داخل النفق وmatchDomains = [""] لتمرير كل DNS عبر النفق.
- احفظ سياسة On-Demand باستخدام NEVPNManager، واضبط قواعد مثل «الاتصال» على كل الشبكات عدا SSID موثوقة، إن وجدت. لمفتاح إيقاف، من الأفضل عدم استثناء أي شبكة.
- ابنِ وأطلق التطبيق في الوضع المحلي، مع تثبيت إعداد VPN في النظام. أكد ظهور مطالبات تثبيت الملف التعريفي إن ظهرت.
نصيحة: إذا كان هدفك استخدام شخصي (ليس للنشر في متجر التطبيقات)، احتفظ بالمشروع والـ bundle ID تحت حسابك في Apple ID. هذا يُبسط التثبيت وإدارة الملف التعريفي على Mac.
النتيجة المتوقعة
تحصل على عميل مخصص وظيفي بسيط يوجّه كل الحركة وDNS عبر النفق بشكل افتراضي. مفتاح الإيقاف على النظام يبقى مُدارًا بواسطة PF كما أعددته سابقًا. معًا، يوفر هذا حماية مزدوجة.
المشكلات المحتملة والحلول
- الصلاحية مفقودة. الحل: تحقق من اشتراك مطور آبل وأضف الصلاحيات اللازمة في Xcode.
- الملف التعريفي لا يُثبت. الحل: راجع سجلات الكونسول، التوقيع، وتأكد من أحقية التطبيق لإدارة VPN.
- تعارض مع عميل موجود. الحل: لا تشغل العملاء النظامي والمخصص معًا لنفس النفق.
✅ تحقق: يظهر ملف تعريف VPN في إعدادات الشبكة على macOS. عند الاتصال، تمر كل المسارات عبر النفق، وكذلك DNS. عند إيقاف العميل، يحافظ PF على حظر الحركة.
الخطوة 8: اختبار شامل: الحركة، DNS، الانقطاعات
الهدف
تحقق من أن مفتاح الإيقاف قوي: عدم وجود اتصالات صادرة تمر دون VPN، لا تسريبات DNS، وحجب الإنترنت فورًا عند فشل النفق.
خطة الاختبار
- اختبار التوجيه: مع VPN نشط، شغّل curl https://ifconfig.me وسجل IP. افصل VPN وتأكد من فشل الطلب (محجوب بـ PF).
- اختبار DNS: مع VPN نشط، شغّل scutil --dns وتحقق أن المُفسر هو عنوان النفق. نفذ nslookup example.com وراقب الخادم المستجيب. عند قطع VPN تحقق أن الحل محجوب.
- اختبار الانقطاع: مع VPN متصل، قم بإنهاء عملية العميل أو ابدل شبكات Wi-Fi، وتأكد أن الإنترنت لا يعود حتى يعاد الاتصال بـVPN.
- اختبار وقت الاسترداد: قس الثواني اللازمة لإعادة الاتصال عند تغيير الشبكة. تحقق أن PF يحجب الحركة خلال هذا الوقت.
- اختبار التطبيقات: افتح متصفح، مسنجر، مشغل وسائط؛ تأكد أنهم يعملون فقط مع اتصال VPN.
نصيحة: للتشخيص العميق، استخدم tcpdump على الواجهة الفيزيائية: sudo tcpdump -i en0 not port 51820 (لـ WireGuard). مع ضبط PF الصحيح، لن ترى تسرب حركة بيانات المستخدم.
النتيجة المتوقعة
في كل السيناريوهات، لا تحدث تسريبات حركة أو DNS عندما يكون VPN متوقفًا. عند استعادة النفق، تستعيد التطبيقات الوصول فورًا.
المشكلات المحتملة والحلول
- بعض خدمات النظام لا تزال تصل الشبكة. السبب: استثناء PF مفقود. الحل: تحقق من sudo pfctl -vvsr وتأكد من عدم وجود قواعد سماح غير متوقعة، خصوصًا من تطبيقات الطرف الثالث.
- تأخيرات في إعادة الاتصال. الحل: فعل On-Demand للعميل لاستجابة أسرع لتغير الشبكة، وفّر قواعد PF لأقل حد ممكن.
✅ تحقق: الخلاصة: لا حركة بدون VPN، وظائف كاملة مع VPN، DNS دائمًا عبر النفق، بلا تسرب على الانقطاع.
التحقق من النتيجة
قائمة التحقق
- تم تثبيت وتكوين عميل VPN (WireGuard، OpenVPN، أو IKEv2).
- استوردت الإعداد الصحيح مع IP الخادم والمنفذ المعروف.
- تم توجيه DNS عبر النفق وتفعيل الاتصال التلقائي (On-Demand).
- تم إنشاء مرساة PF وربطها في /etc/pf.conf.
- PF مفعّل والقواعد نشطة بعد إعادة التشغيل.
- الإنترنت يعمل فقط عند تفعيل VPN.
- اختبارات الانقطاع وتسرب DNS ناجحة.
كيفية الاختبار
- قم بثلاث دورات: VPN يعمل—افحص IP وDNS؛ VPN مطفأ—لا اتصالات؛ إعادة اتصال VPN—يعود الوصول.
- جرّب شبكات Wi-Fi وEthernet مختلفة.
- راجع سجلات PF: sudo pfctl -vvsr و sudo pfctl -vvss (الحالات).
معايير النجاح
- صفر اتصالات شبكية بدون VPN (باستثناء IPs والمنافذ المسموحة).
- لا استجابات DNS بدون VPN؛ حل مستقر من خلال النفق عند التشغيل.
- استعادة سريعة لتطبيقات بعد إعادة الاتصال بVPN.
المشاكل الشائعة والحلول
- المشكلة: الإنترنت لا يعمل حتى مع تفعيل VPN. السبب: utun خاطئ في قواعد PF. الحل: حدد utun النشط عبر ifconfig بعد الاتصال وأضف pass quick on utunX إلى المرساة.
- المشكلة: فشل اتصال VPN. السبب: PF يحجب حركة الخادم. الحل: أضف قاعدة pass out quick on enX proto udp/tcp to IP port NNNN دقيقة للبروتوكول المستخدم.
- المشكلة: تسريب DNS. السبب: DNS لا يمر عبر النفق. الحل: أضف DNS إلى إعداد WireGuard؛ في OpenVPN استعمل DNS المدفوع أو المعيّن في محول VPN.
- المشكلة: تعطيل PF بعد تحديث النظام. السبب: إعادة تعيين النظام للخدمات. الحل: شغّل sudo pfctl -e وأعد تحميل الإعداد؛ تحقق من نشاط LaunchAgent.
- المشكلة: بعض التطبيقات تتجاوز VPN. السبب: استثناءات في التوجيه. الحل: تحقق من AllowedIPs، تجنب تقسيم النفق، واستعمل 0.0.0.0/0 و ::/0.
- المشكلة: لا يمكنك بناء مثال Network Extension. السبب: صلاحيات مفقودة. الحل: اشترك في Apple Developer، وفعل القدرات في مشروع Xcode.
- المشكلة: انقطاعات عند التبديل بين شبكات Wi-Fi. السبب: حجب المنفذ أو البروتوكول من المزود الجديد. الحل: استخدم OpenVPN TCP 443 أو احتفظ بإعداد احتياطي.
ميزات إضافية
إعدادات PF المتقدمة
- استخدم جداول المتغيرات: أنشئ جدولاً لعناوين IP؛ اسمح بقاعدة واحدة لتسهيل تحديث IP لاحقًا.
- فعّل التسجيل: سجّل الحجب لتحليل لاحق عبر Console.app أو tcpdump -n -e -ttt -i pflog0.
- دقة عالية: إذا تستخدم بروتوكولات متعددة، فصلها في مراسٍ مختلفة وحملها ديناميكيًا.
تحسين العميل
- في WireGuard، اضبط MTU (مثلاً 1420–1440) لتجنب التجزئة.
- في OpenVPN، فعل tls-crypt وشفرة قوية لأمان أفضل.
- في IKEv2، استخدم مجموعات التشفير الحديثة وPFS إذا كان مدعومًا من الخادم.
ما يمكنك فعله أيضًا
- MDM والملفات التعريفية: إذا تدير أجهزة الشركة، وزّع ملفات تعريفية مُدارة مع سياسات On-Demand للتحكم في الأسطول.
- سيناريوهات النسخ الاحتياطي: جهز ملف VPN ثانوي على منفذ أو بروتوكول مختلف للشبكات التي تفرض تصفية صارمة.
- المراقبة: أعد إشعارات عند انقطاع النفق عبر أحداث النظام أو سكربتات تراقب حالة الواجهة وتكتب في سجل محلي.
نصيحة: إذا كنت تسافر كثيرًا وتواجه شبكات ضيوف، احتفظ بملفين أو ثلاثة بإعدادات مختلفة منافذ وبروتوكولات. هذا يساعد في الحفاظ على وصول VPN تحت قيود متعددة.
الأسئلة الشائعة
- هل يمكنني إنشاء مفتاح إيقاف بدون PF؟ نعم، بعض العملاء لديهم مفاتيح إيقاف مدمجة، لكنها لا توفر حماية على مستوى النظام مثل PF.
- هل أحتاج اسم نطاق بدل IP؟ ليس بالضرورة. استخدام IP في PF أبسط وأكثر موثوقية. الأسماء تساعد في التوزيع وتغييرات العنوان لكن تتطلب معالجة استثناءات DNS بعناية.
- كيف أجد utun المناسب؟ اتصل بـVPN وشغل ifconfig. الواجهة utun النشطة مع إحصائيات غير صفرية هي النفق.
- هل يمكنني استخدام IPv6؟ نعم، أضف ::/0 في المسارات وتأكد من دعم الخادم IPv6. قواعد PF لـ IPv6 مشابهة لكن راقب البروتوكولات والعناوين.
- ماذا إن لم أكن ضمن Apple Developer؟ لا مشكلة، مفتاح الإيقاف الرئيسي مع PF يعمل بدون Network Extension، والقسم المتقدم اختياري.
- هل يجب أن يبقى PF مفعل دائمًا؟ نعم إذا أردت مفتاح إيقاف دائم. عطل PF مؤقتًا فقط إذا كنت تعرف المخاطر.
- كيف أُحدّث الإعدادات بأمان؟ افصل VPN، حدّث الإعداد، تحقق من صحة كتابة PF، اتصل VPN، وأعد تحميل PF. احتفظ دومًا بـIP ومنافذ الخادم.
- هل ستعمل الشبكات المحلية (طابعات، NAS)؟ افتراضيًا لا، إذا كان كل المرور عبر النفق. أضف استثناءات للشبكات الداخلية أو فكر في توجيه مجزأ مع العلم بالمخاطر.
- كيف أفحص تسريبات WebRTC؟ عطّل WebRTC في المتصفح أو استخدم ملحقات. الأهم هو الحفاظ على مفتاح إيقاف النظام مع مسارات كاملة.
- هل يمكنني أتمتة تبديل الملفات التعريفية؟ نعم، استخدم سكربتات أو ميزات العملاء (WireGuard CLI)، مع إبقاء PF كما هو إذا كانت عناوين الخوادم موجودة في الجداول المسموحة.
الخاتمة
لقد أكملت الرحلة كاملة: اخترت بروتوكولًا وعميلًا، استوردت الإعداد، ضبطت DNS وOn-Demand، فعلت مفتاح إيقاف النظام عبر PF، أتممت الأتمتة، واختبرت سيناريوهات متعددة. النتيجة إعداد موثوق حيث يمر تدفق بياناتك فقط عبر VPN ويُحجب بالكامل على مستوى النظام إذا تعطل الاتصال.
يمكنك بعد ذلك تعديل الإعدادات لخوادم وبروتوكولات متعددة، تطبيق جداول PF، التعمق في Network Extension API لعملاء مخصصين، أو استخدام ملفات التعريف المُدارة في بيئات الشركات. مع الإعداد الصحيح، ستحصل على صلابة عالية، توقع دقيق، أمان واضح، وتشخيص سهل عبر سجلات PF.
نصيحة: راجع قواعدك دوريًا، خصوصًا بعد تحديثات macOS، وتأكد أن السلوك لم يتغير. سكربت إعادة تحميل PF وقائمة التحقق «التحقق من النتيجة» يساعدان في ضمان استمرار عمل كل شيء على النحو المطلوب.
⚠️ تحذير: تجنب إضافة استثناءات PF غير ضرورية «تحسبًا». كلما كانت القائمة المسموحة أقصر وأدق، كان مفتاح الإيقاف أقوى وأكثر موثوقية، وأقل المفاجآت عند التبديل بين الشبكات.