اپراتورهای رله

ما قصد داریم تا برپاسازی یک رلهٔ Tor را ساده و راحت کنیم:

  • اشکالی ندارد اگر رله گاهی اوقات آفلاین شود. دایرکتوری‌ها به‌سرعت متوجه این موضوع می‌شوند و اعلام رله را متوقف می‌کنند. فقط سعی کنید مطمئن شوید که این اتفاق زیاد رخ ندهد، چون اتصال‌هایی که از آن رله استفاده می‌کنند هنگام قطع شدن آن، از بین خواهند رفت.
  • هر رلهٔ Tor دارای یک سیاست خروج است که مشخص می‌کند چه نوع اتصال‌های خارج‌شونده‌ای از آن رله مجاز هستند. اگر تمایل ندارید به افراد اجازه دهید تا از رله‌ٔتان خارج شوند، می توانید آن را طوری تنظیم کنید که فقط به رله‌های Tor دیگر اجازهٔ اتصال بدهید.
  • رلهٔ شما به‌صورت انفعالی ظرفیت پهنای‌باند اخیر خود را تخمین می‌زند و اعلام می‌کند، رله‌های با پهنای‌‌باند بالا نسبت به رله‌های با پهنای‌باند پایین کاربران بیشتری را به خود جذب خواهند کرد. بنابراین، داشتن رله‌های با پهنای‌باند پایین نیز مفید است.

هنگامی که رلهٔ خروج به‌درستی پیکربندی نشده یا مخرب باشد، پرچم BadExit به آن اختصاص داده می‌شود. این کار به Tor می‌گوید که از خروج از طریق آن رله خودداری کند. در عمل، رله‌ها با این پرچم تبدیل به رلهٔ‌های غیر-خروجی می‌شوند. اگر شما این پرچم را گرفتید پس ما یا مشکل یا فعالیت مشکوکی را هنگام مسیردهی ترافیک از طریق خروجی شما کشف کردیم و نتوانستیم با شما تماس بگیریم. لطفاً با تیم رله‌های بد ارتباط برقرار کنید تا بتوانیم مشکل را برطرف کنیم.

portforward.com را برای رهنمون‌ها در مورد نحوهٔ هدایت درگاه با دستگاه مسیریاب/NAT خود ببینید.

اگر رلهٔ شما در حال اجرا روی یک شبکهٔ داخلی است، شما باید هدایت درگاه را برپا کنید. هدایت اتصال‌های TCP به نوع سیستم وابسته است، اما مدخل پرسش‌های متداول کلاینت‌های فایروال‌شده، مثال‌هایی از چگونگی انجام این کار را ارائه می‌دهد.

همچنین، این مثال را در بارهٔ نحوهٔ انجام این کار روی GNU/Linux، در صورتی که از iptable استفاده می‌کنید ببینید:

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

اگر رابط خارجی متفاوتی دارید (آنکه به اینترنت متصل است) شاید لازم باشد تا «eth0» را تغییر دهید. احتمالاً شما فقط یک رابط (به غیر از برگردان، loopback) دارید بنابراین پیداکردن آن نباید خیلی سخت باشد.

دلیل تغییر بار رله

Tor پهنای‌باند را در سراسر شبکه مدیریت می‌کند. برای بیشتر رله‌ها عملکرد معقولی دارد. اما اهداف Tor با پروتکل‌هایی مانند BitTorrent متفاوت است. Tor می‌خواهد صفحات وب کم‌تأخیر باشند که لازمهٔ آن اتصال‌های سریع و دارای سرماند است. BitTorrent بارگیری انبوه می‌خواهد، که مستلزم استفاده از تمام پهنای‌باند است.

ما داریم روی یک پویشگر جدید پهنای‌باند کار می‌کنیم که فهم و نگهداری آن راحت‌تر است. برای رله‌هایی که اندازه‌گیری نمی‌شوند و رله‌هایی که سطح اندازه‌گیری پایینی دارند، گزارش عیب‌یابی فراهم خواهد کرد.

چرا Tor به اسکنرهای پهنای‌ باند نیاز دارد؟

بیشتر ارائه‌دهندگان، به شما سرعت بیشینهٔ اتصال محلی‌تان را می‌گویند. اما Tor در سرتاسر جهان کاربرانی دارد و کاربران ما به یک یا دو رلهٔ نگهبان به‌صورت تصادفی متصل می‌شوند. بنابراین ما باید بدانیم که هر رله با چه کیفیتی می‌تواند به کل جهان متصل شود.

حتی اگر تمام گردانندگان رله، پهنای باند اعلامی را مطابق سرعت اتصال محلی خود تنظیم کنند، باز هم نیاز به مسئولان پهنای باند برای متعادل‌سازی بار بین بخش‌های مختلف اینترنت داریم.

بار رلهٔ معمولی چقدر است؟

طبیعی است که بیشتر رله‌ها بین ٪۸۰-٪۳۰ ظرفیت خود بارگذاری شوند. این برای کلاینت‌ها خوب است: یک رله با اضافه‌بار بالا تأخیر زیادی دارد. (ما به‌تعدادی رله می‌خواهیم که هر رله به‌میزان ٪۱۰ بارگذاری شود. در آن هنگام Tor تقریباً هم‌سرعت اینترنت گسترده‌تر خواهد بود).

گاهی اوقات، یک رله کند است زیرا پردازندهٔ آن کند است یا اتصالات آن محدود شده‌اند. در مواقع دیگر، شبکه کند است: رله همتاسازی بد یا فاصلهٔ زیادی با بیشتر رله‌های دیگر Tor دارد.

پی‌بردن به این‌که چه‌چیزی یک رله را محدود می‌کند

عوامل زیادی می‌توانند سرعت رله را کاهش دهند. در اینجا نحوهٔ ردیابی آن‌ها آورده شده است.

محدودیت‌های سیستم

  • میزان استفاده از RAM، CPU و توصیف‌گر سوکت/فایل را روی رلهٔ خود بررسی کنید

Tor هنگام راه‌اندازی بعضی از این موارد را رویدادنگاری می‌کند. سایر موارد را می‌توان با استفاده از top یا ابزارهای مشابه مشاهده کرد.

