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

ما قصد داریم تا برپاسازی یک رلهٔ 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 در سراسر جهان کاربر دارد و کاربران ما به‌صورت تصادفی به یک یا دو رلهٔ نگهبان متصل می‌شوند. بنابراین ما باید بدانیم که هر رله با چه کیفیتی می‌تواند به کل جهان متصل شود.

So even if all relay operators set their advertised bandwidth to their local connection speed, we would still need bandwidth authorities to balance the load between different parts of the Internet.

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

طبیعی است که بیشتر رله‌ها بین ٪۸۰-٪۳۰ ظرفیت خود بارگذاری شوند. این برای کلاینت‌ها خوب است: یک رله با اضافه‌بار بالا تأخیر زیادی دارد. (ما به‌تعدادی رله می‌خواهیم که هر رله به‌میزان ٪۱۰ بارگذاری شود. در آن هنگام 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

    For this, you need to configure a tor client to use use your relay as entry. If your relay has only Guard flag, set EntryNodes with your relay fingerprint in torrc. If your relay doesn't have Guard flag or it has Guard and Exit flags, you can't set your relay as an entry node (see https://gitlab.torproject.org/tpo/core/tor/-/issues/22204), but you can set it as your bridge, even if it is not a bridge. To set your relay as a bridge, add to your torrc:

    Bridge <ip>:<port>
    UseBridge 1
    

    Then download a large file using your SocksPort as a socks proxy. For this, you can use curl, eg:

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

    Using different user/password guarantees different circuits. You can use $RANDOM.

    That will give you some idea of how much traffic your relay can sustain.

    Alternatively, you can run relay_bw to test your relay using 2 hops circuits, in a similar way as sbws does.

  • Run a test using tor and chutney to find out how fast tor can get on your CPU. Keep increasing the data volume until the bandwidth stops increasing.

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

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

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

اگر اتصال نامتوازنی (یعنی آپلود کمتر از دانلود) دارید مثلا مودم شما سیمی است، باید میزان پهنای باند را پایین از از پهنای باند کوچکتر تنظیم کنید (معمولا پهنای باند آپلود کوچکتر است). درغیراینصورت، ممکن است در طول دوره‌های استفادهٔ بیشینه از پهنای‌باند بسته‌های زیادی را بیاندازید - شاید لازم باشد تا مقادیر مختلف را امتحان کنید تا اتصال شما به‌راحتی کار کند. سپس 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 استفاده نکنید. آن‌ها به‌طور قابل‌اعتمادی به‌روزرسانی نمی‌شوند. اگر از آن‌ها استفاده کنید، اصلاحات پایداری و امنیتی مهم را از دست خواهید داد.
  • نسخهٔ 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
    

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

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

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

  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 بود که یک رابط اختصاصی برای متریک‌های رله در دسترس قرار گرفت، یعنی: درگاه متریک‌ها (metrics port).

فعال‌سازی 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 صفحهٔ man (راهنمای) 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

هنگامی که رله شروع به "افت" می‌کند، معمولا مشکل از CPU/RAM است.

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

وقتی tor لایه‌ها را پردازش می‌کند، از یک Thread Pool استفاده می‌کنیم و همه آن کار را به آن Pool برون سپاری می‌کنیم. ممکن است این Pool به دلیل فشار حافظه یا 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 فکر می‌کند در دسترس است، پر شود. بنابراین، فرض کنید tor فکر می‌کند که می‌تواند در مجموع از ۲ گیگابایت استفاده کند، سپس در هنگام استفاده از ۱.۵ گیگابایت حافظه، شروع به آزاد کردن حافظه می‌کند. این یک وضعیت اضافه‌بار محسوب می‌شود .

Tor وقتی شروع به کار می‌کند برای تخمین مقدار حافظه‌ای که در دسترس است، از MaxMemInQueues استفاده می‌کند یا در صورت تنظیم نشدن، کل RAM موجود در سیستم را بررسی می‌کند و این الگوریتم را اعمال می‌کند:

    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 گیگابایت توصیه می‌شود، البته اضافه کردن رم بیشتر در صورت امکان ضرری ندارد.

ممکن است ببینید که 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

اگر این شمارنده در مدت کوتاهی به مقدار قابل‌توجهی افزایش پیدا کند، رله مزدحم می‌شود. احتمالا به عنوان یک محافظ توسط یک سرویس پیازی بزرگ یا برای 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 روی 0 بر می گردند.

نمونه: فرض کنیم شما می خواهید ترافیک 50 گیگابایت را هر روز در هر جهت مجاز کنید و محاسبه هر روز عصر باید مجددا تنظیم شود:

    AccountingStart day 12:00
    AccountingMax 50 GBytes

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

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

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

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

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

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

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

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

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

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

ما به دنبال افرادی با اتصال اینترنتی به نسبت قابل اعتماد هستیم، که حداقل دارای پهنای‌باند 10 مگابایت در ثانیه (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.

For simplicity, just copying over the entire DataDirectory should work too.

You may wish to keep backups of these identity keys, plus pt_state for a bridge, so you can restore the relay if something goes wrong.

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

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

If you're using Debian or Ubuntu especially, please use the Tor Project's repository, so you can easily receive updates. In addition, using the package provides other conveniences:

  • 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 *:*

BridgeDB شش سازوکار را برای توزیع پل‌ها پیاده‌سازی می‌کند: HTTPS ،Moat، ایمیل، تلگرام، تنظیمات و رزروشده‌ها. اپراتورهای پل می‌توانند در قسمت جستجوی رله بررسی کنند که پل آن‌ها از کدام مکانیسم استفاده می‌کند. <HASHED FINGERPRINT> پل را در فرم وارد کنید و روی «جستجو» کلیک کنید.

اپراتورها همچنین می‌توانند انتخاب کنند که پل آن‌ها از کدام روش توزیع استفاده کند. برای تغییر روش، تنظیمات BridgeDistribution در پوشهٔ torrc را به یکی از این‌ها تغییر دهید: https, moat, email, telegram, settings, 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 حافظه را دوباره برای سیستم آزاد می‌کند، بخش‌هایی از حافظه دچار پارگی می شوند بنابراین استفادهٔ مجدد از آن‌ها دشوار است. فایل تار Tor همراه با پیاده‌سازی malloc سیستم OpenBSD می‌آید، که اشکال‌های گسستگی کمتری دارد (درعوض بار CPU بیشتر است). شما می توانید به Tor بگویید تا از این پیاده سازی malloc در عوض استفاده کند: ./configure --enable-openbsd-malloc.
  • اگر در حال اجرا یک رله سریع می باشید، به این معنا که اتصال های TLS زیادی را باز دارید، شما احتمالا در حال از دست دادن حافظه زیادی به بافر های داخلی OpenSSL (38KB+ در هر ساکت) می باشید. ما OpenSSL را برای انتشار حافظه بافر استفاده نشده به صورت پویا‌‌‌‌‌‌‌‌‌‌‌‌تر پچ کرده ایم. اگر به OpenSSL 1.0.0 یا جدید تر به روز رسانی کنید، فرایند ساخت Tor به صورت خودکار این ویژگی را شناسایی کرده و از آن استفاده خواهد کرد.
  • اگر همچنان قادر به مدیریت بار حافظه نیستید، می توانید میزان پهنای‌باندی را که رله‌تان اعلام می‌کند کاهش دهید. اعلام پهنای‌باند پایین‌تر، به معنای آنست که شما کاربران کمتری را جذب خواهید کرد، پس رله‌تان زیاد بزرگ نمی‌شود. گزینهٔ MaxAdvertisedBandwidth را در صفحهٔ man ببینید.

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