پرش به محتویات

SSH: ورودی و افزوده‌های هیدیفای

همهٔ قابلیت‌های هیدیفای

sing-box اصلی فقط می‌تواند به یک سرور SSH وصل شود. هیدیفای یک سرور SSH (ورودی، "type": "ssh" در فهرست inbounds)، پشتیبانی UDP برای خروجی SSH از راه UDP over TCP، و یک اتصال پس‌زمینه که خروجی را آماده نگه می‌دارد اضافه می‌کند. بقیهٔ خروجی SSH مثل sing-box اصلی کار می‌کند و آن‌جا مستند شده است. این صفحه فقط بخش‌های هیدیفای را توضیح می‌دهد.

چرا از آن استفاده کنیم

  • سروری می‌خواهید که هر کلاینت SSH بتواند با port forwarding (ssh -L) یا به‌عنوان پراکسی SOCKS (ssh -D) از آن استفاده کند، بی‌آن‌که به کاربران دسترسی shell روی سرور بدهید.
  • می‌خواهید UDP (مثلاً DNS، QUIC یا تماس صوتی) از خروجی SSH عبور کند. SSH ساده فقط TCP را می‌برد.
  • می‌خواهید خروجی SSH پیش از اولین اتصال وصل، تست و آماده نشان داده شود.

چطور از فیلترینگ عبور می‌کند

SSH پروتکلی رایج برای مدیریت سرورهاست و بسیاری از شبکه‌ها آن را باز می‌گذارند. ترافیک رمزنگاری شده است، پس فیلتر نمی‌تواند ببیند چه سایت‌هایی را باز می‌کنید.

این روش پنهان نمی‌کند که ترافیک SSH است. فیلتر می‌تواند دست‌دادن SSH را ببیند و بعضی شبکه‌ها نشست‌های طولانی یا پرترافیک SSH را کند یا مسدود می‌کنند. جایی از آن استفاده کنید که SSH مجاز است.

چطور کار می‌کند

ورودی

  • سرور روی TCP گوش می‌دهد و دست‌دادن SSH را با host_key خودش انجام می‌دهد.
  • کاربر با رمز عبور یا کلید عمومی از فهرست users وارد می‌شود. هر دو بررسی کاربر را با نامش پیدا می‌کنند.
  • سرور فقط درخواست‌های port forwarding (کانال‌های direct-tcpip) را می‌پذیرد. درخواست shell، اجرای فرمان یا subsystem رد می‌شود. درخواست forward که سرور نتواند بخواند، به‌تنهایی رد می‌شود؛ اتصال SSH و forwardهای دیگرش ادامه پیدا می‌کنند.
  • هر اتصال forward شده مثل اتصال هر ورودی دیگری مسیریابی می‌شود. نام کاربر ثبت می‌شود، پس آمار و قاعده‌های مسیریابی auth_user کار می‌کنند. مهلت‌های خواندن و نوشتن (deadline) روی اتصال‌های forward شده کار می‌کنند.
  • اتصال forward شده به نشانی UDP over TCP در sing-box، ترافیک UDP را می‌برد. پس یک خروجی SSH هیدیفای با udp_over_tcp می‌تواند UDP را از این سرور بفرستد. وقتی network شامل udp نباشد، این قابلیت خاموش است.

خروجی: UDP over TCP

وقتی udp_over_tcp روشن است، خروجی هر نشست UDP را درون یک اتصال TCP forward شده و با قالب UDP over TCP در sing-box می‌فرستد. سرور باید این قالب را بفهمد: ورودی SSH هیدیفای می‌فهمد، سرور OpenSSH معمولی نمی‌فهمد.

بدون udp_over_tcp، خروجی UDP را نمی‌پذیرد، حتی اگر network شامل udp باشد. UDP را به خروجی دیگری بفرستید.