محدودیت‌های ارائه‌دهنده

  • همتاسازکنندهٔ اینترنت (پهنای‌باند، تأخیر) میان ارائه‌دهندهٔ رلهٔ خود و سایر رله‌ها را بررسی کنید. انتقال رله‌ها از طریق Comcast گاهی کند بوده‌اند. رله‌های خارج از آمریکای شمالی و اروپای غربی معمولا کندتر هستند.

محدودیت‌های شبکهٔ Tor

پهنای‌باند رله را می‌توان با پهنای‌باند مشاهده‌شده یا پهنای‌باند اندازه‌گیری‌شده توسط مراجع شاخه محدود کرد. در اینجا نحوهٔ فهمیدن اینکه کدام اندازه‌گیری، رله شما را محدود می‌کند، آورده شده است:

  • هر یک از آرا را برای رلهٔ خود در مورد اجماع سلامت (صفحهٔ بزرگ) بررسی کرده و میانه را بررسی کنید. اگر رلهٔ شما توسط برخی از مراجع شاخهٔ درحال اجرا علامت‌گذاری نشده است:
    • آیا نشانی IPv4 یا IPv6 آن نادرست است؟
    • آیا نشانی IPv4 یا IPv6 از برخی شبکه‌ها غیرقابل دسترسی است؟
    • آیا بیش از ۲ رله در نشانی IPv4 خودش وجود دارد؟

در غیر این صورت، پهنای‌باند مشاهده‌شدهٔ رله و نرخ پهنای‌باند (محدود) را بررسی کنید. رلهٔ خود را در متریک‌ها جستجو کنید. سپس نشان‌گر ماوس را روی عنوان پهنای‌باند نگه دارید تا پهنای‌باند مشاهده‌شده و نرخ پهنای‌باند رله را ببینید.

در اینجا جزئیات بیشتر و چند مثال آورده شده است: افت وزن اجماع و تسریع رلهٔ خروج.

نحوهٔ درست‌‌نمودن آن

کوچک‌ترینِ این اعداد، پهنای‌باند اختصاص‌یافته به رله را محدود می‌کند.

  • اگر مشکل از نرخ پهنای‌باند است، BandwidthRate/Burst یا RelayBandwidthRate/Burst را در torrc خود افزایش دهید.
  • اگر پهنای‌باندی باشد که مشاهده شده است، رلهٔ شما تا زمانی که خود را درحال سریع‌ترشدن ببیند، پهنای‌باند بیشتری را درخواست نخواهد کرد. باید متوجه شوید که چرا کند است.
  • اگر مشکل از پهنای‌باند میانهٔ اندازه‌گیری‌شده باشد، رلهٔ شما از نظر اکثر مراجع پهنای‌باند، کند به‌نظر می‌رسد. باید متوجه شوید که چرا سرعت آن را پایین اندازه‌گیری می‌کنند.

اندازه‌گیری‌های رلهٔ خود را انجام دهید

