WireGuard — mihomo
خروجی WireGuard در mihomo در فضای کاربر روی یک پشتهٔ IP قابل انتخاب اجرا میشود (gVisor یا پشتهٔ mips خود mihomo — به ip-stack مراجعه کنید). طرح هم شکل سادهٔ تکهمتا (که فیلدهای همتا در ریشهٔ پراکسی قرار دارند) و هم شکل پرکلام چندهمتای از طریق peers: را ارائه میدهد. بلوک اختیاری amnezia-wg-option همکاری با سرورهای طعمگرفته از AmneziaWG را فعال میکند.
خروجی
ورودی تحت proxies: با type: wireguard. BasicOption و فیلدهای سادهٔ همتا از WireGuardPeerOption را جاسازی میکند.
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
name | string | (required) | <string> | نام یکتای پراکسی. |
ip | string | (unset) | <IPv4 CIDR> | آدرس IPv4 محلی تونل (مثلاً 10.0.0.2/32). |
ipv6 | string | (unset) | <IPv6 CIDR> | آدرس IPv6 محلی تونل. |
private-key | string | (required) | <base64 key> | کلید خصوصی محلی. |
workers | int | (CPU-based) | <int> | تعداد کارگرهای خط لولهٔ رمزنگاری. |
mtu | int | 1408 | <bytes> | MTU تونل. |
udp | bool | false | true | false | فعالسازی بازپخش UDP. |
persistent-keepalive | int | 0 | <seconds> | بازهٔ persistent-keepalive. ۰ keepalive ها را غیرفعال میکند. |
ip-stack | IPStackOption | (auto) | IPStackOption | پشتهٔ IP فضای کاربر که ترافیک TCP/UDP تونل را حمل میکند. به جدول ip-stack در زیر مراجعه کنید. |
amnezia-wg-option | *AmneziaWGOption | (unset) | AmneziaWGOption | پارامترهای مبهمسازی AmneziaWG (بستههای زباله، ماسک کردن سرآیند). |
peers | []WireGuardPeerOption | (use simplified shape) | [WireGuardPeerOption] | فهرست چندهمتای پرکلام. وقتی تنظیم شود، فیلدهای سادهٔ جاسازیشده نادیده گرفته میشوند. |
remote-dns-resolve | bool | false | true | false | تحلیل پرسوجوهای DNS از طریق تونل WireGuard با استفاده از حلکنندههای همتا. |
dns | []string | [] | [<DNS server>] | حلکنندههایی که در تونل استفاده شوند وقتی remote-dns-resolve true باشد. |
refresh-server-ip-interval | int | 0 | <seconds> | بازتحلیل نام میزبان همتا هر N ثانیه. ۰ بازتحلیل دورهای را غیرفعال میکند. |
منبع: adapter/outbound/wireguard.go:69-91 · ثابتشده در v1.19.31 (ab405ba)
peers[] — شکل چندهمتا
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
server | string | (required) | <host> | میزبان یا IP همتا. |
port | int | (required) | <port> | پورت UDP همتا. |
public-key | string | (required) | <base64 key> | کلید عمومی همتا. |
pre-shared-key | string | (unset) | <base64 key> | PSK اختیاری. |
reserved | []uint8 | (empty) | <3 bytes> | بازنویسی فیلد رزرو ۳ بایتی. |
allowed-ips | []string | [] | [<CIDR>] | Allowed-IPs برای این همتا. |
منبع: adapter/outbound/wireguard.go:93-100 · ثابتشده در v1.19.31 (ab405ba)
ip-stack
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
mode | string | auto | auto | gvisor | mips | gvisor از پشتهٔ شبکهٔ gVisor استفاده میکند (فقط در بیلدهای دارای برچسب with_gvisor؛ در غیر این صورت راهاندازی شکست میخورد)؛ mips از پشتهٔ IP خود mihomo استفاده میکند (MIPS یعنی mihomo IP stack و ربطی به معماری CPU ندارد)؛ auto اگر gVisor کامپایل شده باشد آن را برمیگزیند و در غیر این صورت mips را. |
congestion-controller | string | (stack default) | cubic | reno | bbr | bbr3 | الگوریتم کنترل ازدحام TCP برای پشتهٔ mips. gVisor آن را نادیده میگیرد. هر مقدار دیگری هنگام راهاندازی رد میشود. |
منبع: adapter/outbound/wireguard.go:143-146 · ثابتشده در v1.19.31 (ab405ba)
amnezia-wg-option
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
version | int | 0 | 3 | <other> | انتخابگر پیادهسازی. 3 به پیادهسازی AmneziaWG v3 میرود که فیلدهای مختص v3 در زیر به آن نیاز دارند؛ هر مقدار دیگر (از جمله تنظیمنشده) از پیادهسازی قدیمی v1.x/v2 استفاده میکند. |
jc | int | 0 | <int> | تعداد بستههای زباله به ازای هر دستدهی. |
jmin | int | 0 | <bytes> | حداقل اندازهٔ بستهٔ زباله. |
jmax | int | 0 | <bytes> | حداکثر اندازهٔ بستهٔ زباله. |
s1 | int | 0 | <bytes> | طول پدینگ پیش از بستهٔ init. |
s2 | int | 0 | <bytes> | طول پدینگ پیش از بستهٔ response. |
s3 | int | 0 | <bytes> | AmneziaWG v1.5+ — طول پدینگ پیش از بستهٔ cookie. |
s4 | int | 0 | <bytes> | AmneziaWG v1.5+ — طول پدینگ پیش از بستهٔ data. |
h1 | string | (unset) | <uint32> | <min-max> | ماجیک سرآیند برای بستهٔ init. فقط دهدهی — در v1.x یک uint32 واحد؛ v2+ بازهٔ min-max را نیز میپذیرد. |
h2 | string | (unset) | <uint32> | <min-max> | ماجیک سرآیند برای بستهٔ response. قالب همانند h1. |
h3 | string | (unset) | <uint32> | <min-max> | ماجیک سرآیند برای بستهٔ cookie. قالب همانند h1. |
h4 | string | (unset) | <uint32> | <min-max> | ماجیک سرآیند برای بستهٔ data. قالب همانند h1. |
i1 | string | (unset) | <tag chain> | AmneziaWG v1.5+ — بستهٔ خاص ۱، بهصورت زنجیرهٔ برچسب نوشته میشود، مثلاً <b 0xf6ab3267fa><r 100>. |
i2 | string | (unset) | <tag chain> | بستهٔ خاص ۲ (قالب همانند i1). |
i3 | string | (unset) | <tag chain> | بستهٔ خاص ۳ (قالب همانند i1). |
i4 | string | (unset) | <tag chain> | بستهٔ خاص ۴ (قالب همانند i1). |
i5 | string | (unset) | <tag chain> | بستهٔ خاص ۵ (قالب همانند i1). |
j1 | string | (unset) | <tag chain> | فقط AmneziaWG v1.5 — بستهٔ زبالهٔ ۱ (زنجیرهٔ برچسب). وقتی version برابر 3 باشد رد میشود. |
j2 | string | (unset) | <tag chain> | فقط AmneziaWG v1.5 — بستهٔ زبالهٔ ۲ (زنجیرهٔ برچسب). وقتی version برابر 3 باشد رد میشود. |
j3 | string | (unset) | <tag chain> | فقط AmneziaWG v1.5 — بستهٔ زبالهٔ ۳ (زنجیرهٔ برچسب). وقتی version برابر 3 باشد رد میشود. |
itime | int64 | 0 | <seconds> | فقط AmneziaWG v1.5 — آهنگ ارسال بستهٔ زباله. وقتی version برابر 3 باشد رد میشود. |
header-protection-key | string | (unset) | <base64 key> | AmneziaWG v3 — کلید (base64، مثلاً تولیدشده با awg genkey) برای رمزگذاری فیلدهای کمآنتروپی سرآیند. نیاز دارد s1 تا s4 دستکم 12 باشند. |
content-padding-addition | string | (unset) | <bytes> | <a-b> | AmneziaWG v3 — بازهٔ پدینگ تصادفی اضافه برای محتوای بسته، بر حسب بایت (a یا a-b). بهتر است در هر دو سمت یکسان تنظیم شود. |
rekey-after-time | string | (unset) | <seconds> | <a-b> | AmneziaWG v3 — ثانیههایی که پس از آن کلاینت دستدهی تازهای آغاز میکند (a یا a-b). |
rekey-timeout | string | (unset) | <seconds> | <a-b> | AmneziaWG v3 — ثانیههای انتظار پیش از تکرار دستدهی بیپاسخ. |
reject-after-time | string | (unset) | <seconds> | <a-b> | AmneziaWG v3 — ثانیههایی که پس از آن کلاینت دستدهی را اجباری میکند و دادهٔ ورودی نشست قدیمی را نمیپذیرد. |
keepalive-timeout | string | (unset) | <seconds> | <a-b> | AmneziaWG v3 — ثانیههایی از آخرین ارسال داده که پس از آن keepalive فرستاده میشود. |
max-handshake-attempts | string | (unset) | <int> | <a-b> | AmneziaWG v3 — بیشینهٔ دفعات تکرار دستدهی. |
random-trailers | bool | false | true | false | AmneziaWG v3.1 — دنبالههایی با طول تصادفی به انتهای بستهها میافزاید (و بستههای بلندتر از انتظار را از همتا میپذیرد). |
disable-cookies | bool | false | true | false | AmneziaWG v3.1 — حتی زیر بار هم پاسخ cookie نمیفرستد (بررسی MAC2 ضد DoS در WireGuard را رد میکند). |
منبع: adapter/outbound/wireguard.go:102-141 · ثابتشده در v1.19.31 (ab405ba)
مثالها
خروجی سادهٔ تکهمتا:
proxies:
- name: wg-simple
type: wireguard
server: wg.example.com
port: 51820
private-key: <base64>
public-key: <base64 peer key>
ip: 10.0.0.2/32
ipv6: fd00::2/128
allowed-ips: ['0.0.0.0/0', '::/0']
udp: true
persistent-keepalive: 25خروجی چندهمتا (مثلاً پیکربندی hub-and-spoke):
proxies:
- name: wg-multi
type: wireguard
private-key: <base64>
ip: 10.0.0.2/32
udp: true
peers:
- server: spoke1.example.com
port: 51820
public-key: <base64-spoke1>
allowed-ips: ['10.0.1.0/24']
- server: spoke2.example.com
port: 51820
public-key: <base64-spoke2>
allowed-ips: ['10.0.2.0/24']خروجی سازگار با AmneziaWG:
proxies:
- name: awg
type: wireguard
server: awg.example.com
port: 12345
private-key: <base64>
public-key: <base64>
ip: 10.13.13.2/32
allowed-ips: ['0.0.0.0/0']
udp: true
amnezia-wg-option:
jc: 4
jmin: 40
jmax: 80
s1: 0
s2: 0
h1: 123456
h2: 67543
h3: 123123
h4: 32345خروجی AmneziaWG v3:
proxies:
- name: awg3
type: wireguard
server: awg.example.com
port: 12345
private-key: <base64>
public-key: <base64>
ip: 10.13.13.2/32
allowed-ips: ['0.0.0.0/0']
udp: true
amnezia-wg-option:
version: 3
jc: 4
jmin: 40
jmax: 80
s1: 16
s2: 16
s3: 16
s4: 16
h1: 100000-199999
h2: 200000-299999
h3: 300000-399999
h4: 400000-499999
header-protection-key: <base64 key>
content-padding-addition: 0-32نکات
- mihomo هم شکل ساده (سطح بالا
server/port/public-key/allowed-ips) و هم فهرست پرکلامpeers:را میپذیرد. وقتیpeersتنظیم شود، فیلدهای سادهٔ جاسازیشده نادیده گرفته میشوند. remote-dns-resolve: trueباعث میشود WireGuard پرسوجوهای DNS را به حلکنندههای فهرستشده درdns:تونل کند (به جای استفاده از حلکنندهٔ محلی). زمانی مفید است که DNS محلی نتواند به مقصد دسترسی داشته باشد.refresh-server-ip-intervalفقط زمانی اهمیت دارد کهserverهمتا یک نام میزبان باشد؛ این فیلد آن را در یک بازهٔ ثابت بازتحلیل میکند، برای نقاط پایانی dynamic-DNS مفید است.- فیلدهای
amnezia-wg-optionنسخهبندی شدهاند:s3/s4/i1-i5برای AmneziaWG v1.5+ هستند؛j1/j2/j3/itimeفقط v1.5 هستند (در v2 و بالاتر به کار نمیروند)؛header-protection-key،content-padding-additionو پنج فیلد زمانبندی فقط v3 هستند وrandom-trailers/disable-cookiesبه v3.1 نیاز دارند. فیلدهای v3 بهversion: 3نیاز دارند و با فیلدهای فقط-v1.5 ترکیب نمیشوند — هر پیادهسازی پارامترهای دیگری را رد میکند. به نظرات منبع درadapter/outbound/wireguard.go:103-140مراجعه کنید. ip-stack.mode: autoدر بیلدهای دارای gVisor همان را برمیگزیند و در غیر این صورت پشتهٔmipsخود mihomo را؛congestion-controllerفقط رویmipsاثر دارد. همین بلوکip-stackدر خروجیهای OpenVPN و MASQUE در mihomo نیز وجود دارد.
نکات بینهستهای
- Xray-core همیشه از
peers:استفاده میکند (شکل ساده ندارد)، پرچمnoKernelTunرا برای مسیر سریع لینوکس ارائه میدهد و نام فیلدهایی مانندsecretKey،address،publicKey(camelCase) به کار میبرد. به WireGuard — Xray-core مراجعه کنید. - sing-box WireGuard را بهصورت نقطهانتهایی زیر
endpoints[]پیکربندی میکند، نه زیرoutbounds[]. نام فیلدها snake_case هستند (private_key،allowed_ips). به WireGuard — sing-box مراجعه کنید.
منبع: adapter/outbound/wireguard.go:69-141 · v1.19.31 (ab405ba)
