المكلفون بتشغيل المُرحّلات

إننا نسعى إلى أن يكون تجهيز المُرحّل تور سهلا وعمليا:

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

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

راجع portforward.com للحصول على الإرشادات حول كيفية إعادة التوجيه باستخدام جهاز NAT أو جهاز التوجيه.

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

إليك أيضا مثال على كيفية القيام بذلك على نظام جْنو-لينَكْسْ إذا كنت تستخدم iptables:

/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 9001 -j ACCEPT

قد يلزمك تغيير "eth0" إذا كان لديك واجهة خارجية مختلفة (تلك المتصلة بالانترنت). من المحتمل أن يكون لديك واحد فقط (باستثناء عنوان الاسترجاع Loopback) لذلك لا ينبغي أن يكون من الصعب للغاية معرفة ذلك.

لماذا تختلف الحمولة على المُرحّلات

يدير تور سعة القناة عبر الشبكة بالكامل. إن يقوم بعمل معقول بالنسبة لمعظم المُرحّلات. لكن أهداف تور تختلف عن بروتوكولات مثل بِتْ-تورَنْتْ. يريد تور صفحات الانترنت ذات زمن كمون منخفض، الأمر الذي يتطلب اتصالات سريعة بهامش محدد. يريد بِتْ-تورَنْتْ تنزيلات بالجملة، الأمر الذي يتطلب استخدام سعة القناة عن آخرها.

نحن نعمل على ماسح جديد لسعة القناة, وهو أسهل في الفهم والصيانة. سيكون لديها تشخيصات للمُرحّلات التي لا يتم قياسها، والمُرحّلات ذات القياسات المنخفضة.

لماذا يحتاج تور إلى ماسحات (scanners) على سعة القناة؟

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

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

ما هي الحمولة العادية على المُرحّل؟

من الطبيعي أن يتم تحميل معظم المُرحّلات عند 30%-80% من قدرتها. هذا مفيد للعملاء: المُرحّل المُحمَّل عليه كثيرا يكون لديه زمن كمون مرتفع. (نريد مُرحّلات كافية بحيث يتم تحميل كل مُرحّل بنسبة 10٪. عندها سيكون تور تقريبا بنفس سرعة الانترنت المعتاد).

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

معرفة ما الذي يحد المُرحّل

الكثير من الأشياء يمكن أن تبطئ المُرحّل. إليك كيفية تعقبها.

حدود النظام

  • تحقق من استخدام ذاكرة الوصول العشوائي ووحدة المعالجة المركزية والمقبس أو واصف الملف على مُرحّلك

يقوم تور بتسجيل بعض هذه الأشياء عندما يبدأ. يمكن مشاهدة أشياء أخرى باستخدام الأداة top أو أدوات أخرى مماثلة.

حدود المزود

  • تحقق من حركة المرور عبر الانترنت (سعة القناة، زمن الوصول) من مزود مُرحّلك إلى المُرحّلات الأخرى. كانت المُرحّلات التي تمر عبر كومْكاسْتْ (Comcast) بطيئة في بعض الأحيان. عادة ما تكون المُرحّلات خارج أمريكا الشمالية وأوروبا الغربية أبطأ.

حدود شبكة تور

يمكن تقييد سعة قناة المُرحّل من خلال سعة القناة المرصودة لذات المُرحّل، أو من خلال قياس سعة القناة للسلطات الدليلية. فيما يلي كيفية معرفة القياس الذي يحد من مُرحّلك:

  • تحقق من كل التصويتات الخاصة بمُرحّلك على صحة الإجماع (الصفحة كبيرة), وتحقق من الوسيط. إذا لم يتم وسم مُرحّلك بأنه يشتغل من قبل بعض سلطات الدليل:
    • هل لديه عنوان IP (إما الإصدار 4 أو 6) خاطئ؟
    • ألا يمكن الوصول إلى عنوان IP (إما الإصدار 4 أو 6) الخاص به انطلاقا من بعض الشبكات؟
    • هل هناك أكثر من مُرحّليْن على عنوان IP (الإصدار 4) الخاص به؟

خلاف ذلك، تحقق من سعة القناة المرصودة ومعدل سعة القناة (الحَدّي) لمُرحّلك. ابحث عن مُرحّلك في القياسات. ثم مرر الفأرة فوق عنوان سعة القناة لمشاهدة سعة القناة الملحوظة ومعدل سعة القناة للمُرحّل.

إليك المزيد من التفاصيل وبعض الأمثلة: انخفاض في وزن الإجماع و زيادة سرعة مُرحّل الخروج.

كيف تصلحها

أصغر هذه الأرقام هو الحد من سعة القناة المخصصة للمُرحّل.

  • إذا كان هذا هو معدل سعة القناة، فقم بزيادة BandwidthRate/Burst أو RelayBandwidthRate/Burst في torrc الخاص بك.
  • إذا كانت هذه هي سعة القناة المرصودة، فلن يطلب المُرحّل مزيدا من سعة القناة حتى يرى نفسه يزداد سرعة. تحتاج إلى معرفة سبب بطئها.
  • إذا كان يتم قياس متوسط سعة القناة، فإن المُرحّل يبدو بطيئا من وجهة نظر سلطات سعة القناة. تحتاج إلى معرفة سبب بطء قياسها.

القيام بالقياسات بنفسك لمُرحّلك