اگر رلهٔ شما کند است یا مراجع پهنای‌باند فکر می‌کنند که کند است، خودتان می‌توانید پهنای‌باند را آزمایش کنید:

  • Run a test using tor to see how fast tor can get on your network

    برای این منظور، باید کلاینت tor را طوری تنظیم کنید که از رله شما به‌عنوان ورودی استفاده کند. اگر رله شما فقط دارای برچسب Guard است، در فایل torrc گزینه EntryNodes را با fingerprint رله خود تنظیم کنید. اگر نود رله شما پرچم Guard ندارد یا هم‌زمان دارای پرچم‌های Guard و Exit است، نمی‌توانید آن را به‌عنوان نود ورودی تنظیم کنید (نگاه کنید به https://gitlab.torproject.org/tpo/core/tor/-/issues/22204)، اما حتی اگر نود شما Bridge نیست، می‌توانید آن را به‌عنوان Bridge خود تنظیم کنید. برای تنظیم رله‌ی خود به‌عنوان پل، این خط را به فایل torrc خود اضافه کنید:

    Bridge <ip>:<port>
    UseBridge 1
    

    سپس یک فایل حجیم را با استفاده از SocksPort خود به‌عنوان پراکسی socks دانلود کنید. برای این کار می‌توانید از curl استفاده کنید، مثلاً:

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

    استفاده از user/password متفاوت باعث ایجاد مسیرهای متفاوت می‌شود. می‌توانید از $RANDOM استفاده کنید.

    این به شما دیدی می‌دهد از اینکه رله شما چقدر ترافیک می‌تواند تحمل کند.

    همچنین می‌توانید برای آزمایش رله خود با مدارهای دوهاپه از ابزار relay_bw استفاده کنید، مشابه روشی که sbws به کار می‌برد.

  • Run a test using tor and chutney to find out how fast tor can get on your CPU. حجم داده را افزایش دهید تا زمانی که پهنای باند دیگر افزایش پیدا نکند.

دو گزینه وجود دارد که می‌توانید به فایل torrc خود اضافه کنید:

BandwithRate حداکثر مقدار پهنای‌باند مجاز در طولانی‌مدت است (بایت بر ثانیه). برای نمونه، شاید بخواهید "BandwidthRate 10 MBytes" را برای ۱۰ مگابایت بر ثانیه (یک اتصال سریع) انتخاب کنید، یا "BandwidthRate 500 KBytes" برای ۵۰۰ کیلوبایت بر ثانیه (یک اتصال کابلی قابل‌قبول) انتخاب کنید. تنظیم کمینهٔ BandwithRate، ‏۷۵ کیلوبایت بر ثانیه است.

BandwidthBurst استخری از بایت‌هایی است که برای پاسخ‌گویی به درخواست‌ها در بازه‌های کوتاه‌مدت، که ترافیک از BandwidthRate فراتر می‌رود، استفاده می‌شود؛ با این حال، میانگین در دورهٔ بلندمدت را روی BandwidthRate نگه می‌دارد. یک نرخ پایین اما یک Burst بالا، یک میانگین در بلندمدت را اعمال می‌کند، در حالی که در زمان‌های اوج، اگر هنوز به میانگین نرسیده باشد، اجازهٔ ترافیک بیشتری را می‌دهد. برای نمونه، اگر شما «BandwidthBurst 500 KBytes» را انتخاب کنید و همچنین از آن برای BandwidthRate خود استفاده کنید، بنابراین شما بیشتر از ۵۰۰ کیلوبایت در ثانیه استفاده نخواهید کرد; ولی اگر شما یک BandwidthBurst بالاتر را انتخاب کنید (مانند ۵ مگابایت)، به بایت‌های بیشتری اجازه عبور می‌دهد تا استخر بایت‌ها خالی شود.

اگر اتصال نامتقارنی (بارگذاری کمتر از بارگیری)، هم‌چون مودم سیمی، دارید، باید BandwidthRate را کم‌تر از کم‌ترین پهنای‌باند خود (معمولاُ پهنای باند بارگذاری) تنظیم کنید. در غیر این صورت، ممکن است در دوره‌هایی که از بیشینه پهنای باند استفاده می‌شود، بسته‌های زیادی رها شوند - شاید لازم باشد مقادیر مختلفی را برای برقراری راحت اتصالتان آزمایش کنید. سپس BandwidthBurst را یکسان با BandwidthRate مقداردهی کنید.

گره‌های Tor مبتنی بر لینوکس یک گزینهٔ دیگر هم در اختیار دارند: آن‌ها می‌توانند روی ماشین خود به ترافیک Tor اولویت پایین‌تری بدهند تا ترافیک شخصی آن‌ها تحت تأثیر بار Tor قرار نگیرد. یک کدنوشته برای انجام این کار را می‌توان در فهرست مشارکتی توزیع منبع Tor یافت.

علاوه‌بر این، گزینه‌های خواب زمستانی وجود دارند که از آن طریق می‌توانید به Tor بگویید فقط مقدار مشخصی از پهنای باند را در هر دورهٔ زمانی (مثلاً ۱۰۰ گیگابایت در ماه) ارائه کند. این‌ها در مدخل خواب زمستانی پوشش داده شده‌اند.

توجه کنید که BandwithRate و BandwithBurst به بایت هستند، نه بیت.

به زبان ساده، به این شکل کار می‌کند:

  • یک فایل کلید خصوصی هویت ed25519 با نام «ed25519_master_id_secret_key» وجود دارد. این مهم‌ترین کلید است، بنابراین مطمئن شوید که یک پشتیبان از آن را در جایی امن نگه می‌دارید - فایل حساس است و باید محافظت شود. اگر کلید را به‌صورت دستی تولید کنید، Tor می تواند آن را برای شما رمزگذاری کند و هنگامی که خواسته شد گذرواژه را وارد کنید.
  • یک کلید امضای میان‌مدت به نام «ed25519_signing_secret_key» برای Tor تولید می‌شود تا از آن استفاده کند. همچنین، یک گواهی به نام «ed25519_signing_cert» تولید می‌شود که با کلید خصوصی هویت اصلی امضا شده و تأیید می‌کند که کلید امضای میان‌مدت برای مدت زمان معینی معتبر است. اعتبار پیش‌فرض ۳۰ روز است، اما می‌تواند با تنظیم «SigningKeyLifetime N days|weeks|months» در torrc سفارشی‌سازی شود.
  • همچنین یک کلید عمومی اولیه به نام «ed25519_master_id_public_key» وجود دارد که هویت حقیقی رلهٔ اعلام‌شده در شبکه است. این یکی حساس نیست و می‌تواند به راحتی از روی «ed5519_master_id_secret_key» محاسبه شود.

Tor فقط تا زمانی به دسترسی کلید امضا و گواهی میان‌مدت نیاز دارد که آن‌ها معتبر باشند، بنابراین کلید خصوصی هویت اصلی می‌تواند خارج از DataDirectory/keys، روی یک رسانهٔ ذخیره‌سازی یا رایانهٔ متفاوت نگهداری شود. شما باید به‌صورت دستی کلید امضا و گواهی میان‌مدت را تمدید کنید، پیش‌از آن‌که منقضی شوند، در غیر این صورت پردازهٔ Tor در رله، به‌محض انقضا خارج خواهد شد.

این ویژگی اختیاری است، نیازی به استفاده از آن ندارید، مگراین‌که خودتان بخواهید. اگر از رلهٔ خود می‌خواهید که بدون نیاز به رسیدگی و نوسازی دستی کلید امضای میان‌مدت برای مدتی طولانی به‌طور منظم اجرا شود، بهتر است کلید خصوصی هویت اصلی را در DataDirectory/keys به حال خود رها کنید، تنها درصورت نیاز به نصب مجدد آن، یک نسخهٔ پشتیبان بسازید. اگر می خواهید از این ویژگی استفاده کنید، می توانید راهنمای مشروح ما را دربارهٔ این موضوع ببینید.

اگر رلهٔ شما نسبتاً جدید است به آن زمان بدهید. Tor براساس گزارش‌هایی که از مراجع پهنای‌باند دریافت می‌کند به صورت ابتکاری تصمیم می‌گیرد از کدام رله‌ها استفاده کند. این مراجع ظرفیت رلهٔ شما را اندازه‌گیری می‌کنند و با گذشت زمان، Tor ترافیک بیشتری را به آن هدایت می‌کند تا زمانی که به بار مطلوب برسد. چرخهٔ‌عمر یک رلهٔ جدید به‌طور عمیق‌تر در این پست وبلاگ‏ توضیح داده شده است. اگر مدتی هست درحال اجرای یک رله هستید و همچنان مشکلاتی دارید، می‌توانید دراین‌باره در فهرست رله‌های Tor سؤال بپرسید.

  • از بسته‌های مخزن Ubuntu استفاده نکنید. آن‌ها به‌طور قابل‌اعتمادی به‌روزرسانی نمی‌شوند. اگر از آن‌ها استفاده کنید، اصلاحات پایداری و امنیتی مهم را از دست خواهید داد.
  • نسخهٔ اوبونتو خود را با اجرای فرمان زیر تشخیص دهید:
     ‪$ 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 -
    
  • فرمان‌های زیر را برای نصب Tor و بررسی امضاهای آن اجرا کنید:
     ‪$ sudo apt-get update
     ‪$ sudo apt-get install tor deb.torproject.org-keyring
    

در بخش جستجوی رله، هنگامی که رله در حالت اضافه‌بار است، یک نقطهٔ کهربایی در کنار نام مستعار رله نشان می‌دهیم. این بدان معناست که یک یا چند مورد از معیارهای بار زیر فعال شده‌اند:

توجه داشته باشید که اگر یک رله به حالت اضافه‌بار برسد، آن را ۷۲ ساعت پس از آن‌که رله بازیابی شد، نشان می‌دهیم.

اگر متوجه شدید که رلهٔ شما بیش از حد بارگذاری شده است لطفاً:

  1. https://status.torproject.org/ را برای مشکل‌های شناخته‌شده در دسته‌بندی «Tor Network» بررسی کنید.

  2. میزان‌کردنsysctl را برای سامانهٔ خود‏ به‌منظور بارگذاری شبکه، حافظه و CPU در نظر بگیرید.

  3. فعال کردن MetricsPort‏ را برای درک آنچه اتفاق می‌افتد در نظر بگیرید.

میزان‌سازی sysctl برای بارگذاری شبکه، حافظه و CPU

اشباع درگاه 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

برای اطلاع از سلامتی رله‌های Tor و شبکهٔ Tor، ارائه‌دادن و داشتن دسترسی به متریک‌های رله حیاتی است. اطلاعات اضافه‌بار رله از زمان نسخه‌های +0.4.6 به توصیف‌گرهای رله اضافه شده است، اما از زمان Tor >= 0.4.7.1-alpha بود که یک رابط اختصاصی برای معیارهای رله در دسترس قرار گرفت، یعنی: درگاه معیارها.

فعال‌سازی MetricsPort

Tor دسترسی به درگاه متریک‌ها را از طریق یک گزینهٔ پیکربندی torrc موسوم به MetricsPort فراهم می‌کند.

دانستن این نکته مهم است که عرضهٔ عمومی MetricsPort برای کاربران شبکهٔ Tor، خطرناک است، به‌همین‌دلیل است که آن درگاه به‌صورت پیش‌فرض فعال نیست و دسترسی به آن باید با یک سیاست دسترسی کنترل شود. لطفاً هنگام بازکردن این درگاه احتیاط بیشتری به خرج دهید، و پس از پایان اشکال‌زدایی آن را ببندید.

بیایید فرض کنیم شما روی سرور تنها کاربری هستید که رلهٔ Tor را اجرا می‌کند. می‌توانید با افزودن این موارد به فایل torrc خود، درگاه معیارها را فعال کنید:

MetricsPort 127.0.0.1:9035
MetricsPortPolicy accept 127.0.0.1

سپس قادر خواهید بود به‌راحتی متریک‌ها را با این فرمان دریافت کنید:

# curl http://127.0.0.1:9035/metrics

که به‌طور پیش‌فرض در قالب Prometheus هستند.

توجه: هر کاربر روی آن سرور می‌تواند به متریک‌های رله در مثال بالا دسترسی داشته باشد. به‌طور کلی، با MetricsPortPolicy یک سیاست دسترسی بسیار دقیق تنظیم کرده‌اید و استفاده از ویژگی‌های فایروال سیستم‌عامل خود را برای ایجاد لایه‌های دفاعی عمیق‌تر در نظر بگیرید.

برای توضیح دقیق‌تر دربارهٔ MetricsPort و MetricsPortPolicy صفحهٔ راهنمای Tor را ببینید.

خروجی 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» می‌کند، معمولاً مشکل از CPU/RAM است.

متأسفانه Tor تک‌رشته‌ای است به استثنای زمانی که «onion skins» پردازش شوند. «onion skins» یک عملیات رمزنگاری است که باید روی «لایه‌های onion» معروف در هر مدار انجام شود.

وقتی tor لایه‌ها را پردازش می‌کند، از یک استخر thread استفاده می‌کنیم و همه آن کار را به همان استخر رله برون‌سپاری می‌کنیم. ممکن است این استخر به‌دلیل فشار به حافظه یا CPU شروع به از قلم انداختن وظایف کند، و این موضوع حالت اضافه‌بار را فعال خواهد کرد.

اگر سرور شما با تمام ظرفیت درحال کار است، احتمالاً این مورد رخ خواهد داد.

tor_relay_exit_dns_error_total{...}

هر شمارنده‌ای در قلمرو «*_dns_error_total» (جدا از مورد برای پرسمان‌های موفق) حاکی از یک مشکل بالقوهٔ مرتبط با DNS است. با این حال، در طول چرخهٔ انتشار 0.4.7 متوجه شدیم که خطاهای DNS بسیار پرآشوب هستند و حاوی مقادیر بسیار زیادی خطای مثبت کاذب‌اند که برای اهداف گزارش‌دهی اضافه‌بار مفید نخواهند بود. بنابراین، از نسخه‌های 0.4.6.9 و ‎0.4.7.4-alpha به بعد، دیگر از آن‌ها برای این منظور استفاده نمی‌کنیم. با این حال، ما هنوز معیارهای DNS را نزدیک نگه می‌داریم تا به گردانندگان رله بینشی دربارهٔ آنچه در رلهٔ‌شان می‌گذرد، ارائه دهیم.

مشکلات و خطاهای DNS timeout تنها مربوط به گره‌های خروجی هستند.

tor_relay_load_oom_bytes_total{...}

فراخوانی Out-Of-Memory نشانگر مشکل RAM است. رله ممکن است به RAM بیشتری نیاز داشته باشد یا در حال نشت حافظه است. اگر متوجه شدید که پردازهٔ Tor درحال نشت حافظه است، لطفاً مشکل را یا از طریق Tor gitLab یا با ارسال ایمیل به فهرست ایمیل tor-relays گزارش دهید.

Tor رسیدگی‌کنندهٔ OOM خود را دارد و زمانی فراخوانی می‌شود که ٪۷۵ از کل حافظه‌‌ای که tor فکر می‌کند در دسترس است، پر شود. Thus, let's say tor thinks it can use 2GB in total then at 1.5GB of memory usage, it will start freeing memory. این یک وضعیت اضافه‌بار محسوب می‌شود .

To estimate the amount of memory it has available, when tor starts, it will use MaxMemInQueues or, if not set, will look at the total RAM available on the system and apply this algorithm:

    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)

