Skip to content

HTTP & SOCKS — mihomo

mihomo سمت ورودی را به سه نوع شنونده تقسیم می‌کند — http، socks و mixed (HTTP+SOCKS روی یک پورت) — که هرکدام ساختار Go جداگانه دارند. خروجی‌ها جدا هستند: type: http و type: socks5. TLS در هر گونه از طریق فیلدهای گواهی شنونده پشتیبانی می‌شود.

خروجی HTTP

ورودی تحت proxies: با type: http. BasicOption را جاسازی می‌کند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(required)<string>نام یکتای پراکسی.
serverstring(required)<host>میزبان پراکسی HTTP بالادست.
portint(required)<port>پورت بالادست.
usernamestring(unset)<string>نام کاربری HTTP Basic auth.
passwordstring(unset)<string>گذرواژهٔ HTTP Basic auth.
tlsboolfalsetrue | falseپوشاندن اتصال بالادست در TLS (پراکسی HTTPS).
snistring(server)<SNI>Server Name Indication در TLS.
skip-cert-verifyboolfalsetrue | falseغیرفعال‌سازی راستی‌آزمایی TLS (فقط آزمایش).
fingerprintstring(unset)<SHA256 hex>تثبیت اثرانگشت گواهی TLS سرور.
certificatestring(unset)<PEM file path>گواهی کلاینت (mTLS).
private-keystring(unset)<key file path>کلید خصوصی برای `certificate`.
headersmap[string]string{}{<header>: <value>}سرآیندهای HTTP اضافی که به هر درخواست افزوده می‌شوند.

منبع: adapter/outbound/http.go:28-42 · ثابت‌شده در v1.19.24 (a847246)

خروجی SOCKS5

ورودی تحت proxies: با type: socks5. BasicOption را جاسازی می‌کند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(required)<string>نام یکتای پراکسی.
serverstring(required)<host>میزبان SOCKS بالادست.
portint(required)<port>پورت بالادست.
usernamestring(unset)<string>نام کاربری SOCKS5.
passwordstring(unset)<string>گذرواژهٔ SOCKS5.
tlsboolfalsetrue | falseپوشاندن اتصال SOCKS در TLS.
udpboolfalsetrue | falseفعال‌سازی UDP-associate در SOCKS5.
skip-cert-verifyboolfalsetrue | falseغیرفعال‌سازی راستی‌آزمایی TLS (فقط آزمایش).
fingerprintstring(unset)<SHA256 hex>تثبیت اثرانگشت گواهی TLS سرور.
certificatestring(unset)<PEM file path>گواهی کلاینت (mTLS).
private-keystring(unset)<key file path>کلید خصوصی برای `certificate`.

منبع: adapter/outbound/socks5.go:30-43 · ثابت‌شده در v1.19.24 (a847246)

ورودی HTTP

ورودی تحت listeners: با type: http. BaseOption را جاسازی می‌کند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
usersAuthUsers[]<AuthUsers>کاربران پذیرفته‌شده. هر ورودی یک رشتهٔ `user:pass` است.
certificatestring(unset)<PEM file path>گواهی TLS اختیاری (پراکسی HTTPS). با `private-key` جفت می‌شود.
private-keystring(unset)<key file path>کلید خصوصی TLS.
client-auth-typestring(none)no-client-cert | request-client-cert | require-any-client-cert | verify-client-cert-if-given | require-and-verify-client-certحالت احراز هویت متقابل TLS کلاینت.
client-auth-certstring(unset)<PEM file path>بستهٔ CA پذیرفته‌شده به‌عنوان ریشهٔ کلاینت.
ech-keystring(unset)<ECH config>مواد Encrypted Client Hello.
reality-configRealityConfig(disabled)RealityConfigپیکربندی سرور REALITY.

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

ورودی SOCKS