إذا كان مُرحّلك يعتقد أنه بطيء، أو تعتقد سلطات سعة القناة أنه بطيء، يمكنك اختبار سعة القناة بنفسك:

  • قم بإجراء اختبار باستخدام تور لمعرفة مدى سرعة وصول تور إلى شبكتك

    للقيام بذلك، تحتاج إلى تضبيط عميل تور لاستخدام المرحل الخاص بك كمدخل. إذا كان المرحل الخاص بك يحتوي على علامة Guard فقط، فقم بتعيين EntryNodes باستخدام بصمة المرحل الخاصة بك في torrc. إذا لم يكن المرحل الخاص بك يحتوي على علامة Guard أو كان يحتوي على علامتي Guard وExit، فلا يمكنك تعيين المرحل الخاص بك كعقدة إدخال (راجع https://gitlab.torproject.org/tpo/core/ tor/-/issues/22204)، ولكن يمكنك تعيينه كجسر، حتى لو لم يكن جسرًا. لتعيين مُرحّلك كجسر، أضف إلى torrc الخاص بك:

    Bridge <ip>:<port>
    UseBridge 1
    

    ثم قم نزّل ملف كبير باستخدام SocksPort كوكيل لsocks. لهذا، يمكنك استخدام curl، على سبيل المثال:

    curl https://target/path --proxy socks5h://<user>:<password>@127.0.0.1:<socks-port>
    

    استخدام مستخدم/كلمة سر مختلفة يضمن دوائر مختلفة. يمكنك استخدام $RANDOM.

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

    بدلاً من ذلك، يمكنك تشغيل relay_bw لاختبار مُرحّلك باستخدام دوائر ذات قفزتين، بطريقة مشابهة لـsbws يفعل ذلك.

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

هناك خياران يمكنك إضافتهما إلى الملف torrc:

BandwidthRate هو الحد الأقصى لسعة القناة طويل المدى المسموح به (بايْت في الثانية). على سبيل المثال، قد ترغب في اختيار "BandwidthRate 10 MBytes" لـ 10 ميغابايت في الثانية (اتصال سريع)، أو "BandwidthRate 500 KBytes" لـ 500 كيلو بايت في الثانية (اتصال منزلي مناسب). الحد الأدنى لإعداد معدل نقل البيانات هو 75 كيلو بايت في الثانية.

BandwidthBurst عبارة عن تجمُّع من البايْتات المستخدمة لتلبية الطلبات خلال فترات قصيرة من حركة المرور أعلى من BandwidthRate ولكنها تحافظ على المتوسط على مدى فترة طويلة لـ BandwidthRate. يفرض المعدل المنخفض لكن باندفاع مرتفع متوسطا طويل الأمد، مع استمرار السماح بمزيد من حركة المرور خلال أوقات الذروة، إذا لم يتم بلوغ ذلك المتوسط مؤخرا. مثلا، إذا اخترت"BandwidthBurst 500 KBytes" واستخدمتها كذلك لـ BandwidthRate، فلن تستخدم أبدا أكثر من 500 كيلوبايت في الثانية ؛ ولكن إذا اخترت BandwidthBurst أعلى (مثل 5 ميغا بايت)، فسوف يسمح بمرور المزيد من البايْتات حتى يصبح التجمُّع (pool) فارغا.

إذا كان لديك اتصال غير متماثل (التحميل أقل من التنزيل) مثل جهاز المُودِمْ المنزلي، فيجب عليك ضبط BandwidthRate لكي تكون أقل من سعة القناة الدنيا (عادةً ما تكون هذه هي سعة القناة للتحميل). خلاف ذلك، قد تضيع منك حزم كثيرة خلال فترات الاستخدام لأقصى ما تتحمله سعة القناة عندك - قد تحتاج إلى تجربة القيم التي تجعل اتصالك مريحا. ثم اضبط BandwidthBurst بنفس قيمة BandwidthRate.

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

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

لاحظ أن وحدات BandwidthRate وBandwidthBurst هي بالـ بايْتْ وليس بالـ بِتْ.

بكلمات بسيطة، تعمل على النحو التالي:

  • يوجد ملف رئيس لهوية ed25519 السرية باسم "ed25519_master_id_secret_key". هذا هو الأهم، لذا تأكد من الاحتفاظ بنسخة احتياطية في مكان آمن - إن الملف حساس ويجب حمايته. يمكن أن يقوم تور بتعميته نيابة عنك إذا قمت بتوليده يدويا، ثم أدخل كلمة السر عند مطالبتك بذلك.
  • تم توليد مفتاح توقيع متوسط المدى باسم "ed25519 مفتاح التوقيع السري" ليستخدمه تور. أيضا، يتم توليد شهادة باسم "ed25519_signing_cert" موقعة بواسطة مفتاح السر للهوية الأساسية وتؤكد أن مفتاح التوقيع متوسط المدى صالح لفترة زمنية معينة. الصلاحية الافتراضية هي 30 يوما، ولكن يمكن تخصيص ذلك عن طريق تعيين"SigningKeyLifetime N days|weeks|months" في torrc.
  • يوجد أيضا مفتاح عمومي أساسي اسمه "ed25519_master_id_public_key", وهي الهوية الفعلية للمُرحّل المعلن عنه في الشبكة. هذا ليس حساسا، إذ يمكن حسابه بسهولة انطلاقا من ”ed5519_master_id_secret_key“.

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

هذه الميزة اختيارية، ولا تحتاج إلى استخدامها إلا إذا كنت تريد ذلك. إذا كنت تريد تشغيل مُرحّلك دون مراقبة لفترة أطول دون الحاجة إلى القيام يدويا بتجديد مفتاح التوقيع المتوسط المدى على أساس منتظم، فمن الأفضل ترك مفتاح سر الهوية الأساسي في DataDirectory/keys، فقط قم بإنشاء نسخة احتياطية في حال احتجت إلى إعادة تثبيته. إذا كنت ترغب في استخدام هذه الميزة، يمكنك الرجوع إلى دليلنا المُفصَّل حول هذا الموضوع.

إذا كان مُرحّلك جديدا نسبيا، فامنحه الوقت. يقرر تور أي المُرحّلات التي يستخدمها على أساس تجريبي، بناءً على التقارير من سلطات سعة القناة. تأخذ هذه السلطات قياسات سعة مُرحّلك، وبمرور الوقت، تُوجِّه المزيد من حركة المرور هناك حتى تصل إلى الحمولة الأمثل. يتم شرح دورة حياة المُرحّل الجديد بالتفصيل في منشور المدونة هذا. إذا كنت تشغل مُرحّلًا لفترة من الوقت وما زلت تواجه المشاكل، فحاول السؤال في قائمة tor-relays .

  • لا تستخدم الحزم الموجودة في مستودعات أوبُنتو. فقد لم يتم تحديثها بشكل موثوق. إذا كنت تستخدمها، فستفقد إصلاحات الاستقرار والأمان المهمة.
  • حدد إصدار أوبُنتو الخاص بك عن طريق تشغيل الأمر التالي:
     ‪$ lsb_release -c
    
  • كمستخدم ذو جميع الصلاحيات، أضف الأسطر التالية إلى ‎/etc/apt/sources.list. استبدل "version" بالإصدار الذي وجدته في الخطوة السابقة:
     deb https://deb.torproject.org/torproject.org version main
     deb-src https://deb.torproject.org/torproject.org version main
    
  • ثم أضف مفتاح gpg المستعمل لتوقيع الحزم عن طريق تنفيذ الأوامر التالية :
     ‪$ curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | sudo apt-key add -
    
  • قم بتشغيل الأوامر التالية لتثبيت تور والتحقق من توقيعاته:
     ‪$ sudo apt-get update
     ‪$ sudo apt-get install tor deb.torproject.org-keyring
    

عند البحث عن المُرحّل، نعرض نقطة كهرمانية بجوار كنية المُرحّل عندما يكون مُحمَّلا فوق طاقته. هذا يعني أنه تم تشغيل واحد أو أكثر من قياسات الحمولة التالية:

لاحظ أنه إذا وصل المُرحّل إلى حالة الحمولة الزائدة، فإننا نعرضه لمدة 72 ساعة بعدما تخف الحمولة عن ذلك المُرحّل.

إذا لاحظت أن مُرحّلك مُثقَل فوق طاقته، فيرجى:

  1. تفقد https://status.torproject.org/‎ للبحث عن أي مشاكل معروفة في فئة "شبكة تور".

  2. ضع في اعتبارك ضبط sysctl لنظامك للشبكة وللذاكرة ولمقدار الحمولة على وحدة المعالجة المركزية.

  3. ضع في اعتبارك تفعيلMetricsPort لفهم ما يحدث.

ضبط sysctl للشبكة والذاكرة والحمولة التي على وحدة المعالجة المركزية

استنفاد منافذ TCP

إذا واجهت استنفاد منافذ TCP، ففكر في توسيع نطاق مَنفذك المحلي. يمكنك فعل ذلك مع

# sysctl -w net.ipv4.ip_local_port_range="15000 64000"

أو

# echo 15000 64000 > /proc/sys/net/ipv4/ip_local_port_range

ضع في اعتبارك أن ضبط sysctl كما هو موضح ليس دائما وسيضيع عند إعادة التشغيل. تحتاج إلى إضافة التهيئة إلى ‎/etc/sysctl.conf أو إلى ملف في/etc/sysctl.d/لجعلها دائمة.

MetricsPort

لفهم سلامة مُرحّلات تور وشبكة تور، من الحيوي توفير مؤشرات الترحيل والوصول إليها. لقد تمت إضافة معلومات الحمولة الزائدة للمُرحّل إلى واصفات المُرحّل منذ الإصدار 0.4.6، ولكن لم يكن الأمر كذلك إلا بعد إصدار تور 0.4.7.1-alpha، إذ تم توفير واجهة لقياسات المُرحّل الأساسية: منفذ القياسات.

تفعيل MetricsPort

يوفر تور الوصول إلى منفذ المؤشرات عبر خيار تهيئة torrc يُسمى MetricsPort.

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

لنفترض أنك المستخدم الوحيد على الخادم الذي يقوم بتشغيل مُرحّل تور. يمكنك تفعيل منفذ المؤشرات بإضافة هذا إلى ملف torrc الخاص بك:

MetricsPort 127.0.0.1:9035
MetricsPortPolicy accept 127.0.0.1

وبعد ذلك ستتمكن من جلب القياسات بسهولة باستخدام:

# curl http://127.0.0.1:9035/metrics

والتي تكون بشكل افتراضي بتنسيق بروميثيوس.

ملاحظة: سيتمكن كل مستخدم على هذا الخادم من الوصول إلى مؤشرات الترحيل في المثال أعلاه. بشكل عام، ضع سياسة وصول صارمة للغاية باستخدام MetricsPortPolicyوفكر في استخدام ميزات جدار الحماية لأنظمة تشغيلك لأجل الدفاع المُعمَّق.

للحصول على شرح أكثر تفصيلاً حول MetricsPort و MetricsPortPolicy تفقد صفحة تور الرئيسة.

مخارج MetricsPort

فيما يلي مثال لما سينتجه تفعيل MetricsPort (لقد حذفنا أي مقاييس مرتبطة بالتحكم في الازدحام لأننا ما زلنا بحاجة إلى جعل تلك الواجهة أكثر استقرارا):

# HELP tor_relay_connections Total number of opened connections
# TYPE tor_relay_connections gauge
tor_relay_connections{type="OR listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="OR listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="OR listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="OR listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="OR",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="OR",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="OR",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="OR",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Exit",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Exit",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Exit",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Exit",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Socks listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Socks listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Socks listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Socks listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Socks",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Socks",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Socks",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Socks",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Directory listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Directory listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Directory listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Directory listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Directory",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Directory",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Directory",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Directory",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Control listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Control listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Control listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Control listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Control",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Control",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Control",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Control",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Transparent pf/netfilter listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Transparent pf/netfilter listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Transparent pf/netfilter listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Transparent pf/netfilter listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Transparent natd listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Transparent natd listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Transparent natd listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Transparent natd listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="DNS listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="DNS listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="DNS listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="DNS listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Extended OR",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Extended OR",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Extended OR",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Extended OR",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Extended OR listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Extended OR listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Extended OR listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Extended OR listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="HTTP tunnel listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="HTTP tunnel listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="HTTP tunnel listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="HTTP tunnel listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Metrics listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Metrics listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Metrics listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Metrics listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Metrics",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Metrics",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Metrics",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Metrics",direction="received",state="opened",family="ipv6"} 0
# HELP tor_relay_connections_total Total number of created/rejected connections
# TYPE tor_relay_connections_total counter
tor_relay_connections_total{type="OR listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="OR listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="OR listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="OR listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="OR listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="OR listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="OR",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="OR",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="OR",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="OR",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="OR",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="OR",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Exit",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Exit",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Exit",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Exit",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Exit",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Exit",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Socks listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Socks listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Socks listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Socks listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Socks listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Socks listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Socks",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Socks",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Socks",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Socks",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Socks",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Socks",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Directory listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Directory listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Directory listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Directory listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Directory listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Directory listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Directory",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Directory",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Directory",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Directory",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Directory",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Directory",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Control listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Control listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Control listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Control listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Control listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Control listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Control",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Control",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Control",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Control",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Control",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Control",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="DNS listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="DNS listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="DNS listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="DNS listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="DNS listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="DNS listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Metrics listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Metrics listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Metrics listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Metrics listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Metrics listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Metrics listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Metrics",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Metrics",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Metrics",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Metrics",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Metrics",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Metrics",direction="received",state="rejected",family="ipv6"} 0
# HELP tor_relay_flag Relay flags from consensus
# TYPE tor_relay_flag gauge
tor_relay_flag{type="Fast"} 0
tor_relay_flag{type="Exit"} 0
tor_relay_flag{type="Authority"} 0
tor_relay_flag{type="Stable"} 0
tor_relay_flag{type="HSDir"} 0
tor_relay_flag{type="Running"} 0
tor_relay_flag{type="V2Dir"} 0
tor_relay_flag{type="Sybil"} 0
tor_relay_flag{type="Guard"} 0
# HELP tor_relay_circuits_total Total number of circuits
# TYPE tor_relay_circuits_total gauge
tor_relay_circuits_total{state="opened"} 0
# HELP tor_relay_streams_total Total number of streams
# TYPE tor_relay_streams_total counter
tor_relay_streams_total{type="BEGIN"} 0
tor_relay_streams_total{type="BEGIN_DIR"} 0
tor_relay_streams_total{type="RESOLVE"} 0
# HELP tor_relay_traffic_bytes Traffic related counters
# TYPE tor_relay_traffic_bytes counter
tor_relay_traffic_bytes{direction="read"} 0
tor_relay_traffic_bytes{direction="written"} 0
# HELP tor_relay_dos_total Denial of Service defenses related counters
# TYPE tor_relay_dos_total counter
tor_relay_dos_total{type="circuit_rejected"} 0
tor_relay_dos_total{type="circuit_killed_max_cell"} 0
tor_relay_dos_total{type="circuit_killed_max_cell_outq"} 0
tor_relay_dos_total{type="marked_address"} 0
tor_relay_dos_total{type="marked_address_maxq"} 0
tor_relay_dos_total{type="conn_rejected"} 0
tor_relay_dos_total{type="concurrent_conn_rejected"} 0
tor_relay_dos_total{type="single_hop_refused"} 0
tor_relay_dos_total{type="introduce2_rejected"} 0
# HELP tor_relay_load_onionskins_total Total number of onionskins handled
# TYPE tor_relay_load_onionskins_total counter
tor_relay_load_onionskins_total{type="tap",action="processed"} 0
tor_relay_load_onionskins_total{type="tap",action="dropped"} 0
tor_relay_load_onionskins_total{type="fast",action="processed"} 0
tor_relay_load_onionskins_total{type="fast",action="dropped"} 0
tor_relay_load_onionskins_total{type="ntor",action="processed"} 0
tor_relay_load_onionskins_total{type="ntor",action="dropped"} 0
tor_relay_load_onionskins_total{type="ntor_v3",action="processed"} 0
tor_relay_load_onionskins_total{type="ntor_v3",action="dropped"} 0
# HELP tor_relay_exit_dns_query_total Total number of DNS queries done by this relay
# TYPE tor_relay_exit_dns_query_total counter
tor_relay_exit_dns_query_total 0
# HELP tor_relay_exit_dns_error_total Total number of DNS errors encountered by this relay
# TYPE tor_relay_exit_dns_error_total counter
tor_relay_exit_dns_error_total{reason="success"} 0
tor_relay_exit_dns_error_total{reason="format"} 0
tor_relay_exit_dns_error_total{reason="serverfailed"} 0
tor_relay_exit_dns_error_total{reason="notexist"} 0
tor_relay_exit_dns_error_total{reason="notimpl"} 0
tor_relay_exit_dns_error_total{reason="refused"} 0
tor_relay_exit_dns_error_total{reason="truncated"} 0
tor_relay_exit_dns_error_total{reason="unknown"} 0
tor_relay_exit_dns_error_total{reason="tor_timeout"} 0
tor_relay_exit_dns_error_total{reason="shutdown"} 0
tor_relay_exit_dns_error_total{reason="cancel"} 0
tor_relay_exit_dns_error_total{reason="nodata"} 0
# HELP tor_relay_load_oom_bytes_total Total number of bytes the OOM has freed by subsystem
# TYPE tor_relay_load_oom_bytes_total counter
tor_relay_load_oom_bytes_total{subsys="cell"} 0
tor_relay_load_oom_bytes_total{subsys="dns"} 0
tor_relay_load_oom_bytes_total{subsys="geoip"} 0
tor_relay_load_oom_bytes_total{subsys="hsdir"} 0
# HELP tor_relay_load_socket_total Total number of sockets
# TYPE tor_relay_load_socket_total gauge
tor_relay_load_socket_total{state="opened"} 0
tor_relay_load_socket_total 0
# HELP tor_relay_load_tcp_exhaustion_total Total number of times we ran out of TCP ports
# TYPE tor_relay_load_tcp_exhaustion_total counter
tor_relay_load_tcp_exhaustion_total 0
# HELP tor_relay_load_global_rate_limit_reached_total Total number of global connection bucket limit reached
# TYPE tor_relay_load_global_rate_limit_reached_total counter
tor_relay_load_global_rate_limit_reached_total{side="read"} 0
tor_relay_load_global_rate_limit_reached_total{side="write"} 0

دعنا نتعرف على ما تعنيه بعض هذه السطور في الواقع:

tor_relay_load_onionskins_total{type="ntor",action="dropped"} 0

عندما يبدأ المُرحّل برؤية "dropped"، يكون ذلك عادةً مشكلة في وحدة المعالجة المركزية أو في ذاكرة الوصول العشوائي.

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

عندما يعالج تور الطبقات، فإننا نستخدم ’تجمع سلاسل العمليات‘ (thread pool) ونعهد بكل هذا العمل إلى هذا التجمع. يمكن أن يبدأ هذا التجمع في إسقاط عمليات بسبب الضغط على الذاكرة أو على وحدة المعالجة المركزية وهذا سيؤدي إلى حالة من الحمولة الزائدة.

إذا كان خادمك يعمل بأقصى طاقته، فمن المحتمل أن يتم تشغيل هذا.

tor_relay_exit_dns_error_total{...}

يشير أي عداد في النطاق "* _dns_error_total" (باستثناء عداد الاستعلامات الناجحة) إلى مشكلة محتملة متعلقة بنظام أسماء النطاقات. ومع ذلك، فقد أدركنا خلال دورة الإصدار 0.4.7 أن أخطاء DNS مزعجة للغاية وتحتوي على الكثير من الإيجابيات المزيفة بحيث لا تكون مفيدة لأغراض الإبلاغ عن الحمولة الزائدة. لذلك لم نعد نستخدمها لهذا الغرض بدءا من الإصدارين 0.4.6.9 و 0.4.7.4 البدئي (alpha). ومع ذلك، ما زلنا نحتفظ بمؤشرات DNS حولنا لإعطاء مشغل المُرحّل نظرة ثاقبة عما يجري مع المُرحّل الخاص بهم.

لا تنطبق مشكلات وأخطاء مهلة DNS إلا على عقد الخروج.

tor_relay_load_oom_bytes_total{...}

يشير استدعاء نفاد الذاكرة (Out-Of-Memory) إلى وجود مشكلة في ذاكرة الوصول العشوائي. قد يحتاج المُرحّل إلى مزيد من ذاكرة الوصول العشوائي أو أنه يتسبب في تسريب الذاكرة. إذا لاحظت أن عملية تور تتسبب في ضياع للذاكرة، فيرجى الإبلاغ عن المشكلة إما عبر Tor gitLab أو من خلا إرسال بريد إلكتروني إلى القائمة البريدية لـ tor-relays.

لدى تور معالج OOM الخاص به ويتم استدعاؤه عندما يتم الوصول إلى 75٪ من إجمالي الذاكرة التي يعتقد تور أنها متوفرة. وبالتالي، لنفترض أن تور يعتقد أنه يمكنه استخدام 2 غيغابايت من مجموع الذاكرة، فحالما يصل إلى 1.5 غيغابايت من استخدام الذاكرة، سيبدأ في تحرير الذاكرة. هذا يعتبر حالة الحمولة الزائدة.

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

    if RAM >= 8GB {
      memory = RAM * 40%
    } else {
      memory = RAM * 75%
    }
    /* Capped. */
    memory = min(memory, 8GB) -> [8GB on 64bit and 2GB on 32bit)
    /* Minimum value. */
    memory = max(250MB, memory)

لتجنب حالة التحميل الزائد، نوصي بتشغيل مُرحّل يزيد عن 2 غيغابايت من ذاكرة الوصول العشوائي على المعالج ذو 64 بِتْ. يُنصح بسعة 4 جيجا بايت، على الرغم من أنه لا يضر بالطبع إذا أضفت المزيد من ذاكرة الوصول العشوائي (RAM) إذا استطعت.

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

tor_relay_load_socket_total

إذا كان عدد المقابس المفتوحة قريبا من إجمالي المقابس المتاحة أو كان يساويها، فهذا يشير إلى أن المُرحّل استنفذ جميع المقابس. الحل هو زيادة ulimit -n لعملية تور.

tor_relay_load_tcp_exhaustion_total

تشير هذه الخطوط إلى نفاذ المُرحّل من منافذ TCP.

حاول ضبط sysctl كما هو مُوضَّح أعلاه.

tor_relay_load_global_rate_limit_reached_total

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

إذا كان المُرحّل لا يزال مُحمَّلا بشكل زائد ولا تعرف السبب، فيرجى الاتصال بـ network-report@torproject.org. يمكنك تعمية بريدك الإلكتروني باستخدام مفتاح OpenPGP لتقرير الشبكة.

عظيم. إذا كنت ترغب في تشغيل عدة مُرحّلات للتبرع بالمزيد للشبكة، فنحن سعداء بذلك. لكن من فضلك لا تشغِّل أكثر من بضع عشرات على نفس الشبكة، لأن أحد أهداف شبكة تور هو التشتت والتنوع.

إذا قررت تشغيل أكثر من مُرحّل واحد، فالرجاء تعيين خيار التهيئة "MyFamily" في الملف torrc لكل مُرحّل، مع سرد جميع المُرحّلات (المفصولة بفواصل) التي تقع تحت سيطرتك:

MyFamily $fingerprint1,$fingerprint2,$fingerprint3

حيث أن كل بصمة هي بصمة رقمية للهوية مكونة من 40 حرفا (بدون فراغات).

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

لدى تور دعم جزئي لـ IPv6 ونشجع كل مكلف بتشغيل مُرحّل ما على تفعيل وظيفة IPv6 في ملفات التهيئة torrc عند توفر اتصال IPv6. في الوقت الحالي، سيطلب تور عناوين IPv4 على المُرحّلات، لا يمكنك تشغيل مُرحّل تور على مضيف له عناوين IPv6 فقط.

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

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

هناك بعض الحالات التي لا يبدو فيها أنها مفيدة: إذا تمكن المهاجم من مشاهدة كل حركة المرور الواردة والصادرة، فمن السهل عليه معرفة الاتصالات التي تم ترحيلها والتي بدأت من عندك. (في هذه الحالة، لا يزالون لا يعرفون وجهاتك إلا إذا كانوا يشاهدونها أيضا، لكنك لست أفضل حالا مما لو كنت عميلا عاديا.)

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

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

يخمن تور عنوان IP الخاص به عن طريق الطلب من الحاسوب اسم المضيف الخاص به، ثم يستنتج عنوان IP انطلاقا من اسم المضيف هذا. غالبا ما يكون لدى الناس إدخالات قديمة في الملف ‎/etc/hosts الخاص بهم، حيث تشير إلى عناوين IP القديمة.

If that doesn't fix it, you should use the "Address" config option to specify the IP address you want it to pick. If your computer is behind a NAT and it only has an internal IP address, see the following Support entry on dynamic IP addresses.

أيضا، إذا كان لديك العديد من العناوين، فقد ترغب أيضا في ضبط "OutboundBindAddress" بحيث تأتي الاتصالات الخارجية من عنوان IP الذي تنوي تقديمه إلى الجميع.

تتيح لك الخيارات المحاسبية في ملف torrc بتحديد الحد الأقصى من وحدات البايت التي يستخدمها المُرحّل لفترة زمنية معينة.

    AccountingStart day week month [day] HH:MM

هذا يحدد متى يجب إعادة تعيين المحاسبة. مثلا، لتهيئة إجمالي عدد البايْتات التي يتم تقديمها لمدة أسبوع (تتم إعادة التعيين كل يوم أربعاء، على الساعة 10:00 صباحا)، يمكنك استخدام:

    AccountingStart week 3 10:00
    AccountingMax 500 GBytes

يحدد هذا الحد الأقصى من البيانات التي سيرسلها مُرحّلك خلال فترة محاسبية، والحد الأقصى لكمية البيانات التي سيتلقاها مُرحّلك خلال فترة محاسبية. عندما تتم إعادة تعيين فترة المحاسبة (من AccountingStart)، حينها تتم إعادة تعيين العدادات AccountingMax إلى 0.

مثال: لنفترض أنك تريد السماح بحركة مرور تبلغ 50 غيغابايت يوميا في كل اتجاه، ويجب إعادة ضبط المحاسبة ظُهرا كل يوم:

    AccountingStart day 12:00
    AccountingMax 50 GBytes

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

إذا كان لديك مقدار ضئيل فقط من سعة القناة للتبرع بها مقارنة بسرعة الاتصال لديك، فإننا نوصيك باستخدام المحاسبة اليومية، حتى لا ينتهي بك الأمر باستخدام حصتك الشهرية بالكامل في اليوم الأول. ما عليك سوى قسمة المبلغ الشهري على 30. يمكنك أيضا التفكير في تحديد السعر لتوزيع فائدتك على مدار اليوم: إذا كنت ترغب في عرض X جيجابايت في الاتجاهين، فيمكنك تعيين RelayBandwidthRate إلى 20*X كيلوبايت. على سبيل المثال، إذا كان لديك 50 غيغابايت لمنحها في كل اتجاه، فيمكنك تعيين RelayBandwidthRate لتصبح 1000 كيلوبايت: بهذه الطريقة سيكون مُرحّلك مفيدا دائما، على الأقل لنصف كل يوم.

    AccountingStart day 0:00
    AccountingMax 50 GBytes
    RelayBandwidthRate 1000 KBytes
    ‪RelayBandwidthBurst 5000 KBytes # تسمح باندفاعات أعلى ولكنها تحافظ على المتوسط‬

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

يجب السماح بجميع الاتصالات الصادرة، بحيث يمكن لكل مُرحّل التواصل مع كل مُرحّل آخر.

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

يعزز تور الوصول المجاني إلى الشبكة دون تداخلات. يجب ألا تقوم مُرحّلات الخروج بتصفية حركة المرور التي تمر عبرها نحو الانترنت. ستحصل مُرحّلات الخروج التي تم العثور عليها لتصفية حركة المرور على علامة BadExit بمجرد اكتشافها.

إنك على حق، في معظم الحالات، في مُرحّل تور الخاص بك يكون البايْت الداخل يعني البايْت الخارج، والعكس صحيح. لكن هناك بعض الاستثناءات:

إذا فتحت DirPort الخاص بك، فسيطلب منك عملاء تور نسخة من الدليل. الطلب الذي يرسلونه (HTTP GET) صغير جدا، وتكون الاستجابة أحيانا كبيرة جدا. ربما يفسر هذا الفرق الكبير بين عدد بايْتات "الكتابة" وعدد بايْتات "القراءة".

يظهر استثناء ثانوي آخر عندما تعمل كعقدة خروج، وتقرأ بضع بايْتات من اتصال الخروج مثلا، المراسلة فورية أو الاتصال بـ ssh) ثم تدمجها في خلية كاملة بحجم 512 بايْت للنقل عبر شبكة تور .

