Skip to content

EasyTier — mihomo ​

mihomo یک گره EasyTier را در خود جای می‌دهد و ترافیک را به شبکهٔ پوششی مش و غیرمتمرکز آن مسیریابی می‌کند. این گره در فضای کاربر و بدون دستگاه TUN اجرا می‌شود (mihomo همیشه no_tun را اجباری و اتصال به دستگاه را خاموش می‌کند)، و همهٔ اتصال‌های زیرین آن از شماره‌گیر خود mihomo می‌گذرند، پس dialer-proxy، interface-name و routing-mark روی آن‌ها اعمال می‌شوند. شبکهٔ پوششی فقط IPv4 است.

خروجی ​

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

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(required)<string>نام یکتای پراکسی. همچنین instance-name پیش‌فرض، بخشی از state-dir پیش‌فرض و نامی است که سرورهای DNS از نوع et:// به آن ارجاع می‌دهند.
network-namestring(required)<string>نام شبکهٔ EasyTier. گره‌ها فقط وقتی نام و رمز یکسان باشد به یک شبکهٔ پوششی می‌پیوندند.
network-secretstring(empty)<string>رمز مشترک شبکه. secure-mode به رمز غیرخالی نیاز دارد.
hostnamestring(core default)<string>نام میزبانی که این گره در شبکهٔ پوششی اعلام می‌کند؛ گره‌های دیگر با <hostname> یا <hostname>.<tld-dns-zone> به آن دسترسی دارند.
ipv4string(DHCP)<IPv4 CIDR>IPv4 ثابت شبکهٔ پوششی همراه با پیشوند، مثلاً 10.144.0.1/24. اگر خالی باشد DHCP خودکار روشن می‌شود.
dhcpbooltrue when ipv4 is emptytrue | falseدریافت خودکار نشانی IPv4 شبکهٔ پوششی.
peers[]string[]<peer URI> | …همتاها یا بازپخش‌هایی که به آن‌ها وصل می‌شوید، مثلاً tcp://192.0.2.10:11010 یا udp://…. با افزودن ?peer-public-key=<base64 X25519 key> کلید همتا را قفل کنید. وقتی گره شنونده ندارد الزامی است؛ public.easytier.top هرگز به‌طور ضمنی به کار نمی‌رود.
listeners[]string[]<listener URI> | …URIهای شنوندهٔ محلی مانند tcp://0.0.0.0:11010 تا گره‌های دیگر به این گره وصل شوند. با no-listener: true قابل ترکیب نیست.
no-listener*bool(no listeners)true | falsetrue (یا تنظیم‌نشده با listeners خالی) هیچ شنونده‌ای باز نمی‌کند. false صریح با listeners خالی، شنوندهٔ پیش‌فرض tcp://0.0.0.0:11010 را باز می‌کند.
mapped-listeners[]string[]<listener URI> | …نشانی‌های شنوندهٔ قابل دسترس از بیرون که به گره‌های دیگر اعلام می‌شوند، مثلاً وقتی پورتی روی دروازهٔ NAT فوروارد شده است.
exit-nodes[]string[]<overlay IPv4> | …نشانی‌های IPv4 شبکهٔ پوششیِ گره‌هایی که برای مقصدهای بیرون از شبکهٔ پوششی نقش گره خروج دارند.
proxy-networks[]string[]<CIDR> | …زیرشبکه‌هایی که این گره از طریق پراکسی زیرشبکهٔ EasyTier در اختیار بقیهٔ شبکهٔ پوششی می‌گذارد.
instance-namestring(proxy name)<string>نام نمونهٔ EasyTier تعبیه‌شده.
state-dirstringeasytier/<name><directory path>دایرکتوری ذخیرهٔ شناسهٔ نمونه، تا گره پس از راه‌اندازی دوباره همان نمونه را نگه دارد. نسبت به دایرکتوری کاری mihomo تفکیک می‌شود.
udpboolfalsetrue | falseاجازهٔ عبور ترافیک UDP از این خروجی.
accept-dns*bool(core default)true | falseبه‌عنوان کلید Magic DNS به هستهٔ EasyTier داده می‌شود. جست‌وجوی نام شبکهٔ پوششی در خود mihomo (بخش نکات) در هر حالت کار می‌کند.
enable-exit-node*bool(core default)true | falseاجازه به گره‌های دیگر برای استفاده از این گره به‌عنوان گره خروج.
enable-encryption*bool(core default)true | falseرمزنگاری ترافیک شبکهٔ پوششی میان همتاها.
encryption-algorithmstring(core default)aes-gcm | <EasyTier algorithm name>الگوریتم رمز هنگام فعال بودن رمزنگاری. پیکربندی نمونهٔ بالادست aes-gcm را به کار می‌برد.
private-mode*bool(core default)true | falseفقط به گره‌های همان شبکه اجازهٔ دست‌دهی با این گره یا بازپخش از طریق آن را بده.
latency-first*bool(core default)true | falseترجیح مسیر با کمترین تأخیر به‌جای مسیر با کمترین گام.
disable-p2p*bool(core default)true | falseاتصال مستقیم همتا‌به‌همتا برقرار نشود؛ ترافیک فقط از همتاهای بازپخش‌کننده عبور می‌کند.
enable-kcp-proxy*bool(core default)true | falseحمل TCP پراکسی‌شده روی KCP میان همتاها (در پیوندهای پراتلاف مفید است).
disable-kcp-input*bool(core default)true | falseرد کردن اتصال‌های پراکسی‌شده با KCP از همتاهای دیگر.
enable-quic-proxy*bool(core default)true | falseحمل TCP پراکسی‌شده روی QUIC میان همتاها.
disable-quic-input*bool(core default)true | falseرد کردن اتصال‌های پراکسی‌شده با QUIC از همتاهای دیگر.
mtuint(core default)<bytes>MTU شبکهٔ پوششی. فقط وقتی بزرگ‌تر از 0 باشد ارسال می‌شود.
tld-dns-zonestringet.net.<DNS zone>ناحیهٔ Magic DNS برای نام‌های میزبان شبکهٔ پوششی.
secure-mode*bool(auto)true | falseرمزنگاری سرتاسری مبتنی بر Noise میان گره‌ها. وقتی کلیدهای محلی یا peer-public-key پیکربندی شوند خودکار روشن می‌شود؛ false صریح همراه با چنین کلیدهایی خطاست.
local-private-keystring(generated)<base64 X25519 private key>هویت secure-mode این گره را ثابت می‌کند تا کلید عمومی آن بین راه‌اندازی‌ها عوض نشود.
local-public-keystring(derived)<base64 X25519 public key>کلید عمومی متناظر. معمولاً از local-private-key به دست می‌آید؛ تنظیم آن به‌تنهایی خطاست.

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