برای جلوگیری از بارگذاری بیش از حد، توصیه می‌کنیم یک رله با حافظهٔ رم بالای۲ گیگابایت روی ۶۴ بیت اجرا کنید. ۴ گیگابایت توصیه می‌شود، هرچند درصورتی که بتوانید، اضافه‌کردن حافظهٔ رم بیشتر ضرری ندارد. توجه: اگر یک سرور قدرتمند با مقدار زیادی RAM اجرا می‌کنید، ممکن است به‌دلیل محدودیت پیش‌فرض صف ۸ گیگابایتی، با اینکه هنوز مقدار زیادی RAM بلااستفاده دارید، دچار وضعیت بارگذاری بیش‌ازحد شوید. در این صورت، یک مقدار مناسب برای MaxMemInQueues در فایل پیکربندی torrc وارد کنید.

ممکن است ببینید که Tor می‌تواند از سوی خود رسیدگی‌کنندهٔ OOM سیستم‌عامل فراخوانی شود. از آن‌جا که Tor هنگام شروع، حافظهٔ کل سیستم را از آن خود می‌کند، اگر سیستم در مجموع برنامه‌های زیاد دیگری را در حال اجرا و استفاده از RAM داشته باشد، در نهایت مقدار زیادی از حافظه را مصرف خواهد کرد. در این مورد، سیستم‌عامل می‌تواند مدیریت تمام‌شدن حافظه (OOM) را برای tor انجام دهد، بدون اینکه tor متوجه فشار روی حافظه شود.