نحن نبحث عن أشخاص لديهم اتصالات فعالة بالانترنت، ولديهم عرض سعة قناة لا تقل عن 10 ميجابِتْ/ثانية (Mbps) في كل اتجاه. إذا كان ذلك ينطبق على حالتك، فيُرجى التفكير في تشغيل مُرحّل تور.

حتى إذا لم يكن لديك ما لا يقل عن 10 ميجابِتْ/ثانية من سعة القناة المتاحة، فلا يزال بإمكانك مساعدة شبكة تور من خلال تشغيل جسر تور يدعم obfs4. في هذه الحالة، يجب أن يكون لديك على الأقل 1 ميجابِتْ/ثانية من سعة القناة المتاحة.

رائع. هذا تحديدا سبب تطبيقنا لسياسات الخروج.

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

تسمح سياسة الخروج الافتراضية بالوصول إلى العديد من الخدمات الشائعة (مثل تصفح الشبكة العنكبوتية)، ولكنها تقيد بعضها بسبب إمكانية إساءة الاستخدام (مثل البريد) والبعض الآخر نظرًا لأن شبكة تور لا يمكنها معالجة الحمولات (مثل المنافذ الافتراضية لمشاركة الملفات). يمكنك تغيير سياسة الخروج الخاصة بك عن طريق تحرير ملف torrc. إذا كنت تريد تجنب معظم إساءات الاستخدام المحتملة (إن لم تكن كلها)، فاضبطها على "reject *:*‎". يعني هذا الإعداد أنه سيتم استخدام مُرحّلك لنقل حركة المرور داخل شبكة تور، ولكن ليس للاتصالات بالمواقع الإلكترونية الخارجية أو الخدمات الأخرى.

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

