رفتن به محتوا

مفاهیمپیش‌نمایش

مسیرها و رله‌ها

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

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

امتیازدهی به مسیرها

هر مسیر ممکن از ۱۰۰ بر اساس این معیارها امتیاز می‌گیرد:

معیارچه چیزی را می‌سنجد
تأخیرزمان رفت‌وبرگشت
از دست رفتن بستهسهم بسته‌هایی که به مقصد نمی‌رسند
نوسان تأخیر (jitter)میزان تغییرات تأخیر
سرعت انتقالحجم داده‌ای که مسیر می‌تواند منتقل کند؛ وقتی اهمیت دارد اندازه گرفته می‌شود (پایین‌تر) و تا آن موقع از نوع مسیر و ترنسپورت برآورد می‌شود
پایداریثبات مسیر در طول زمان
بار رلهمیزان شلوغی رله‌ی مسیر
سربار ترنسپورتهزینه‌ی ترنسپورت؛ کمترین برای nb-udp و بیشترین برای nb-wss

اندازه‌گیری‌ها فقط از همان ping‌های نگه‌دارنده‌ای می‌آیند که نود به‌هرحال می‌فرستد، پس امتیازدهی ترافیک اضافه‌ای مصرف نمی‌کند. مسیر مستقیمِ تأییدشده بر رله ترجیح دارد، مگر اینکه یکی از رله‌های خود شبکه‌تان آشکارا سریع‌تر باشد: دست‌کم یک‌چهارم سریع‌تر و ۱۵ میلی‌ثانیه کوتاه‌تر؛ مثل رله‌ای که راه بهتری به خارج دارد. Global Relay هیچ‌وقت جای مسیر مستقیمِ سالم را نمی‌گیرد، چون ترافیکش هزینه دارد. میان مسیرهای هم‌نوع، بالاترین امتیاز برنده است و مسیری که دست‌کم یک‌پنجم سریع‌تر باشد هم جای قبلی را می‌گیرد.

مسیرهای مستقیم حاصل NAT traversal کامل‌اند: کشف پنهان‌شده‌ی endpoint، hole punching هماهنگ، port mapping (با PCP، NAT-PMP و UPnP) و کشف دستگاه‌ها در شبکه‌ی محلی، روی IPv4 و IPv6. هر نود از یک پورت آزاد تصادفی استفاده می‌کند، آن را بین راه‌اندازی‌ها نگه می‌دارد و فقط اگر آن پورت اشغال باشد، پورت تازه‌ای انتخاب می‌کند.

جابه‌جایی بین مسیرها

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

انتخاب کنید «بهترین» یعنی چه

هر شبکه یک روش انتخاب مسیر دارد که در داشبورد، در تنظیمات ← اتصال همان شبکه تعیین می‌شود. این روش مشخص می‌کند دستگاه‌ها موقع امتیازدهی به مسیرها چه چیزی را اول بگذارند:

روشچه چیزی اول استمناسب برای
خودکار (پیش‌فرض)اینکه مسیر چقدر منتقل می‌کند، بعد تأخیر و افت بسته‌اش: مسیری که خیلی سریع‌تر است برنده می‌شود، کمی سریع‌تر نه، و مسیر پرافت یا کند در پاسخ فقط با سرعت برنده نمی‌شودبیشتر شبکه‌ها
کمترین تأخیرسریع‌ترین رفت‌وبرگشتتماس، بازی، ریموت دسکتاپ
بیشترین ظرفیتاینکه مسیر چقدر می‌تواند جابه‌جا کندانتقال‌های بزرگ و بکاپ
کمترین افت بستهکمترین بسته‌ی گم‌شدهشبکه‌های ناپایدار

هر کدام را انتخاب کنید، قاعده‌های بالا سر جایشان می‌مانند: مسیر مستقیمِ سالم همچنان از رله جلوتر است، مسیرهای نزدیک به هم باعث نوسان نمی‌شوند و مسیری که از کار بیفتد فوراً کنار گذاشته می‌شود. تغییر در چند ثانیه به همه‌ی دستگاه‌های شبکه می‌رسد و خط آخر nardeboon path status روش در حال استفاده را نشان می‌دهد. دستگاه‌هایی که نسخه‌ای قدیمی‌تر از 0.1.43 دارند، تا به‌روز شدن همان «خودکار» را به کار می‌برند.

اندازه‌گیری سرعت انتقال

