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

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

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

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

برای دستور العمل روی پورت فورواردینگ با دستگاه روتر/NAT خود portforward.com را ببینید.

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

همچنین، این یک نمونه از نحوه کار روی گنو/لینوکس است اگر در حال استفاده از iptables می‌باشید:

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

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

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

Tor پهنای باند را در کل شبکه مدیریت می‌کند. برای اکثر رله‌ها عملکرد معقولی دارد. اما اهداف Tor با پروتکل‌هایی مانند بیت‌تورنت متفاوت است. Tor صفحات وب با تاخیر کم که به اتصال سریع با headroom نیاز دارند را می‌خواهد. بیت‌تورنت دانلود انبوه می‌خواهد که نیاز به استفاده از تمام پهنای‌باند را دارد.

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

چرا 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.

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

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

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

پیدا کردن محدودیت رله

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • آزمایشی را با استفاده از Tor انجام دهید تا ببینید Tor با چه سرعتی می‌تواند روی شبکه/CPU شما وارد شود.
  • آزمایشی را با استفاده از Tor و chutney انجام دهید تا بفهمید Tor با چه سرعتی می‌تواند روی CPU شما قرار بگیرد. به افزایش حجم داده‌ها ادامه دهید تا زمانی که افزایش پهنای‌باند متوقف شود.

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

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

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

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

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

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

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

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

  • یک فایل کلید خصوصی هویت اولیه ed25519 با نام "ed25519_master_id_secret_key" وجود دارد. این از همه بیشتر اهمیت دارد، بنابراین مطمئن شوید که یک پشتیبان از آن در یک جای امن دارید - فایل حساس است و باید از آن محافظت شود. Tor می تواند آن را برای شما رمزگذاری کند اگر آن را به صورت دستی تولید کنید و گذرواژه را هنگامی که خواسته شد وارد کنید.
  • یک کلید امضا به نام "ed25519_signing_secret_key" برای استفاده Tor تولید می شود. همچنین یک گواهی به نام "ed25519_signing_cert" تولید می‌شود که توسط کلید خصوصی هویت اولیه امضا شده و تایید می‌کند که کلید امضای میان مدت برای مدت زمان معینی معتبر است. اعتبار پیش فرض 30 روز است، اما این می‌تواند با سفارشی کردن تنظیم "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 سؤال کنید.

  • از بسته های در مخزن اوبونتو استفاده نکنید. آن ها به طرز قابل اعتمادی به روز رسانی نمی شوند. اگر از آن ها استفاده می کنید، از اصلاحات مهم امنیتی و پایداری بهره نخواهید برد.
  • نسخه اوبونتو خود را با اجرای فرمان زیر تعیین کنید:
     ‪$ 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 شروع به افت و اضافه‌بار ایجاد کند.

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

مقادیر ntor و ntor_v3 در حال حاضر یکسان خواهند بود که اشکالی است که باید درست کنیم.

tor_relay_exit_dns_error_total{...}

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

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

tor_relay_load_oom_bytes_total{...}

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

Tor کنترل کننده OOM خود را دارد و زمانی فراخوانی می‌شود که 75٪ از کل حافظه 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 می‌تواند توسط خود کنترل کننده OS OOM فراخوانی شود. از آنجایی که Tor کل حافظه سیستم را هنگام راه‌اندازی می‌گیرد، اگر سیستم در مجموع برنامه‌های زیادی را با استفاده از RAM در حال اجرا داشته باشد، حافظه بیش از حد مصرف می‌کند. در این مورد، سیستم عامل می‌تواند بدون اینکه حتی فشار حافظه را متوجه شود، OOM 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 قدیمی اشاره می‌کنند.

اگر مشکل را برطرف نکرد، شما باید از گزینهٔ پیکربندی «نشانی» برای تعیین IP مورد انتخابتان استفاده کنید. اگر رایانهٔ شما پشت یک NAT قرار دارد و تنها یک نشانی IP داخلی دارد، مدخل پشتیبانی زیر دربارهٔ نشانی‌های IP پویا را ببینید.

همچنین، اگر نشانی‌های زیادی دارید، شاید بخواهید "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 نیز تحت تاثیر قرار می‌گیرند.

هنگام ارتقای رلهٔ Tor خود، یا انتقال آن به رایانهٔ دیگر، نکتهٔ مهم حفظ همان کلیدهای هویت است (نگهداشته‌شده در "keys/ed25519_master_id_secret_key" و "keys/secret_id_key" در DataDirectory شماست). حفظ پشتیبان‌های کلیدهای هویت، برای اینکه بتوانید در آینده رله را بازنشانی کنید توصیه می‌شود تا خوشنامی رله از بین نرود.

این یعنی اگر شما در حال ارتقا رله Tor خود هستید و همان torrc و همان DataDirectory را نگه می دارید، بنابراین ارتقا باید کار کند و رله شما از همان کلید استفاده خواهد کرد. اگر نیاز به انتخاب یک DataDirectory جدید دارید، اطمینان حاصل کنید که keys/ed25519_master_id_secret_key و keys/secret_id_key قبلی را کپی کرده اید.

اگر شما یک اپراتور پل هستید، همچنین مطمئن شوید که pt_state/ را کپی کنید. این مورد شامل داده مورد نیاز پل شما برای ادامهٔ کار با همان خط پل است.

توجه: در 0.2.7 Tor ما از هویت‌های نسل جدید برای رله‌ها، مبتنی بر رمزنگاری منحنی بیضوی ed25519 استفاده می‌کنیم. در نهایت آن ها جایگزین هویت های RSA می شوند، اما این در گذر زمان اتفاق خواهد افتاد، برای اینکه تطابق و سازگاری با نسخه های قدیمی تر تضمین شود. تا آن زمان، هر رله هم یک هویت ed25519 (فایل کلید هویت:keys/ed25519_master_id_secret_key) و یک هویت RSA (فایل کلید هویت: keys/secret_id_key) خواهد داشت. شما باید از هردو آن‌ها کپی/پشتیبان بگیرید تا بتوانید رلهٔ خود را بازگردانی کنید، DataDirectory خود را تغییر دهید یا رله را به رایانه‌ای جدید منتقل کنید.

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

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

اگر از دبیان یا اوبونتو استفاده می‌کنید، نصب Tor از مخزن پروژه Tor مزایای زیادی دارد.

  • ulimit -n شما روی 32768 تنظیم می شود که برای Tor به اندازه کافی برای باز نگه داشتن تمام اتصال هایی که به آن ها نیاز دارد کافی است.
  • یک پروفایل کاربر فقط برای Tor ایجاد می شود، بنابراین نیازی نیست Tor به صورت root اجرا شود.
  • یک اسکریپت init قرار داده شده تا Tor در حالت بوت اجرا شود.
  • Tor با --verify-config اجرا می شود، بدین شکل بیشتر مشکلات فایل کانفیگ شما گرفته می شود.
  • Tor می تواند به درگاه‌های سطح پایین متصل شود، سپس حق‌های ویژه خود را از دست دهد.

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

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

به هر حال، شما باید امنیت خود را به روز نگه دارید.این مقاله را روی امنیت برای رله های 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 شما از مقداری بیشتر از آنچه تمایل دارید از حافظه استفاده می کنید، اینها نکاتی برای کاهش جاگیری آن میباشد:

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

با وجود همه این ها، رله های سریع Tor از مقدار زیادی ram استفاده می کنند. برای یک رله خروجی سریع غیرعادی نیست که 500-1000 مگابایت حافظه استفاده کند.