عند ترقية مُرحّل تور الخاص بك، أو عند نقله إلى حاسوب مختلف، تأكد من الاحتفاظ بنفس مفاتيح الهوية (المُخزَّنة في keys/ed25519_master_id_secret_key وkeys/secret_id_key في مجلدك DataDirectory).

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

من أجل التبسيط، مجرد النسخ عبر DataDirectory بأكمله يجب أن يعمل أيضًا.

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

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

بدلا من ذلك، فكر في تشغيل مُرحّل الخروج الخاص بك في منشأة تجارية تدعم تور. احصل على عنوان IP منفصل لمُرحّل الخروج الخاص بك، ولا توجهْ حركة مرورك من خلاله. بالطبع، يجب عليك تجنب الاحتفاظ بأي معلومات حساسة أو شخصية على الحاسوب الذي يستضيف مُرحّل الخروج الخاص بك.

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

  • تم ضبط ulimit -n على رقم مرتفع، حتى يتمكن تور من إبقاء جميع الاتصالات التي يحتاجها مفتوحة.
  • تقوم الحزمة بإنشاء مستخدم منفصل واستخدامه، لذلك لا تحتاج إلى تشغيل تور كمستخدم خاص بك.
  • تتضمن الحزمة برنامج نصي init بحيث يعمل تور عند التمهيد.
  • يمكن لـتور الارتباط بالمنافذ ذات الأرقام المنخفضة، ثم إسقاط الامتيازات.

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

