Skip to content

ZeroTier — mihomo ​

mihomo می‌تواند به‌صورت یک گره فضای کاربر به یک شبکهٔ مجازی ZeroTier بپیوندد و از داخل پیکربندی پراکسی ترافیک را به آن مسیریابی کند. این گره کاملاً در فضای کاربر اجرا می‌شود — بدون سرویس ZeroTier سیستم یا دستگاه TUN هسته — و TCP/UDP را روی ip-stack داده‌شده حمل می‌کند. از planetهای خصوصی، moonها (orbit) و بازگشت به بازپخش TCP در ZeroTier پشتیبانی می‌کند.

خروجی ​

ورودی زیر proxies: با type: zerotier. این BasicOption (فیلدهای مشترک خروجی مانند dialer-proxy، interface-name، routing-mark و ip-version) را در خود جای می‌دهد.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(required)<string>نام یکتای پراکسی. در ساخت state-dir پیش‌فرض هم به کار می‌رود، پس اگر state-dir تنظیم نشده باشد تغییر نام پراکسی به گره هویتی تازه می‌دهد.
networkstring(required)<16-hex-digit network ID>شبکهٔ ZeroTier برای پیوستن، به‌صورت شناسهٔ ۱۶ رقمی هگزادسیمال شبکه.
state-dirstringzerotier/<network>-<hash of name><directory path>دایرکتوری وضعیت پایدار گره و هویت پیش‌فرض آن. نسبت به دایرکتوری کاری mihomo تفکیک می‌شود و باید درون مسیرهای امن بماند.
identity-secretstring(from state-dir)<identity.secret contents>محتوای کامل identity.secret (address:0:public-key:private-key). باید کلید خصوصی را داشته باشد. هویت ذخیره‌شده در state-dir را بازنویسی می‌کند و هرگز در آنجا نوشته نمی‌شود.
planetstring(built-in Earth planet)<planet file path>مسیر یک فایل planet خصوصی که جای سرورهای ریشهٔ داخلی را می‌گیرد (ریشه‌های خودمیزبان). هنگام راه‌اندازی خوانده و اعتبارسنجی می‌شود.
mtuint(controller MTU)1280-10000بازنویسی محلی MTU شبکهٔ مجازی. فقط می‌تواند MTU تعیین‌شده توسط کنترلر را پایین بیاورد (اگر کنترلر چیزی نفرستد 2800).
ip-stackIPStackOption(auto)IPStackOptionپشتهٔ IP فضای کاربر که ترافیک TCP/UDP شبکه را حمل می‌کند. همان بلوک صفحهٔ WireGuard است (mode، congestion-controller).
physical-mtuint1432510-10324بیشینهٔ بار UDP که ZeroTier روی شبکهٔ فیزیکی می‌فرستد.
udpboolfalsetrue | falseاجازهٔ عبور ترافیک UDP از این خروجی.
remote-dns-resolveboolfalsetrue | falseحل نام میزبان مقصد درون شبکهٔ ZeroTier، با سرورهای DNS که کنترلر ارسال می‌کند (یا dns در صورت تنظیم). اگر خاموش باشد نام‌ها با حل‌کنندهٔ معمول mihomo حل می‌شوند.
dns[]string(controller-provided)<nameserver> | …جایگزین سرورهای DNS ارسالی کنترلر. فقط وقتی remote-dns-resolve برابر true است به کار می‌رود؛ پرس‌وجوها از همین خروجی عبور می‌کنند.
low-bandwidthboolfalsetrue | falseکاهش ترافیک پس‌زمینه و دفعات تازه‌سازی پیکربندی شبکه.
encrypted-helloboolfalsetrue | falseارسال بسته‌های HELLO با رمزنگاری گسترش‌یافتهٔ ZeroTier (پروتکل 13).
primary-portint00-65535پورت UDP محلی اصلی. 0 هر پورت آزادی را برمی‌گزیند.
secondary-portint0-1 | 0-65535پورت UDP محلی دوم. 0 یک پورت آزاد برمی‌گزیند (پس از حدود دو دقیقه قطع بودن دوباره انتخاب می‌شود)؛ -1 آن را غیرفعال می‌کند. باید با primary-port متفاوت باشد.
tcp-fallback-modestringautoauto | force | disableبازگشت به بازپخش TCP. auto از UDP استفاده می‌کند و فقط پس از شکست UDP مستقیم به بازپخش می‌رود؛ force همه چیز را از بازپخش می‌فرستد؛ disable هرگز از آن استفاده نمی‌کند.
tcp-fallback-relaystring204.80.128.1:443<host:port>نشانی بازپخش TCP برای حالت بازگشت. پیش‌فرض، بازپخش عمومی ZeroTier است.
orbit[]ZeroTierOrbitOption[][ZeroTierOrbitOption]جهان‌های ریشهٔ فدرال (moon) که افزون بر planet به آن‌ها پیوسته می‌شود. هر world ID فقط یک‌بار مجاز است.
remote-trace-targetstring(unset)<10-hex-digit node ID>شناسهٔ گرهی که ردگیری‌های تشخیصی این گره را دریافت می‌کند.
remote-trace-leveluint6400 | 10 | 15 | 20 | 30میزان جزئیات ردگیری ارسالی به remote-trace-target: 0 normal، 10 verbose، 15 rules، 20 debug، 30 insane. مقادیر بیش از 30 رد می‌شوند.