tor_relay_load_socket_total

اگر تعداد سوکت‌های بازشده نزدیک یا برابر با تمام سوکت‌های موجود باشد، در آن صورت این نشان می‌دهد که رله درحال تمام‌کردن سوکت است. راه‌حل این است که ulimit -n را برای پردازهٔ Tor افزایش دهید.

tor_relay_load_tcp_exhaustion_total

این سطور نشان می‌دهند که درگاه‌های TCP رله در حال تمام‌شدن هستند.

سعی کنید sysctl را همانطور که در بالا توضیح داده شد‏ تنظیم کنید.

tor_relay_load_global_rate_limit_reached_total

اگر این شمارنده در مدت کوتاهی به مقدار قابل‌توجهی افزایش پیدا کند، رله مزدحم می‌شود. احتمالاً به‌عنوان یک محافظ توسط یک سرویس Onion بزرگ، یا در جریان یک حملهٔ DDoS در شبکه، استفاده می‌شود.

اگر رلهٔ شما هنوز در حالت اضافه‌بار است و دلیل آن را نمی‌دانید، لطفاً با network-report@torproject.org‏ تماس بگیرید. می‌توانید ایمیل خود را با استفاده از کلید OpenPGP گزارش شبکه رمزگذاری کنید.

عالی. اگر می‌خواهید برای اهدا بیشتر به شبکه، چندین رله اجرا کنید، ما از این موضوع بسیار خرسندیم. اما لطفاً بیش از چندین رله روی یک شبکه اجرا نکنید چراکه بخشی از هدف شبکهٔ Tor پراکندگی و تنوع است.

اگر قصد دارید بیش از یک رله اجرا کنید، لطفاً گزینهٔ پیکربندی "MyFamily" را در torrc هر رله تنظیم کنید و تمام رله‌هایی را که (جداشده به‌کمک کاما) تحت کنترل شما هستند فهرست کنید:

MyFamily $fingerprint1,$fingerprint2,$fingerprint3

جایی‌که هر اثرانگشت، یک اثرانگشتِ هویت 40 کاراکتری است (بدون فاصله).

به‌این‌ترتیب، کلاینت‌های Tor خواهند دانست تا از به‌کارگیری بیشتر از یک رلهٔ شما در یک مدار پرهیز کنند. اگر کنترل مدیریتی رایانه‌ها یا شبکهٔ آن‌ها را در اختیار دارید، بهتر است MyFamily را تنظیم کنید، حتی اگر همهٔ آن‌ها در یک موقعیت جغرافیایی نیستند.

Tor پشتیبانی محدودی از IPv6 دارد و ما هر اپراتور رله را، در صورت در دسترس بودن اتصال‌دهندگی IPv6، به فعال‌سازی عملکرد IPv6 در فایل‌های پیکربندی torrc خود تشویق می‌کنیم. در حال حاضر Tor به نشانی‌های IPv4 برای رله‌ها نیاز دارد، شما نمی‌توانید یک رلهٔ Tor را روی یک میزبان فقط دارای نشانی‌های IPv6 اجرا کنید.

بله، شما ناشناسی بهتری در برابر برخی حملات خواهید داشت.

ساده‌ترین مثال مهاجمی است که صاحب تعداد محدودی رلهٔ Tor است. آن‌ها یک اتصال از جانب شما خواهند دید، اما قادر نخواهند بود بدانند که آیا اتصال از رایانهٔ شما نشئت گرفته یا از رایانهٔ شخص دیگری عبور داده یا رله شده است.

مواردی وجود دارند که این راه به‌نظر چاره‌ساز نمی‌آید: اگر مهاجمی می‌تواند کلیهٔ ترافیک ورودی و خروجی شما را ببیند، بنابراین برای آن‌ها دشوار نیست تا بفهمند کدام اتصال‌ها رله‌شده بودند و کدام‌یک از شما آغاز شدند. (در این مورد، آن‌ها مقصدهای شما را نمی‌دانند مگر اینکه خودشان نیز در حال نظارت بر آن‌ها باشند، اما وضعیت شما بهتر از یک کلاینت عادی نیست.)

اجرای یک رلهٔ Tor جنبه‌های منفی هم در بر دارد. نخست، باوجوداینکه ما چندصد رله داریم، این‌که شما در حال اجرای یک رله هستید شاید به مهاجم علامت دهد که شما اهمیت بالایی به ناشناسی‌تان می‌دهید. دوم اینکه، حملات سری بیش‌تری وجود دارند که به‌خوبی درک یا آزموده نشده‌اند که شامل استفاده از دانشی است از اینکه شما در حال اجرای یک رله هستید -- برای مثال، یک مهاجم ممکن است بتواند با انتقال ترافیک از طریق رلهٔ Tor و مشاهدهٔ تغییرات در زمان‌بندی ترافیک ‹ببیند› که شما در حال ارسال ترافیک هستید، حتی اگر واقعاً نتواند شبکهٔ شما را مشاهده کند.

