Skip to content

Tunnel — mihomo

mihomo دو روش معادل برای اعلام یک port-forwarder ایستا ارائه می‌دهد: بلوک سطح بالای tunnels: (قدیمی، شکل رشتهٔ فشرده را پشتیبانی می‌کند) یا ورودی تحت listeners: با type: tunnel.

شکل شنونده

ورودی تحت listeners: با type: tunnel. BaseOption را جاسازی می‌کند (listen، port).

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
network[]string(required)tcp | udpترابردهایی که پذیرفته شوند. هر دو را به‌صورت `[tcp, udp]` بدهید تا همان فوروارد روی هر دو نمایان شود.
targetstring(required)<host:port>مقصد اتصالات فوروارد شده.

منبع: listener/inbound/tunnel.go:13-17 · ثابت‌شده در v1.19.24 (a847246)

بلوک سطح بالای tunnels:

شکل سطح بالا مختصر است و قبل از مدل یکپارچهٔ listeners وجود داشت. هر ورودی یا یک شیء است یا یک رشتهٔ فشرده:

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
network[]string(required)tcp | udpترابردهایی که پذیرفته شوند. شکل شیء فهرست می‌گیرد.
addressstring(required)<host:port>آدرس شنود.
targetstring(required)<host:port>مقصد.
proxystring(routing default)<proxy or group name>اجبار به عبور ترافیک این تونل از یک پراکسی یا گروه نامگذاری‌شدهٔ مشخص. فهرست قواعد را دور می‌زند.

منبع: listener/config/tunnel.go:11-16 · ثابت‌شده در v1.19.24 (a847246)

شکل رشتهٔ فشرده network,address,target[,proxy] است — که network یکی از tcp، udp، یا tcp/udp است:

yaml
tunnels:
  - tcp,127.0.0.1:5353,1.1.1.1:53        # TCP only
  - udp,127.0.0.1:5353,1.1.1.1:53        # UDP only
  - tcp/udp,127.0.0.1:5353,1.1.1.1:53    # both
  - tcp,0.0.0.0:8080,10.0.0.10:80,VPN    # forced through proxy "VPN"

شکل شیء همان چیز است که کلیدها از هم جدا شده‌اند:

yaml
tunnels:
  - network: [tcp, udp]
    address: 127.0.0.1:5353
    target: 1.1.1.1:53
    proxy: VPN

مثال‌ها

فورواردر DNS به شکل شنونده:

yaml
listeners:
  - name: dns-fwd
    type: tunnel
    listen: 0.0.0.0
    port: 5353
    network: [tcp, udp]
    target: 1.1.1.1:53

شکل سطح بالا: فوروارد HTTP به یک میزبان داخلی از طریق یک پراکسی نامگذاری‌شده:

yaml
proxies:
  - name: VPN
    type: trojan
    server: vpn.example.com
    port: 443
    password: <password>

tunnels:
  - network: [tcp]
    address: 0.0.0.0:8080
    target: 10.0.0.10:80
    proxy: VPN

نکات

  • address و target در شکل رشتهٔ فشرده در زمان تجزیه هر دو به‌عنوان لفظی host:port راستی‌آزمایی می‌شوند (listener/config/tunnel.go:53-58). فقدان پورت یک خطای واضح تولید می‌کند.
  • مقادیر ناشناخته در network در زمان راه‌اندازی با یک هشدار به‌صورت بی‌صدا رد می‌شوند (listener/inbound/tunnel.go:96-99). فقط tcp و udp پذیرفته می‌شوند.
  • فیلد proxy فهرست قواعد را دور می‌زند — ترافیک تونل بدون توجه به mode یا هر ورودی تطبیق‌شدهٔ rules: از طریق پراکسی نامگذاری‌شده می‌رود. زمانی از این استفاده کنید که یک مسیر ثابت مستقل از مسیریابی معمولی می‌خواهید.
  • شکل شنونده و شکل tunnels: می‌توانند در همان پیکربندی هم‌زمان وجود داشته باشند — مستقل هستند.

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

  • Xray-core از پروتکل dokodemo-door با فیلد portMap برای فوروارد چندپورت در یک ورودی استفاده می‌کند. به Dokodemo — Xray-core مراجعه کنید.
  • sing-box نوع tunnel اختصاصی ندارد — از ورودی Direct با override_address و override_port استفاده کنید.

منبع: listener/inbound/tunnel.go:13-17 · v1.19.24 (a847246)

Core Tutorial اثر Argsment