TUN — mihomo
tun: در mihomo یک بلوک پیکربندی سطح بالا است (نه یک ورودی listeners:). طرحواره تقریباً مشابه ورودی TUN در sing-box است (پیادهسازی mihomo از sing-box مشتق شده است) با چند افزودنی مخصوص mihomo: dns-hijack صریح، فیلتر آدرس MAC، کلید حذف ICMP و پرچمهای بهینهسازی recvmsg_x/sendmsg_x در Darwin.
بلوک سطح بالای tun:
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
enable | bool | false | true | false | کلید اصلی. وقتی false باشد بقیهٔ بلوک نادیده گرفته میشود. |
device | string | (auto) | <interface name> | نام دستگاه TUN. |
stack | C.TUNStack | mixed | system | gvisor | mixed | مشابه sing-box: انتخاب پشتهٔ TCP/IP. |
dns-hijack | []string | [] | [<address>] | آدرسهایی که باید بهعنوان DNS ربوده شوند — UDP خروجی به این نقاط پایانی به موتور DNS داخلی تغییر مسیر داده میشود. مقدار استاندارد: `[any:53]` (همه را بگیرد). |
auto-route | bool | false | true | false | نصب خودکار مسیرهای سیستمعامل. |
auto-detect-interface | bool | false | true | false | کشف خودکار رابط خروجی پیشفرض — برای حذف ترافیک متصل به TUN از ورود مجدد به TUN استفاده میشود. |
mtu | uint32 | 0 (auto) | <bytes> | MTU دستگاه. ۰ یک مقدار پیشفرض معقول را انتخاب میکند (۹۰۰۰ در اکثر سکوها). |
gso | bool | false | true | false | Generic Segmentation Offload (Linux). وقتی کرنل پشتیبانی میکند بازدهی را بهبود میبخشد. |
gso-max-size | uint32 | 65536 | <bytes> | حداکثر اندازهٔ سگمنت وقتی GSO فعال است. |
inet6-address | []netip.Prefix | [] | <CIDR> | آدرسهای IPv6 برای اختصاص به دستگاه. IPv4 از فیلد `inet4-address` سطح بالا استفاده میکند (در حال حاضر در منبع کامنت شده — به `config/config.go:278` مراجعه کنید). |
iproute2-table-index | int | 2022 | <int> | شاخص جدول iproute2 در Linux. |
iproute2-rule-index | int | 9000 | <int> | شاخص قاعدهٔ iproute2 در Linux. |
auto-redirect | bool | false | true | false | auto-redirect مبتنی بر NFTables در Linux (سریعتر از auto-route در مسیرهای پرترافیک). |
auto-redirect-input-mark | uint32 | 0 | <uint32> | fwmark روی بستههای متصل به TUN. |
auto-redirect-output-mark | uint32 | 0 | <uint32> | fwmark روی بستههای خروجی TUN. |
auto-redirect-iproute2-fallback-rule-index | int | 0 | <int> | شاخص قاعدهٔ جایگزین وقتی auto-redirect نمیتواند نصب شود. |
loopback-address | []netip.Addr | [] | <IP> | آدرسهایی که بهعنوان loopback در نظر گرفته میشوند. |
strict-route | bool | false | true | false | ترافیکی را که در غیر این صورت TUN را دور میزند مسدود میکند (معنای kill-switch). |
route-address | []netip.Prefix | [] | <CIDR> | وقتی `auto-route` فعال است، فقط این CIDRها از طریق TUN مسیریابی میشوند. |
route-address-set | []string | [] | <rule-provider name> | گنجاندن از طریق rule-provider. |
route-exclude-address | []netip.Prefix | [] | <CIDR> | CIDRهایی که باید روی رابط پیشفرض باقی بمانند. |
route-exclude-address-set | []string | [] | <rule-provider name> | حذف از طریق rule-provider. |
include-interface | []string | [] | <interface> | فقط به این رابطها متصل شو. |
exclude-interface | []string | [] | <interface> | این رابطها را حذف کن. |
include-uid | []uint32 | [] | <uid> | گنجاندن UID. |
include-uid-range | []string | [] | <from:to> | گنجاندن بازهٔ UID. |
exclude-uid | []uint32 | [] | <uid> | حذف UID. |
exclude-uid-range | []string | [] | <from:to> | حذف بازهٔ UID. |
exclude-src-port | []uint16 | [] | <port> | حذف پورت منبع. |
exclude-src-port-range | []string | [] | <from:to> | حذف بازهٔ پورت منبع. |
exclude-dst-port | []uint16 | [] | <port> | حذف پورت مقصد. |
exclude-dst-port-range | []string | [] | <from:to> | حذف بازهٔ پورت مقصد. |
include-android-user | []int | [] | <user id> | گنجاندن کاربر چندگانهٔ Android. |
include-package | []string | [] | <package name> | گنجاندن بستهٔ Android. |
exclude-package | []string | [] | <package name> | حذف بستهٔ Android. |
include-mac-address | []string | [] | <MAC> | گنجاندن مبتنی بر MAC (مخصوص mihomo، در sing-box وجود ندارد). |
exclude-mac-address | []string | [] | <MAC> | حذف مبتنی بر MAC. |
endpoint-independent-nat | bool | false | true | false | فعالسازی endpoint-independent NAT برای UDP. توسط برخی بازیها / برنامههای VoIP الزامی است. |
udp-timeout | int64 | 300 | <seconds> | زمان انتظار بیکاری UDP بر حسب ثانیه. |
disable-icmp-forwarding | bool | false | true | false | بستههای ICMP را در لایهٔ TUN رها کن (مخصوص mihomo). |
file-descriptor | int | 0 | <fd> | بهجای ایجاد دستگاه TUN، از یک file descriptor از پیش بازشده استفاده کن. برای ادغام با سرویس VPN که سیستمعامل fd را به شما میدهد مفید است. |
inet4-route-address | []netip.Prefix | — | — | |
inet6-route-address | []netip.Prefix | — | — | |
inet4-route-exclude-address | []netip.Prefix | — | — | |
inet6-route-exclude-address | []netip.Prefix | — | — | |
recvmsgx | bool | false | true | false | فقط Darwin — از syscall recvmsg_x برای batching استفاده کن. |
sendmsgx | bool | false | true | false | فقط Darwin — از sendmsg_x استفاده کن. |
منبع: config/config.go:267-320 · ثابتشده در v1.19.24 (a847246)
انتخاب پشته
مشابه sing-box:
system— TCP/IP کرنل. سریعترین، نیازمند پشتیبانی TUN در کرنل.gvisor— پشتهٔ فضای کاربری. کندتر، قابل حمل.mixed— gVisor برای TCP، system برای UDP. پیشفرض.
DNS hijack
dns-hijack روش اصطلاحی mihomo برای مسیریابی پرسوجوهای DNS از طریق حلکنندهٔ داخلی است:
tun:
enable: true
dns-hijack:
- any:53 # All UDP/53 traffic
- tcp://any:53 # And TCP/53
- 8.8.8.8:53 # Specific server onlyاین در لایهٔ TUN پیاده میشود — بستههای DNS قبل از رسیدن به قواعد مسیریابی متوقف میشوند. سریعتر از اجرای یک ورودی UDP روی ۵۳ و مسیریابی برگشتی از طریق قواعد است.
مثالها
پراکسی شفاف رومیزی:
tun:
enable: true
device: mihomo-tun
stack: mixed
mtu: 9000
dns-hijack:
- any:53
- tcp://any:53
auto-route: true
auto-detect-interface: true
strict-route: true
route-address:
- 0.0.0.0/1
- 128.0.0.0/1
- ::/1
- 8000::/1
route-exclude-address:
- 192.168.0.0/16
- 10.0.0.0/8auto-redirect مبتنی بر NFTables در Linux:
tun:
enable: true
device: utun0
stack: system
dns-hijack: [any:53]
auto-redirect: true
auto-redirect-input-mark: 0x100
auto-redirect-output-mark: 0x200تقسیم برنامههای Android — فقط برنامههای خاصی را پراکسی کن:
tun:
enable: true
stack: system
mtu: 9000
dns-hijack: [any:53]
auto-route: true
include-package:
- com.netflix.mediaclient
- com.spotify.music
exclude-package:
- com.google.android.gmsنکات
inet4-addressدر منبع کامنت شده است (config/config.go:278) — mihomo در حال حاضر از یک بازهٔ IPv4 پیشفرض هاردکدشده (198.18.0.1/30) استفاده میکند. IPv6 همچنان از فیلد صریحinet6-addressاستفاده میکند.dns-hijackچند فرم خاص را میپذیرد:any:53با هر دوی TCP و UDP پورت ۵۳ تطبیق دارد.- با
tcp://یاudp://پیشوند کنید تا محدوده تعیین شود. IP:portخام برای حلکنندههای بالادست خاص.
auto-routeوauto-redirectمتقابلاً انحصاری هستند. بر اساس کرنل خود یکی را انتخاب کنید: کرنلهایی که از NFTables پشتیبانی میکنند برای کارایی، auto-redirect را ترجیح میدهند.- پرچمهای
recvmsgx/sendmsgxبهینهسازیهای مخصوص macOS هستند که از گونههای batching در هر syscall استفاده میکنند. برای بازدهی، آنها را در macOS فعال کنید. disable-icmp-forwardingمخصوص mihomo است — وقتی مسیر ICMP جداگانهای دارید (مثلاً یک pinger مبتنی بر جدول مسیریابی) و نمیخواهید TUN pingها را بگیرد مفید است.
نکات بینهستهای
- Xray-core یک ورودی TUN حداقلی دارد. به TUN — Xray-core مراجعه کنید.
- sing-box همان مجموعهٔ ویژگی را تحت
type: "tun"فهرستشده درinbounds[]با نامهای snake_case دارد. به TUN — sing-box مراجعه کنید.
منبع: config/config.go:267-320 · v1.19.24 (a847246)