این‌که فواید این کار از خطراتش بیشتر باشد یا نه، هنوز یک پرسش پژوهشی باز است. بخش عمدهٔ آن به حملاتی بستگی دارد که بیشترین نگرانی‌ها را در موردشان دارید. برای اکثر کاربران، ما فکر می‌کنیم این یک حرکت هوشمندانه است.

Tor نشانی 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 روی ۰ باز می‌گردند.

نمونه: فرض کنیم شما می خواهید روزانه ۵۰ گیگابایت ترافیک در هر جهت را مجاز کنید و حسابداری نیز باید هر روز رأس ظهر بازنشانی شود:

    AccountingStart day 12:00
    AccountingMax 50 GBytes

توجه داشته باشید که رلهٔ شما دقیقاً در شروع هر دورهٔ حسابداری بیدار نخواهد شد. این‌که در آخرین دوره با چه سرعتی سهمیه خود را مصرف کرده را پیگیری می‌کند، و یک نقطه تصادفی در بازهٔ جدید برای بیدارشدن انتخاب می‌کند. به‌این‌ترتیب ما از این جلوگیری می‌کنیم که صدها رله‌ای در ابتدای هر ماه درحال کار باشند، اما تا پایان ماه هیچ‌کدام کار نکنند.

اگر در مقایسه با سرعت اتصال خود فقط مقدار کمی پهنای‌باند برای اهداکردن دارید، توصیه می‌کنیم تا از حسابداری روزانه استفاده کنید تا در همان روز اول کل سهم ماهانهٔ خود را مصرف نکنید. فقط کافی است میزان ماهانه خود را تقسیم بر ۳۰ کنید. شاید بخواهید محدودیت نرخ را نیز برای گسترش سودمندی در طول روز اعمال کنید: اگر می خواهید در هر جهت X گیگابایت ارائه کنید، می توانید RelayBandwidthRate را روی 20‎*X KBytes تنظیم کنید. برای نمونه، اگر ۵۰ گیگابایت برای ارائه در هر طرف دارید، شاید بخواهید RelayBandwidthRate را روی ۱۰۰۰ کیلوبایت تنظیم کنید: در این صورت رلهٔ شما همیشه دست‌کم برای نیمی از هر روز مفید خواهد بود.

    AccountingStart day 0:00
    AccountingMax 50 GBytes
    RelayBandwidthRate 1000 KBytes
    RelayBandwidthBurst 5000 KBytes # ‏burstهای بیشتر را مجاز می‌کند ولی میانگین را نگه می‌دارد

  • نیاز به رلهٔ خروج از بقیهٔ انواع رله‌ها بیشتر است، ولی بیشترین خطر و بار قانونی را به‌همراه دارد (و شما نباید آن‌ها را از خانه اجرا کنید).
  • اگر با کمترین تلاش به‌دنبال اجرای یک رله هستید، رله‌های محافظ سریع هم بسیار مفید هستند
  • و به‌دنبال آن‌ها، پل‌ها.

تمام اتصال‌های خروجی باید مجاز باشند تا هر رله بتواند با تک‌تک رله‌های دیگر ارتباط داشته باشد.

در بسیاری از حوزه‌های قضایی، گردانندگان رلهٔ Tor از همان مقررات ناقل بی‌طرف برخوردارند که ارائه‌دهندگان خدمات اینترنتی را از مسئولیت قانونی در قبال محتوای شخص-ثالثی که از شبکه‌ٔشان عبور می‌کند، معاف می‌کند. رله‌های خروجی که بخشی از ترافیک را فیلتر می‌کنند، قریب‌به‌یقین آن حفاظت‌ها را از دست می‌دهند.

Tor دسترسی آزاد به شبکهٔ بدون مداخله را ترویج می‌کند. رله‌های خروج نباید ترافیکی که از آن‌ها به اینترنت عبور می‌کند را فیلتر کنند. رله‌های خروجی که مشخص شود درحال فیلترکردن ترافیک هستند، به‌محض شناسایی، پرچم BadExit دریافت خواهند کرد.

حق با شماست، معمولاً به ازای هر بایتی که وارد رلهٔ Tor شما شود یک بایت خارج می‌شود، و برعکس. اما چند استثنا وجود دارد:

اگر DirPort خود را باز کنید، کلاینت‌های Tor از شما یک رونوشت از دایرکتوری را درخواست خواهند کرد. درخواستی که می‌دهند (HTTP GET) بسیار کوچک و پاسخ گاهی اوقات بسیار بزرگ است. این احتمالاً مسئول بیشتر تفاوت بین شمار بایت «نوشتن» و «خواندن» شما است.

یک استثنای کوچک دیگر زمانی ظاهر می‌شود که شما به‌عنوان یک گرهٔ خروج عمل می‌کنید و چندین بایت از یک اتصال خروج را می‌خوانید (برای مثال، یک پیام‌رسانی آنی یا اتصال ssh) و آن را برای حمل از طریق شبکهٔ Tor در یک سلول ۵۱۲ بایتی لفاف می‌کنید.

ما به دنبال افرادی با اتصال اینترنتی به‌نسبت قابل‌اعتماد هستیم، که دست‌کم دارای پهنای‌باند ۱۰ مگابایت در ثانیه (Mbps) در هر جهت هستند. اگر شما از چنین ویژگی‌هایی برخوردار هستید، اجرای یک رلهٔ Tor را در نظر بگیرید.

حتی اگر شما ۱۰ مگابیت بر ثانیه پهنای‌باند دردسترس ندارید می‌توانید با اجرای یک پل Tor با پشتیبانی obfs4 به شبکهٔ Tor کمک کنید. در این مورد شما باید حداقل ۱ مگابیت بر ثانیه پهنای‌باند دردسترس داشته باشید.

عالی. دقیقاً به همین خاطر ما سیاست‌های خروج را پیاده‌سازی کردیم.