السبب الآخر هو أن المجموعات التي تبحث عن وكلاء مفتوحين على الانترنت تعلموا أن مُرحّلات تور في بعض الأحيان تكشف منافذ SOCKS الخاصة بهم للجميع. نوصي بربط منفذ SOCKS بالشبكات المحلية فقط.

على كل حال، يجب أن تكون على اطلاع دائم بأمنك. راجع هذه المقالة حول أمان مُرحّلات تور للمزيد من الاقتراحات.

يتم سرد المنافذ الافتراضية المفتوحة أدناه، ولكن ضع في اعتبارك أنه يمكن فتح أي منفذ بواسطة مكلف عن تشغيل المُرحّل، وذلك عن طريق تهيئته في torrc أو من خلال تعديل الشيفرة المصدرية. القيمة الافتراضية في الملف ‎src/or/policies.c (السطر 85 و السطر 1901) من إصدار الشيفرة المصدرية الإصدار 0.4.6:

reject 0.0.0.0/8
reject 169.254.0.0/16
reject 127.0.0.0/8
reject 192.168.0.0/16
reject 10.0.0.0/8
reject 172.16.0.0/12

reject *:25
reject *:119
reject *:135-139
reject *:445
reject *:563
reject *:1214
reject *:4661-4666
reject *:6346-6429
reject *:6699
reject *:6881-6999
accept *:*

