پالت فرمان

دنبال فرمانی برای اجرا بگردید…

ZarynZaryn
امکانات Zaryn·۶ دقیقه مطالعه

شبکه‌های خصوصی

لپ‌تاپ‌ها، سرورها، اجراکننده‌های CI و برنامه‌هایتان را در یک شبکهٔ خصوصی به هم وصل کنید تا هر جا که باشند مستقیم و امن به هم برسند.

یک شبکهٔ خصوصی دستگاه‌هایی را که تیمتان به کار می‌برد به هم وصل می‌کند: لپ‌تاپ‌ها، سرورها، اجراکننده‌های CI، برنامه‌های مستقر. هر دستگاه یک نشانی خصوصی می‌گیرد و دستگاه‌ها مستقیم به هم می‌رسند، حتی از پشت مودم خانه و فایروال اداره، انگار در یک شبکهٔ محلی هستند. هیچ چیز در شبکهٔ خصوصی از اینترنت دیده نمی‌شود. شبکه‌های خصوصی بخشی از **Premium** هستند. ## در یک بند: چطور کار می‌کند هر دستگاه از طریق zev، WireGuard را اجرا می‌کند؛ یک تونل رمزنگاری‌شدهٔ مدرن. نقش Zaryn معرفی دستگاه‌ها به یکدیگر است: کلیدهای عمومی و نشانی‌های بقیه را به هر کدام می‌گوید، و اینکه چه کسی اجازه دارد به چه کسی برسد. بعد دستگاه‌ها **مستقیم** به هم وصل می‌شوند. وقتی دو دستگاه نتوانند (بعضی شبکه‌ها جلویش را می‌گیرند)، ترافیکشان از یک هم‌تیمی که به هر دو می‌رسد، یا از رلهٔ Zaryn می‌گذرد که فقط بسته‌های رمزنگاری‌شده را رد می‌کند و نمی‌تواند بخواندشان. Zaryn هرگز ترافیک عمومی اینترنت شما را جابه‌جا نمی‌کند: این شبکه‌ای بین دستگاه‌های شماست، نه یک VPN برای وب‌گردی. ## ساختن شبکه در [zaryn.xyz/network](https://zaryn.xyz/network) یک شبکه بسازید (مثلاً `office`) و کسانی را که باید در آن باشند اضافه کنید. بدون قاعده، هر دستگاهِ شبکه به همهٔ دستگاه‌های دیگر می‌رسد. برای محدود کردن، در صفحهٔ شبکه قاعده اضافه کنید: چه کسی به چه کسی و روی کدام پورت‌ها برسد، بر اساس شخص، دستگاه یا برچسب (`tag:dev`، `tag:ci`). ## وصل کردن یک دستگاه روی لینوکس (با `wireguard-tools`، `iproute2` و `nftables` نصب‌شده)، با `zev login` وارد شوید و اجرا کنید: ```bash sudo zev net up your-name/office ``` در شبکه‌ای که راه Zaryn را می‌بندد، اول یکی از پروکسی‌هایتان را انتخاب کنید (`zev proxy use <name>`؛ ببینید: [استفاده از zev از راه پروکسی](/docs/fa/proxy)): `zev net up` آن را با خودش می‌برد و دستگاه از راه آن می‌پیوندد و به رله می‌رسد. دستگاه می‌پیوندد و پس از راه‌اندازی دوباره هم متصل می‌ماند (به‌صورت سرویس اجرا می‌شود). بررسی‌اش کنید: ```bash zev net status ``` ```text your-name/office zevnet0 port 41641/udp public 203.0.113.9 relay connected ● build-server 10.77.0.4 direct 198.51.100.7:41641 (12 ms) handshake 12s ago, ↓ 8.4 MB ↑ 1.2 MB ● sara-desktop 10.77.0.7 through the relay (encrypted end to end) handshake 40s ago, ↓ 310 KB ↑ 95 KB ``` `direct` یعنی دو دستگاه بی‌واسطه با هم حرف می‌زنند. «through the relay» یعنی مسیر مستقیم ممکن نبوده و بسته‌های رمزنگاری‌شده از رلهٔ Zaryn می‌گذرند؛ «through <دستگاه>» یعنی به جای آن از یک هم‌تیمی می‌گذرند (پایین‌تر را ببینید). دستگاه‌های دیگر شبکه نام دارند: `build-server.office` از هر دستگاهی روی `office` به سرور ساخت می‌رسد. ### سرورها و CI، بدون حضور یک نفر ماشینی که نمی‌تواند به‌صورت تعاملی وارد شود، با یک **کلید پیوستن** که در صفحهٔ شبکه می‌سازید وصل می‌شود: ```bash sudo zev net up --key znk_… --name ci-runner-1 --kind ci ``` ### گوشی و دستگاه‌های دیگر دستگاه‌هایی که zev را اجرا نمی‌کنند می‌توانند از برنامهٔ رسمی WireGuard استفاده کنند. برایشان پیکربندی بسازید: ```bash zev net config your-name/office --name phone ``` صفحهٔ شبکه در Zaryn می‌تواند آن را به‌صورت کد QR برای اسکن هم نشان دهد. ## وقتی دو دستگاه به هم نمی‌رسند: از راه یک هم‌تیمی بعضی شبکه‌ها جلوی حرف زدن مستقیم دو دستگاه را می‌گیرند (فایروال سخت‌گیر، فیلتری بین دو کشور، NAT دو اپراتور). پیش از رفتن سراغ رلهٔ Zaryn، zev دنبال یک **هم‌تیمی** می‌گردد: دستگاه دیگری در شبکهٔ شما که مستقیم به هر دو می‌رسد. بسته‌هایشان به جای رله از آن می‌گذرند، و همچنان با WireGuard از این سر تا آن سر رمزنگاری‌شده‌اند؛ پس هم‌تیمی نمی‌تواند بخواندشان، همان‌طور که رله نمی‌تواند. ```text ● build-server 10.77.0.4 through office-gw (a teammate; encrypted end to end) ``` Zaryn این مسیرها را از گزارش همهٔ دستگاه‌ها (چه کسی مستقیم به چه کسی می‌رسد، و با چه سرعتی) برنامه‌ریزی می‌کند، و برای هر هم‌تایی که دستگاه مستقیم به آن نمی‌رسد، دو هم‌تیمی بهتر را به آن می‌دهد. سریع‌ترینی که روشن است بسته‌ها را می‌برد، و اگر از کار بیفتد بعدی جایش را می‌گیرد. هم‌تیمی معمولاً از رلهٔ Zaryn سریع‌تر است، ترافیک شما را بین دستگاه‌های خودتان نگه می‌دارد، و وقتی رله در دسترس نیست هم کار می‌کند. دستگاه فقط بسته‌های بین دو هم‌تای خودش را که مستقیم به آن‌ها می‌رسد رد می‌کند، و هرگز به همان راهی که آمده‌اند برنمی‌گرداند. برای اینکه دستگاهی چیزی رد نکند (مثلاً لپ‌تاپی با اینترنت حجمی)، آن را با `ZEV_NET_NO_FORWARD=1` اجرا کنید. ## شکل شبکه را ببینید: zev net map `zev net map` نشان می‌دهد چه کسی به چه کسی می‌رسد، و از کار افتادن یک چیز چه هزینه‌ای دارد: ```text your-name/office 5 devices online ● build-server office-gw 3 ms ● office-gw build-server 3 ms, sara-desktop 2 ms, vps 48 ms ● sara-desktop office-gw 2 ms ● laptop vps 61 ms ● vps office-gw 48 ms, laptop 61 ms Pairs 5 direct · 4 through a teammate · 1 only through Zaryn's relay If one thing fails ! office-gw is the only direct link between parts of the network: if it goes, they fall back to the relay ! the link office-gw ↔ vps is the only one joining two parts ! 1 pair only Zaryn's relay joins; if it's unreachable, they lose each other: build-server↔laptop · the weakest seam: 1 direct link keep laptop, vps joined to the rest ``` دنبال چه می‌گردد: | | یعنی | |---|---| | **نقطهٔ شکست تنها** | دستگاهی که با از دست رفتنش پیوندهای مستقیم شبکه به چند بخش جدا تقسیم می‌شوند (*نقطهٔ برش*) | | **پیوند تنها** | تنها پیوند مستقیمی که دو بخش را به هم وصل می‌کند (*پل*) | | **ضعیف‌ترین درز** | کمترین تعداد پیوند مستقیمی که با از دست رفتنشان شبکه دو تکه می‌شود، و دستگاه‌های سمت کوچک‌تر (*برش کمینه*، با الگوریتم Stoer–Wagner) | | **تنها هم‌تیمی** | دستگاهی که برای چند جفت تنها مسیر از راه هم‌تیمی است | | **فقط رله** | جفت‌هایی که نه پیوند مستقیم دارند و نه هم‌تیمی: فقط رلهٔ Zaryn آن‌ها را به هم وصل می‌کند | افزودن یک دستگاه خوب‌وصل (یک سرور کوچک یا رایانه‌ای در دفتر که همه به آن می‌رسند) معمولاً همان چیزی است که هشدارها را برطرف می‌کند. `zev net map --json` همین را برای اسکریپت‌ها و دستیارهای هوش مصنوعی چاپ می‌کند. ## اشتراک یک برنامه با تیم چیزی را روی یک دستگاه اجرا کنید (مثلاً یک برنامهٔ وب روی پورت 3000) و با شبکه به اشتراکش بگذارید: ```bash zev net share 3000 --name web ``` هم‌تیمی‌های روی شبکه `http://web.office` را باز می‌کنند. با `--allow` تعیین کنید چه کسی بتواند بازش کند: ```bash zev net share 3000 --name web --allow tag:dev,user:sara ``` `zev net apps` برنامه‌های اشتراکی را فهرست می‌کند؛ `zev net unshare web` اشتراک را متوقف می‌کند. ## pull سریع‌تر از هم‌تیمی‌ها وقتی دستگاه‌های یک شبکه یک مخزن را pull یا کلون می‌کنند، zev آنچه را هم‌تیمی‌ها از قبل دارند مستقیم از آن‌ها و با سرعت شبکهٔ محلی می‌گیرد و هر تکه را پیش از استفاده با هشش بررسی می‌کند. بقیه مثل همیشه از Zaryn می‌آید. ## خروج ```bash sudo zev net down # قطع موقت sudo zev net down --forget # ترک شبکه روی این دستگاه ``` ## دستورات | دستور | چه می‌کند | |---|---| | `sudo zev net up <owner>/<network>` | پیوستن با ورود zev شما | | `sudo zev net up --key znk_…` | پیوستن با کلید پیوستن (سرورها، CI، برنامه‌ها) | | `sudo zev net down [<network>] [--forget]` | قطع، یا ترک | | `zev net status` | هم‌تاها، اتصال‌ها، ترافیک | | `zev net ls` | شبکه‌هایی که این دستگاه در آن‌هاست | | `zev net share <port> [--name n] [--allow …]` | اشتراک یک برنامه | | `zev net unshare <name>` / `zev net apps` | توقف اشتراک / فهرست برنامه‌های اشتراکی | | `zev net config <owner>/<network> [--name n]` | پیکربندی برای برنامه‌های WireGuard | ## خوب است بدانید - ترافیک بین دستگاه‌ها با کلیدهای WireGuard سرتاسری رمز می‌شود و این کلیدها هرگز از دستگاه بیرون نمی‌روند. - امروز لینوکس کاملاً پشتیبانی می‌شود. پشتیبانی macOS و ویندوز تازه است؛ اگر چیزی کار نکرد لطفاً به ما بگویید. - اگر طرح Premium تمام شود، شبکه مدت کوتاهی همچنان کار می‌کند و بعد تا تمدید متوقف می‌شود.