مثال‌ها ​

خروجی حداقلی که از طریق دو همتا به شبکه می‌پیوندد:

yaml
proxies:
  - name: et
    type: easytier
    network-name: example
    network-secret: secret
    peers:
      - tcp://192.0.2.10:11010
      - udp://192.0.2.11:11010
    udp: true

نشانی ثابت، کلید قفل‌شدهٔ بازپخش (که secure mode را روشن می‌کند) و حل نام‌های شبکهٔ پوششی توسط mihomo:

yaml
proxies:
  - name: et-office
    type: easytier
    network-name: office
    network-secret: secret
    hostname: mihomo
    ipv4: 10.144.0.5/24
    peers:
      - "tcp://relay.example.com:11010?peer-public-key=<base64-x25519-public-key>"
    local-private-key: "<base64-x25519-private-key>"
    exit-nodes: ["10.144.0.1"]

dns:
  nameserver-policy:
    "+.et.net": et://et-office

نکات ​

  • network-name الزامی است. گرهی که peers ندارد باید شنونده داشته باشد، وگرنه پیکربندی رد می‌شود — mihomo هرگز به گره عمومی public.easytier.top بازنمی‌گردد.
  • منطق شنونده: شنونده‌ها به‌طور پیش‌فرض بسته‌اند. برای باز کردن شنونده‌های مشخص listeners را تنظیم کنید، یا با listeners خالی مقدار no-listener: false را بگذارید تا شنوندهٔ پیش‌فرض tcp://0.0.0.0:11010 باز شود. no-listener: true همراه با listeners خطاست.
  • شماره‌گیری‌ها درون شبکهٔ پوششی می‌مانند و هرگز به شبکهٔ میزبان بازنمی‌گردند. مقصد باید نشانی IPv4 شبکهٔ پوششی، زیرشبکه‌ای که گره‌های دیگر با proxy-networks در دسترس گذاشته‌اند، یا — با exit-nodes — نشانی قابل دسترس از طریق گره خروج باشد. مقصدهای IPv6 رد می‌شوند؛ ip-version فقط بر اتصال‌های زیرین همتا اثر دارد.
  • جست‌وجوی نام میزبان: نام‌هایی که با یک گره شبکهٔ پوششی تطبیق دارند (<hostname> یا <hostname>.<tld-dns-zone>) از جدول مسیر شبکهٔ پوششی حل می‌شوند. نام‌های دیگرِ زیر آن ناحیه با "not found" شکست می‌خورند؛ بقیه با حل‌کننده‌ای که mihomo برای نام سرورهای پراکسی به کار می‌برد حل می‌شوند.
  • DNS: یک nameserver به شکل et://<proxy-name> (یا easytier://<proxy-name>) به پرس‌وجوهای A و PTR شبکهٔ پوششی از همان خروجی پاسخ می‌دهد (TTL برابر ۶۰ ثانیه؛ نام‌های ناشناخته NXDOMAIN می‌گیرند). برای مدخل‌های nameserver-policy که ناحیهٔ Magic DNS را پوشش می‌دهند مناسب است، نه به‌عنوان حل‌کنندهٔ عمومی — DNS را ببینید.
  • وقتی local-private-key / local-public-key را تنظیم کنید یا peer-public-key را به URI یک همتا بیفزایید، secure mode خودبه‌خود روشن می‌شود. به network-secret غیرخالی نیاز دارد. local-private-key را ثابت کنید تا کلید عمومی گره بین راه‌اندازی‌ها ثابت بماند.
  • state-dir (پیش‌فرض easytier/<name>) فقط شناسهٔ نمونه را نگه می‌دارد؛ نشانی شبکهٔ پوششی از ipv4 یا DHCP می‌آید.
  • پرچم‌های اختیاری تنظیم‌نشده، پیش‌فرض‌های هستهٔ EasyTier تعبیه‌شده را حفظ می‌کنند.
  • پشتیبانی از EasyTier به‌طور پیش‌فرض کامپایل می‌شود. نسخه‌ای که با برچسب ساخت no_easytier ساخته شود شکل پیکربندی را می‌پذیرد اما هنگام راه‌اندازی با "EasyTier support is disabled" شکست می‌خورد.

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

  • Xray-core و sing-box از EasyTier پشتیبانی نمی‌کنند. نزدیک‌ترین معادل‌ها در این سایت نقطه‌انتهایی‌های VPN مش هستند: Tailscale — sing-box و WireGuard — sing-box.
  • در خود mihomo، Tailscale و ZeroTier دیگر خروجی‌های شبکهٔ پوششی فضای کاربر هستند. nameserver از نوع ts://<proxy-name> در Tailscale همتای et:// است.

منبع: adapter/outbound/easytier.go:51-84 · v1.19.31 (ab405ba)

Core Tutorial اثر Argsment