خروجی: اتصال پس‌زمینه

  • پس از شروع، خروجی بدون انتظار برای ترافیک، در پس‌زمینه به سرور وصل می‌شود. وقتی نشست قطع شود، دوباره وصل می‌شود: پس از خطا ۱ ثانیه صبر می‌کند و بعد از هر خطای تازه دو برابر، تا حداکثر ۱ دقیقه.
  • وقتی وصل شد، پایش بلافاصله آن را تست می‌کند.
  • تا وقتی وصل نیست، برنامه آن را در حال اتصال نشان می‌دهد، و آخرین خطای اتصال را به‌عنوان خطای پراکسی (نه در نوع آن). پایش تا وقتی خروجی وصل نشده آن را رد می‌کند.
  • وقتی برنامه نخواسته اتصال‌های بیکار نگه داشته شوند، نشست پس از پایان آخرین اتصالش بسته می‌شود و تا اتصال بعدی دوباره باز نمی‌شود.

پیکربندی

ورودی

{
  "inbounds": [
    {
      "type": "ssh",
      "tag": "ssh-in",
      "listen": "::",
      "listen_port": 2222,
      "host_key": [
        "-----BEGIN OPENSSH PRIVATE KEY-----\n...\n-----END OPENSSH PRIVATE KEY-----"
      ],
      "users": [
        { "user": "alice", "password": "<password>" },
        { "user": "bob", "public_key": "ssh-ed25519 AAAA... bob@laptop" }
      ]
    }
  ]
}
فیلد نوع پیش‌فرض معنی
host_key list of strings الزامی کلیدهای خصوصی سرور با قالب PEM یا OpenSSH. سرور بدون host key نمی‌تواند دست‌دادن را کامل کند.
users list of objects ندارد کاربرانی که می‌توانند وارد شوند.
users[].user string ندارد نام کاربر.
users[].password string ندارد رمز عبور. خالی بگذارید تا ورود با رمز برای این کاربر خاموش شود.
users[].public_key string ندارد یک کلید عمومی، به شکل یک خط از فایل authorized_keys. خالی بگذارید تا ورود با کلید برای این کاربر خاموش شود.
server_version string پیش‌فرض SSH در Go رشتهٔ نسخه‌ای که سرور می‌فرستد، مثل SSH-2.0-OpenSSH_9.6. اگر پیشوند SSH-2.0- را نداشته باشد، اضافه می‌شود.
host_key_algorithms list of strings همه الگوریتم‌های host key که سرور ارائه می‌دهد. کلید RSA فقط با rsa-sha2-512، rsa-sha2-256 یا ssh-rsa که در فهرست آمده باشند امضا می‌کند. کلیدهای دیگر فقط وقتی استفاده می‌شوند که نوعشان در فهرست باشد، مثل ssh-ed25519. اگر هیچ host keyی باقی نماند، کانفیگ بارگذاری نمی‌شود.
network "tcp" or "udp" هر دو بدون udp، سرور UDP over TCP را نمی‌برد. سرور همیشه روی TCP گوش می‌دهد.

فیلدهای معمول گوش دادن (listen، listen_port و بقیه) مثل ورودی‌های دیگر کار می‌کنند.

خروجی

{
  "outbounds": [
    {
      "type": "ssh",
      "tag": "ssh-out",
      "server": "203.0.113.10",
      "server_port": 2222,
      "user": "alice",
      "password": "<password>",
      "udp_over_tcp": true
    }
  ]
}
فیلد نوع پیش‌فرض معنی
udp_over_tcp bool or object خاموش ترافیک UDP را درون اتصال‌های TCP forward شده بفرست. true یعنی نسخهٔ ۲. شکل شیء آن {"enabled": true, "version": 1} یا 2 است.
network "tcp" or "udp" هر دو شبکه‌هایی که خروجی می‌پذیرد. sing-box اصلی فقط TCP را می‌پذیرد. UDP فقط وقتی پذیرفته می‌شود که udp_over_tcp روشن باشد.

همچنین ببینید


اخرین بروزرسانی: 26 فوریهٔ 2026

نظرات