وقتی دستگاهی دست‌کم یک مگابیت در ثانیه برای دستگاه دیگری می‌فرستد، اندازه می‌گیرد هر مسیر چقدر می‌تواند منتقل کند: هم آنچه مسیر فعلی همین حالا جابه‌جا می‌کند، و هر چند دقیقه یک بار رشته‌ی کوتاهی از pingهای هم‌اندازه‌ی بسته‌های داده، حدود ۲۸ کیلوبایت، روی همان مسیر و روی مسیرهای هم‌نوعی که می‌توانند جایش را بگیرند. فاصله‌ی رسیدن جواب‌ها سرعت مسیر را نشان می‌دهد. برای دستگاهی که ترافیک کمی دارد، روی باتری یا روی اتصالی با حجم محدود (metered)، چیزی اندازه گرفته نمی‌شود، و مسیری که هنوز اندازه گرفته نشده نه به خاطرش امتیاز می‌گیرد نه امتیاز از دست می‌دهد. جوابی که لحظه‌ای دیر برسد یا چند جوابی که با هم برسند اندازه‌گیری را به هم نمی‌زنند: فاصله‌ها از روی همه‌ی جواب‌ها خوانده می‌شود. nardeboon path status و path explain بعد از اندازه‌گیری نشان می‌دهند هر مسیر چقدر منتقل می‌کند، و path explain --json چند اندازه‌گیری آخر را (trains_mbps).

بودجه‌ی اندازه‌گیری

اندازه‌گیری‌ها همه‌به‌همه نیستند، پس ترافیک کمی مصرف می‌کنند و روی باتری کم یا اتصال با حجم محدود (مثل اینترنت موبایل، یا اتصالی که محدود علامت خورده: روی Linux در NetworkManager، روی Windows در تنظیماتش)، از این هم کمتر می‌شوند و نود ping‌های نگه‌دارنده و جست‌وجوهایش را کِش می‌دهد. دستور nardeboon netcheck نشان می‌دهد نود روی باتری کار می‌کند یا نه و اتصالش محدود است یا نه. برای اندازه‌گیری و ارزیابی دوباره‌ی مسیرها همین حالا، nardeboon path optimize را اجرا کنید.

رله‌ها

رله قابلیت خود نود نردبون است، نه نوع جداگانه‌ای از سرور.

Global Relayرله‌ی شخصی
چیستنودهایی که کارکنان نردبون تعیین کرده‌اندنودهای خودتان، وقتی رله‌شان فعال باشد
در کدام پلن‌هاپلن‌های پولی، نه پلن رایگانهمه‌ی پلن‌ها، حتی پلن رایگان
سهمیه‌ی Global Relayاز آن کم می‌کندتأثیری نمی‌پذیرد

رله‌ی شخصی فقط درون شبکه‌ی خودش ترافیک را رله می‌کند. برای فعال کردنش، در داشبورد گزینه‌ی «از این دستگاه به‌عنوان رله هم استفاده شود» را برای آن نود تیک بزنید. روی هر نود، nardeboon status رله‌هایی را که می‌تواند از آن‌ها استفاده کند نشان می‌دهد.

رله‌ای که نشانی عمومی دارد روی یک پورت TCP مخصوص خودش هم یک «در ورودی» باز می‌کند تا دستگاه‌هایی که شبکه‌شان UDP را می‌بندد باز هم با nb-tls به آن برسند؛ کسی که بدون رمزِ شبکه‌ی شما وصل شود فقط یک سایت معمولی می‌بیند. این پورت، پورتی آزاد است که رله بین راه‌اندازی‌ها نگهش می‌دارد و هیچ‌وقت 443 یا 80 نیست، تا عدد شناخته‌شده‌ای نباشد که شبکه‌ای رویش انگشت بگذارد؛ دستگاه‌ها آن را از نقشه‌ی شبکه یاد می‌گیرند. nardeboon status روی رله پورت‌هایش را نشان می‌دهد: اگر آن دستگاه فایروال دارد، این پورت‌ها را باز کنید. با nardeboond -front-port می‌توانید پورت در ورودی را خودتان تعیین کنید (هر پورتی جز 443 و 80)، و -front off در را بسته نگه می‌دارد.

دستگاهی که روی شبکه‌ای است که اتصالِ شروع‌شده از خودِ دستگاه را قطع می‌کند، نمی‌تواند اول به رله سلام کند؛ پس وقتی سرور کنترل بگوید، رله همان‌جا که دستگاه هست به آن سلام می‌کند: حتی وقتی کشورش آدرس یک رله را بسته، می‌تواند از رله‌های شما و Global Relayها رد شود. ترنسپورت‌ها را ببینید.

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

رله‌های اهدایی