منبع: adapter/outbound/zerotier.go:108-130 · ثابت‌شده در v1.19.31 (ab405ba)

orbit[] ​

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
worldstring(required)<16-hex-digit world ID>شناسهٔ world مربوط به moon.
seedstring(required)<10-hex-digit node ID>شناسهٔ گره یکی از سرورهای ریشهٔ آن moon، برای دریافت تعریف world.

منبع: adapter/outbound/zerotier.go:132-135 · ثابت‌شده در v1.19.31 (ab405ba)

بلوک ip-stack (mode، congestion-controller) در صفحهٔ WireGuard توضیح داده شده است.

مثال‌ها ​

خروجی حداقلی برای پیوستن به یک شبکه (پس از نخستین راه‌اندازی، گره را در کنترلر مجاز کنید):

yaml
proxies:
  - name: zt
    type: zerotier
    network: "0123456789abcdef"
    udp: true

هویت ثابت، DNS کنترلر برای نام‌های میزبان، و عبور ترافیک زیرین از یک پراکسی دیگر:

yaml
proxies:
  - name: zt-home
    type: zerotier
    network: "0123456789abcdef"
    identity-secret: "0123456789:0:<public-key>:<private-key>"
    remote-dns-resolve: true
    udp: true
    dialer-proxy: ss1

ریشه‌های خودمیزبان با یک moon و بازپخش TCP اجباری:

yaml
proxies:
  - name: zt-private
    type: zerotier
    network: "0123456789abcdef"
    planet: ./zerotier/planet
    orbit:
      - world: "0123456789abcdef"
        seed: "0123456789"
    tcp-fallback-mode: force

نکات ​

  • فقط مقصدهایی که درون مسیرهای تعیین‌شده توسط کنترلر شبکه باشند در دسترس‌اند؛ بقیه با "outside ZeroTier managed routes" شکست می‌خورند. برای فرستادن ترافیک عمومی از این شبکه، کنترلر باید مسیر متناظر را از طریق عضوی که نقش دروازه دارد ارسال کند.
  • state-dir به‌طور پیش‌فرض zerotier/<network>-<۱۲ رقم هگز نخست SHA-256(name)> زیر دایرکتوری کاری mihomo است، پس هر خروجی هویتی جداگانه دارد. برای حفظ همان شناسهٔ گره پس از راه‌اندازی دوباره، دایرکتوری را نگه دارید (یا identity-secret را تنظیم کنید)؛ در شبکهٔ خصوصی، شناسهٔ جدید باید دوباره مجاز شود.
  • با identity-secret پیکربندی‌شده، برخورد نشانی با گرهی دیگر با چرخاندن هویت حل نمی‌شود؛ mihomo حداکثر هر ۳۰ ثانیه دوباره تلاش می‌کند تا گره دیگر کنار برود.
  • mtu فقط MTU را کاهش می‌دهد: مقدار مؤثر، کوچک‌ترِ MTU کنترلر (محدود به 1280–10000، و 2800 اگر ارسال نشود) و mtu است.
  • dns نادیده گرفته می‌شود مگر remote-dns-resolve: true باشد. با آن، حل نام میزبان برای این خروجی از خود شبکهٔ ZeroTier به سرورهای DNS کنترلر (یا dns) می‌رود.
  • تنظیم dialer-proxy ترافیک زیرین ZeroTier را از خروجی دیگری عبور می‌دهد؛ در این حالت به‌جای سوکت‌های UDP مشترک، برای هر همتا سوکت جداگانه به کار می‌رود.
  • پشتیبانی از ZeroTier به‌طور پیش‌فرض کامپایل می‌شود. نسخه‌ای که با برچسب ساخت no_zerotier ساخته شود شکل پیکربندی را می‌پذیرد اما هنگام راه‌اندازی با "ZeroTier support is disabled" شکست می‌خورد.

نکات بین‌هسته‌ای ​

  • Xray-core و sing-box از ZeroTier پشتیبانی نمی‌کنند. نزدیک‌ترین معادل‌ها در این سایت نقطه‌انتهایی‌های VPN مش هستند: Tailscale — sing-box (یک نقطه‌انتهایی زیر endpoints[]) و WireGuard — sing-box.
  • در خود mihomo، Tailscale و EasyTier دیگر خروجی‌های شبکهٔ پوششی فضای کاربر هستند؛ WireGuard تونل‌های سادهٔ نقطه‌به‌نقطه را پوشش می‌دهد.

منبع: adapter/outbound/zerotier.go:108-130 · v1.19.31 (ab405ba)

Core Tutorial اثر Argsment