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) را در خود جای میدهد.
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
name | string | (required) | <string> | نام یکتای پراکسی. همچنین instance-name پیشفرض، بخشی از state-dir پیشفرض و نامی است که سرورهای DNS از نوع et:// به آن ارجاع میدهند. |
network-name | string | (required) | <string> | نام شبکهٔ EasyTier. گرهها فقط وقتی نام و رمز یکسان باشد به یک شبکهٔ پوششی میپیوندند. |
network-secret | string | (empty) | <string> | رمز مشترک شبکه. secure-mode به رمز غیرخالی نیاز دارد. |
hostname | string | (core default) | <string> | نام میزبانی که این گره در شبکهٔ پوششی اعلام میکند؛ گرههای دیگر با <hostname> یا <hostname>.<tld-dns-zone> به آن دسترسی دارند. |
ipv4 | string | (DHCP) | <IPv4 CIDR> | IPv4 ثابت شبکهٔ پوششی همراه با پیشوند، مثلاً 10.144.0.1/24. اگر خالی باشد DHCP خودکار روشن میشود. |
dhcp | bool | true when ipv4 is empty | true | 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 | false | true (یا تنظیمنشده با 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-name | string | (proxy name) | <string> | نام نمونهٔ EasyTier تعبیهشده. |
state-dir | string | easytier/<name> | <directory path> | دایرکتوری ذخیرهٔ شناسهٔ نمونه، تا گره پس از راهاندازی دوباره همان نمونه را نگه دارد. نسبت به دایرکتوری کاری mihomo تفکیک میشود. |
udp | bool | false | true | 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-algorithm | string | (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 از همتاهای دیگر. |
mtu | int | (core default) | <bytes> | MTU شبکهٔ پوششی. فقط وقتی بزرگتر از 0 باشد ارسال میشود. |
tld-dns-zone | string | et.net. | <DNS zone> | ناحیهٔ Magic DNS برای نامهای میزبان شبکهٔ پوششی. |
secure-mode | *bool | (auto) | true | false | رمزنگاری سرتاسری مبتنی بر Noise میان گرهها. وقتی کلیدهای محلی یا peer-public-key پیکربندی شوند خودکار روشن میشود؛ false صریح همراه با چنین کلیدهایی خطاست. |
local-private-key | string | (generated) | <base64 X25519 private key> | هویت secure-mode این گره را ثابت میکند تا کلید عمومی آن بین راهاندازیها عوض نشود. |
local-public-key | string | (derived) | <base64 X25519 public key> | کلید عمومی متناظر. معمولاً از local-private-key به دست میآید؛ تنظیم آن بهتنهایی خطاست. |
منبع: adapter/outbound/easytier.go:51-84 · ثابتشده در v1.19.31 (ab405ba)
مثالها
خروجی حداقلی که از طریق دو همتا به شبکه میپیوندد:
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:
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)