هر رله Tor دارای یک سیاست خروج است که مشخص می‌کند چه آن رله نوع اتصال‌های خروجی را می‌پذیرد یا نمی‌پذیرد. سیاست‌های خروج از طریق دایرکتوری به کلاینت‌های Tor منتشر می‌شوند، بنابراین کلاینت‌ها رله‌های خروجی‌ای را که به مقصد دل‌خواه آن‌ها نمی‌رود، از انتخاب آن‌ها به‌صورت خودکار اجتناب می‌کنند. به‌این‌ترتیب هر رله می‌تواند در مورد سرویس‌ها، میزبان‌ها و شبکه‌هایی که می‌خواهد به آن‌ها اجازهٔ اتصال بدهد براساس پتانسیل سوءاستفاده و شرایط خود تصمیم‌گیری کند. اگر از سیاست خروج پیش‌فرض استفاده می‌کنید، مدخل پشتیبانی را در مورد مشکلات احتمالی‏ بخوانید و سپس راهنمایی‌های مایک پری را برای اجرای یک گرهٔ خروجی با کمترین دردسر بخوانید.

سیاست خروج پیش‌فرض اجازهٔ دسترسی به بسیاری از سرویس‌های محبوب را می‌دهد (مانند مرور وب)، اما برخی را به خاطر امکان سوءاستفاده (مانند ایمیل) و برخی را به دلیل آن‌که شبکه‌ٔ Tor نمی‌تواند بار آن‌ها را تحمل کند (مانند درگاه‌های پیش‌فرض اشتراک‌گذاری فایل)، محدود می‌کند. شما می‌توانید سیاست خروج خود را با ویرایش فایل torrc تغییر دهید. اگر می‌خواهید از بیشتر سوءاستفاده‌های بالقوه جلوگیری کنید، آن را روی «‎reject *:*‎» تنظیم کنید. این تنظیم به معنای این است که برای رله‌کردن ترافیک در درون شبکهٔ Tor به رلهٔ شما اتکا می‌شود، اما نه برای اتصال به وب‌سایت‌های خارجی یا سایر خدمات.

اگر به هرگونه اتصال خروجی اجازه می‌دهید، مطمئن شوید که ترجمهٔ نام کار می‌کند (یعنی رایانهٔ شما می‌تواند نشانی‌های اینترنتی را به‌درستی ترجمه کند). اگر منابعی وجود دارند که رایانهٔ شما نمی‌تواند به آن‌ها دسترسی داشته باشد (برای نمونه، شما پشت فایروال محدود‌کننده یا فیلتر محتوا هستید)، لطفاً صراحتاً آن‌ها را در سیاست خروج خود رد کنید، در غیر این صورت کاربران Tor نیز تحت‌تأثیر قرار می‌گیرند.

When upgrading your Tor relay, or moving it to a different computer, be sure to keep the same identity keys (stored in keys/ed25519_master_id_secret_key and keys/secret_id_key in your DataDirectory).

If you are a bridge operator, also make sure to keep pt_state/. It contains data required for your bridge to keep working with the same bridge line.

برای راحتی، می‌توانید کل پوشه‌ی DataDirectory را به‌سادگی کپی کنید.

شاید بخواهید از کلیدهای هویتی و فایل pt_state مربوط به یک پل نسخه پشتیبان تهیه کنید، تا در صورت بروز مشکل، بتوانید رله را بازیابی نمایید.

نه. اگر مجریان قانون به ترافیک رلهٔ خروجی شما علاقمند شوند، امکان دارد مأموران، رایانهٔ شما را ضبط کنند. به همین دلیل، بهتر است تا رلهٔ خروجی را در خانهٔ خود یا از طریق اتصال اینترنت خانگی خود اجرا نکنید.

در عوض، می توانید رلهٔ خروجی خود را در یک مرکز تجاری حامی Tor اجرا کنید. یک نشانی IP جداگانه برای رلهٔ خروج خود داشته باشید و ترافیک خودتان را از طریق آن مسیردهی نکنید. البته، شما باید از نگه‌داشتن هر گونه اطلاعات شخصی و حساسی روی رایانه‌ای که از رلهٔ پایانی شما میزبانی می‌کند خودداری کنید.

If you're using Debian or Ubuntu especially, please use the Tor Project's repository, so you can easily receive updates. علاوه بر این، استفاده از این پکیج راحتی‌های دیگری نیز دارد:

  • Your ulimit -n gets set to a high number, so Tor can keep open all the connections it needs.
  • The package creates and uses a separate user, so you don't need to run Tor as your own user.
  • The package includes an init script so Tor runs at boot.
  • Tor can bind to low-numbered ports, then drop privileges.

اگر اتصال‌های خروجی را مجاز کنید، برخی از سرویس‌هایی که افراد از رلهٔ شما به آن‌ها متصل می‌شوند، برای جمع‌آوری اطلاعات بیشتر در مورد شما، دوباره به رله وصل می‌شوند. برای مثال، برخی از سرورهای IRC دوباره به درگاه identd شما متصل می‌شوند تا ضبط کنند که کدام کاربر اتصال را ساخته است. (این برایشان چندان کارساز نیست، چون Tor این اطلاعات را ندارد، اما آن‌ها به‌هرحال تلاششان را می‌کنند.) همچنین، کاربرانی که از رلهٔ شما خارج می‌شوند ممکن است توجه سایر کاربران را روی سرور IRC، وب‌سایت و غیره به خود جلب کنند، کاربرانی که می‌خواهند دربارهٔ میزبانی که از آن عبور می‌کنند، بیشتر بدانند.

دلیل دیگر این است که گروه‌هایی که اینترنت را برای یافتن پروکسی‌های باز پویش می‌کنند، آموخته‌اند که گاهی اوقات رله‌های Tor درگاه socks خود را در معرض عموم قرار می‌دهد. ما توصیه می‌کنیم که درگاه socks خود را فقط به شبکه‌های محلی محدود کنید.

به‌هرحال، شما باید امنیت خود را به‌روز نگه دارید. برای پیشنهادهای بیشتر، این مقالهٔ امنیت برای رله‌های Tor‏ را ببینید.