تنفذ BridgeDB ستة آليات لتوزيع الجسور: HTTPS ،Moat، البريد الإلكتروني، تيليغرام، والإعدادات وأخرى مُخصَّصة. يمكن لمشغلي الجسر التحقق من الآلية التي يستخدمها الجسر، في بحث الترحيل. أدخل الجسر <HASHED FINGERPRINT> في الاستمارة ثم اضغط على "بحث".

يمكن للمشغلين أيضا اختيار طريقة التوزيع التي يستخدمها الجسر. لتغيير الطريقة، قم بتعديل الإعداد BridgeDistribution في ملف torrc ليصبح أحد هذه الكلمات: ‎‎ https, moat, email, telegram, settings, none, any.

اطلع على المزيد في دليل الجسور بعد التثبيت.

يستطيع تور التعامل بشكل جيد مع المُرحّلات ذات العناوين IP المتغيرة. فقط اترك سطر "Address" في torrc فارغًا، وسيخمنه تور.

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

Bandwidth soft limit reached; commencing hibernation.
No new connections will be accepted

الحل هو تشغيل عمليتين من أجل - مُرحّل واحد وعميل واحد، لكل منهما تهيئتهما الخاصة. إحدى طرق القيام بذلك (إذا كنت تبدأ انطلاقا من تهيئة مُرحّل يشتغل) هي كما يلي:

  • في ملف الترحيل تور torrc، ما عليك سوى تعيين قيمة SocksPort تساوي 0.
  • قم بإنشاء ملف torrc جديد للعميل من torrc.sample وتأكد من أنه يستخدم ملف سجل مختلف عن المُرحّل. قد تكون أحد اصطلاحات التسمية هي torrc.client و torrc.relay.
  • قم بتعديل برامج بدء التشغيل لكل من عميل تور وكذلك المُرحّل ليشملا ‎-f /path/to/correct/torrc.
  • في لينَكْسْ أو BSD أو نظام ماكْ (الإصدار X)، قد يؤدي تغيير البرامج النصية لبدء التشغيل إلى Tor.client و Tor.relay إلى تسهيل فصل التهيئات.

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