بعضی از Global Relayها سرورهایی هستند که افرادی بیرون از نردبون برای استفاده‌ی همه داده‌اند. یک شبکه فقط وقتی از آن‌ها استفاده می‌کند که «رله‌های اهدایی» را روشن کند (در تنظیمات ← اتصال شبکه)؛ این گزینه به‌طور پیش‌فرض خاموش است و پلنی می‌خواهد که Global Relay داشته باشد. همان قوانین رله‌های خود نردبون برایشان برقرار است: ترافیک شما سرتاسر رمز می‌ماند و نمی‌توانند آن را بخوانند، و به دستگاه‌های شما یا هیچ چیز دیگری دسترسی ندارند. چیزی که می‌بینند همان است که هر رله‌ای می‌بیند: آدرس عمومی دستگاه‌هایتان، و اینکه کی و چقدر می‌فرستند. وقتی خاموش است، شبکه‌هایتان هیچ‌وقت از آن‌ها استفاده نمی‌کنند، از وجودشان خبردار نمی‌شوند و آدرس دستگاه‌هایشان هرگز به آن‌ها داده نمی‌شود.

سهمیه‌ی Global Relay

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

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

سنجاق کردن مسیر

مدیر شبکه می‌تواند مسیر بین دو دستگاه را در داشبورد سنجاق کند: در زبانه‌ی مسیرهای شبکه، بخش مسیرهای سنجاق‌شده. مسیر یا مستقیم است، یا از طریق یکی از رله‌های شبکه، یا از طریق یک Global Relay در منطقه‌ای که انتخاب می‌کنید. هر دو دستگاه تا وقتی مسیر سنجاق‌شده جواب می‌دهد از همان به هم وصل می‌شوند. وقتی جواب ندهد، مثل همیشه مسیر را انتخاب می‌کنند و به محض اینکه دوباره جواب بدهد به آن برمی‌گردند؛ پس سنجاق هیچ‌وقت اتصالی را قطع نمی‌کند. سنجاق کردن مسیر پلنی می‌خواهد که آن را شامل شود.

روی خودِ یک دستگاه هم می‌توانید مسیرش به یک دستگاه دیگر را سنجاق کنید، مثلاً برای امتحان یک مسیر یا عیب‌یابی:

sudo nardeboon path pin hetzner tr1
sudo nardeboon path pin hetzner direct
sudo nardeboon path pin hetzner germany

مسیر یا direct است، یا اسم یکی از رله‌های شبکه، یا اسم یا کد منطقه‌ی یک Global Relay. سنجاقِ خودِ دستگاه، فقط روی همان دستگاه، به سنجاقی که شبکه برای همان دستگاه مقابل گذاشته اولویت دارد؛ sudo nardeboon path unpin hetzner آن را برمی‌دارد. nardeboon path status مسیرهای سنجاق‌شده را فهرست می‌کند و می‌گوید کدام مسیر سنجاق‌شده جواب نمی‌دهد، و nardeboon path explain <peer> می‌گوید چرا مسیر همان‌جاست که هست.

مسیر در حال استفاده

دستور nardeboon path status مسیر، ترنسپورت و رله‌ی هر همتا را نشان می‌دهد، و تا وقتی مسیر جواب می‌دهد، کیفیت لحظه‌ای آن را؛ همتایی که مدتی ترافیکی با آن نبوده idle است و مسیرش تا ترافیک بعدی اندازه گرفته نمی‌شود:

$ nardeboon path status
PEER      STATE    PATH                          TRANSPORT   RTT     LOSS   JITTER   CAPACITY     FEC
hetzner   active   via Frankfurt (Global Relay)  nb-udp      96 ms   0.1%   3 ms     48 Mbit/s    -
laptop    active   direct                        nb-udp      1 ms    0.0%   1 ms     610 Mbit/s   -
nas       idle     direct                        nb-udp      -       -      -        -            -

دستور nardeboon path explain <peer> همه‌ی مسیرهای ممکن و دلیل انتخاب را نشان می‌دهد، و همه‌ی رله‌هایی را که دستگاه می‌تواند از آن‌ها استفاده کند، با دلیلِ امتحان‌نشدنِ آن‌هایی که دستگاه به آن‌ها وصل نیست:

$ nardeboon path explain hetzner
PATH                          TRANSPORT   RTT     LOSS   JITTER   CAPACITY    SCORE
via Frankfurt (Global Relay)  nb-udp      96 ms   0.1%   3 ms     48 Mbit/s   84  ✓ chosen
via am-vps                    nb-udp      93 ms   1.6%   9 ms     12 Mbit/s   79
direct 203.0.113.9:41641      nb-udp      -       -      -        -           no path

Chose via Frankfurt (Global Relay): the best overall score of the paths that work.

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

بعداً

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