درگاه‌های باز پیش‌فرض در پایین فهرست شدند، اما به یاد داشته باشید اپراتور رله می‌تواند هر درگاهی را با پیکربندی آن در torrc یا تغییردادن کد منبع، باز کند. پیش‌فرض مطابق با src/or/policies.c (سطر ۸۵ و سطر ۱۹۰۱) از نسخهٔ کد منبع release-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 *:*

Bridges are distributed via six mechanisms : HTTPS, Moat, Email, Telegram, Settings and Reserved. اپراتورهای پل می‌توانند در قسمت جستجوی رله بررسی کنند که پل آن‌ها از کدام مکانیسم استفاده می‌کند. <HASHED FINGERPRINT> پل را در فرم وارد کنید و روی «جستجو» کلیک کنید.

اپراتورها همچنین می‌توانند انتخاب کنند که پل آن‌ها از کدام روش توزیع استفاده کند. To change the method, modify the BridgeDistribution setting in the torrc file to one of these: https, moat, email, telegram, settings, lox, none, any. توضیح هر توزیع‌کننده را می‌توانید در مستندات توزیع پل‌ها پیدا کنید.

در راهنمای پسا-نصب پل بیشتر بخوانید.

Tor می‌تواند رله‌های با نشانی‌های IP پویا را بدون هیچ مشکلی کنترل کند. فقط سطر "Address" را در torrc خود خالی بگذارید و Tor نشانی را حدس خواهد زد.

پارامترهای تخصیص‌یافته در AccountingMax و BandwidthRate روی عملکرد‌های هر دو کلاینت و رلهٔ پردازهٔ Tor اعمال می‌شوند. بنابراین ممکن است همین‌که Tor به خواب زمستانی برود متوجه شوید که قادر به مرور نیستید، این مسئله به‌وسیلهٔ این مدخل در رویدادنگاری نشان داده می‌شود:

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

راه‌حل این است که دو پردازهٔ Tor اجرا کنید - یک رله و یک کلاینت، هر کدام با پیکربندی خودشان. یک راه برای انجام این کار (اگر از یک تنظیم رلهٔ درحال‌کار شروع می‌کنید) به این شکل است:

  • در فایل torrc رلهٔ Tor، مقدار SocksPort را روی 0 قرار دهید.
  • یک فایل torrc کلاینت جدید از torrc.sample ایجاد کنید و مطمئن شوید که یک از یک فایل رویدادنگاری متمایز از رله استفاده می‌کند. یک توافق‌نامهٔ نام‌گذاری می‌تواند torrc.client و torrc.relay باشد.
  • اسکریپت‌های کلاینت Tor و راه‌اندازی رله را به شکلی تغییر دهید که حاوی -f /path/to/correct/torrc باشند.
  • در Linux/BSD/macOS، تغییر‌دادن اسکریپت‌های راه‌اندازی به Tor.client و Tor.relay ممکن است تفکیک پیکربندی‌ها را آسان‌تر کند.

از آنجایی که اکنون یک محافظ است، کلاینت‌ها از آن در موقعیت‌های دیگر کمتر استفاده می‌کنند، اما هنوز کلاینت‌ها زیادی محافظ‌های موجود خود را نگردانده‌اند تا از آن به‌عنوان مجافظ استفاده کنند. جزئیات بیشتر را در این پست وبلاگ یا تغییر نگهبان‌ها: یک چهارچوب برای فهم و بهبود گزینش نگهبان ورود در Tor بخوانید.

با دنبال‌کردن این آموزش‌ها می‌توانید یک رله در Windows اجرا کنید:

شما فقط در صورتی یک رلهٔ WIndows را اجرا کنید که می‌توانید آن را ۲۴/۷ اجرا کنید. اگر نمی‌توانید آن را تضمین کنید، Snowflake راه بهتری برای اهدای منابع خود به شبکهٔ Tor است.

اگر رلهٔ Tor شما بیشتر از آنچه دوست دارید از حافظه استفاده می‌کند، اینجا راهنمایی‌هایی برای کاهش ردپای آن وجود دارد:

  • اگر روی Linux هستید، شاید با اشکال‌های گسستگی حافظه در پیاده‌سازی malloc کتابخانهٔ glibc روبه‌رو باشید. این یعنی، زمانی که Tor حافظه را دوباره برای سیستم آزاد می‌کند، بخش‌هایی از حافظه دچار گسست می‌شود، بنابراین استفادهٔ مجدد از آن‌ها دشوار است. فایل tarball مربوط به ‏Tor همراه با پیاده‌سازی malloc سیستم OpenBSD عرضه می‌شود، که اشکال‌های گسستگی چندان زیادی ندارد (درعوض تاوان آن بار CPU بیشتر است). شما می‌توانید به Tor بگویید تا از این پیاده‌سازی malloc به‌جای آن استفاده کند: ‎./configure --enable-openbsd-malloc.
  • اگر در حال اجرای یک رلهٔ سریع هستید، به این معنا که اتصال های TLS زیادی به‌صورت باز دارید، احتمالاً در حال ازدست‌دادن مقدار زیادی از حافظه را به میان‌گیرهای داخلی OpenSSL (38KB+ برای هر سوکت) هستید. ما OpenSSL را برای انتشار حافظهٔ میان‌گیر استفاده‌نشده را به‌صورت تهاجمی‌تر وصله کرده‌ایم. اگر به OpenSSL 1.0.0 یا جدیدتر به‌روزرسانی کنید، فرایند ساخت Tor به‌صورت خودکار این ویژگی را شناسایی کرده و از آن استفاده خواهد کرد.
  • اگر همچنان قادر به مدیریت بار حافظه نیستید، می توانید میزان پهنای‌باندی را که رله‌تان اعلام می‌کند کاهش دهید. اعلام پهنای‌باند کم‌تر به اسن معناست که شما کاربران کمتری را جذب خواهید کرد، پس رله‌ٔتان نباید بیش از این رشد کند. گزینهٔ MaxAdvertisedBandwidth را در صفحهٔ man ببینید.

با وجود همهٔ این‌ها، رله‌های سریع Tor از مقدار زیادی ram استفاده می‌کنند. برای یک رلهٔ خروج سریع غیرمعمول نیست که ۵۰۰ الی ۱۰۰۰ مگابایت حافظه استفاده کند.