يمكنك تشغيل مُرحّل في ويندوز باتباع هذه الدروس:

يجب عليك تشغيل مُرحّل في ويندوز فقط إذا كان بإمكانك تشغيله على مدار 24 ساعة، وطول أيام الأسبوع . إذا كنت غير قادر على ضمان أن ندفة الثلج ‏هي طريقة أفضل للمساهمة بمواردك في شبكة تور.

إذا كانت مُرحّلك يستخدم ذاكرة أكثر مما ترغب به، فإليك أدناه بعض التلميحات للحد من ذلك:

  • إذا كنت تستخدم نظام لينَكْسْ، فقد تواجه عللا في تجزئة الذاكرة في تطبيق الإجراء malloc للمكتبة البرمجية glibc. أي عندما يقوم تور بإعادة الذاكرة إلى النظام، تتم تجزئة أجزاء الذاكرة بحيث يصعب إعادة استخدامها. يأتي أرشيف تور مع تطبيق الوظيفة malloc من OpenBSD، والتي لا تحتوي على العديد من علل التجزئة (ولكن يكون الثمن هو استخدام أكبر لوحدة المعالجة المركزية). يمكنك إخبار تور باستخدام تطبيق الوظيفة malloc هذه بدلا من ذلك: ‎./configure --enable-openbsd-malloc.
  • إذا كنت تقوم بتشغيل مُرحّل سريع، مما يعني أن لديك العديد من اتصالات TLS مفتوحة، فمن المحتمل أنك تفقد الكثير من الذاكرة للمخازن المؤقتة الداخلية لـ OpenSSL (38 كيلوبايت + لكل مقبس). لقد قمنا بتصحيح OpenSSL لتحرير الذاكرة المؤقتة غير المستخدمة بشكل أكثر قوة. إذا قمت بالتحديث إلى الإصدار OpenSSL 1.0.0 أو الأحدث، فسوف تتعرف عملية إنشاء تور تلقائيا على هذه الميزة وستستخدمها.
  • إذا كنت لا تزال غير قادر على التعامل مع كمية الحمولة على الذاكرة، ففكر في تقليل مقدار سعة القناة التي يعلن عنه المُرحّل. الإعلان عن سعة قناة يعني أنك ستجذب عددا أقل من المستخدمين، لذلك لا ينبغي أن ينمو مُرحّلك بهذا الحجم. اطلع على الخيار MaxAdvertisedBandwidth في صفحة الدليل.

في النهاية، ينبغي إدراك أن مُرحّلات تور السريعة تستهلك الكثير من الذاكرة. إذ ليس غريبا أن يستهلك مُرحّل الخروج 500-1000 ميجابايْت من الذاكرة.