ورودی تحت listeners: با type: socks. BaseOption را جاسازی می‌کند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
usersAuthUsers[]<AuthUsers>کاربران پذیرفته‌شده.
udpboolfalsetrue | falseفعال‌سازی UDP-associate در SOCKS5.
certificatestring(unset)<PEM file path>گواهی TLS اختیاری.
private-keystring(unset)<key file path>کلید خصوصی TLS.
client-auth-typestring(none)<see HTTP>همانند ورودی HTTP.
client-auth-certstring(unset)<PEM file path>همانند ورودی HTTP.
ech-keystring(unset)<ECH config>مواد Encrypted Client Hello.
reality-configRealityConfig(disabled)RealityConfigپیکربندی سرور REALITY.

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

ورودی Mixed (HTTP + SOCKS)

ورودی تحت listeners: با type: mixed. HTTP و SOCKS5 را روی یک پورت چندسو می‌کند — اولین بایت درخواست کلاینت تعیین می‌کند کدام نیمه اتصال را اداره کند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
usersAuthUsers[]<AuthUsers>کاربران پذیرفته‌شده (مشترک بین نیمه‌های HTTP و SOCKS).
udpboolfalsetrue | falseفعال‌سازی UDP-associate در SOCKS5 روی نیمهٔ SOCKS.
certificatestring(unset)<PEM file path>گواهی TLS اختیاری.
private-keystring(unset)<key file path>کلید خصوصی TLS.
client-auth-typestring(none)<see HTTP>همانند ورودی HTTP.
client-auth-certstring(unset)<PEM file path>همانند ورودی HTTP.
ech-keystring(unset)<ECH config>مواد Encrypted Client Hello.
reality-configRealityConfig(disabled)RealityConfigپیکربندی سرور REALITY.

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

مثال‌ها

خروجی HTTP:

yaml
proxies:
  - name: http-upstream
    type: http
    server: upstream.example.com
    port: 8080
    username: alice
    password: <password>
    tls: true
    sni: upstream.example.com

خروجی SOCKS5 با UDP:

yaml
proxies:
  - name: socks-upstream
    type: socks5
    server: upstream.example.com
    port: 1080
    username: alice
    password: <password>
    udp: true

ورودی Mixed برای دستگاه‌های کلاینت:

yaml
listeners:
  - name: client-mixed
    type: mixed
    listen: 127.0.0.1
    port: 7890
    users:
      - alice:<password>
    udp: true

ورودی پراکسی HTTPS (HTTP روی TLS):

yaml
listeners:
  - name: https-proxy
    type: http
    listen: 0.0.0.0
    port: 8443
    users:
      - alice:<password>
    certificate: /etc/mihomo/server.crt
    private-key: /etc/mihomo/server.key

نکات

  • users: در اینجا فهرستی از رشته‌های user:pass است — نه آرایه‌ای از اشیاء ساختاریافته. جداکنندهٔ : الزامی است. فهرست خالی احراز هویت را غیرفعال می‌کند.
  • شنوندهٔ mixed هم HTTP و هم SOCKS5 را روی همان پورت می‌پذیرد، کنترل از طریق تشخیص اولین بایت در شنونده انجام می‌شود.
  • میانبرهای سطح بالا (port، socks-port، mixed-port روی ریشهٔ RawConfig) یک راه جایگزین برای اعلام شنوندگان بدون احراز هویت هستند — از طریق listeners[] نمی‌گذرند. به ازای هر ورودی یک رویکرد را انتخاب کنید.
  • فهرست سطح بالای authentication در mihomo (به Basics مراجعه کنید) برای هر پورت قدیمی (port، socks-port، mixed-port) اعمال می‌شود ولی برای ورودی‌های listeners: خیر — آن‌ها فیلد users خود را دارند.

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

  • Xray-core HTTP و SOCKS را در فایل‌های منبع جداگانه نگه می‌دارد، از accounts[] (هرکدام {user, pass}) استفاده می‌کند و ورودی داخلی "mixed" ندارد. به HTTP & SOCKS — Xray-core مراجعه کنید.
  • sing-box هم ورودی mixed ارائه می‌دهد، با users[] که اشیاء ساختاریافتهٔ {username, password} را در خود دارد. نام فیلدها snake_case هستند. به HTTP & SOCKS — sing-box مراجعه کنید.

منبع: adapter/outbound/http.go:28-42 · v1.19.24 (a847246)

Core Tutorial اثر Argsment