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

Tunnel (تونل معکوس)

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

endpointهای tunnel چند نمونهٔ sing-box را از طریق یک سرور عمومی به هم وصل می‌کنند تا به ماشینی که آدرس عمومی ندارد (پشت NAT یا فایروال) هم بشود دسترسی داشت. سرور endpoint "type": "tunnel_server" را اجرا می‌کند و هر ماشین دیگر "type": "tunnel_client" را. هر کلاینت اتصال‌هایی را به سرور باز نگه می‌دارد و سرور ترافیک مربوط به آن کلاینت را از همین اتصال‌ها به آن برمی‌گرداند. هر طرف یک UUID دارد و قاعده‌های مسیریابی تعیین می‌کنند ترافیک به کدام طرف برود.

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

  • دسترسی به ماشین خانه یا محل کار که آدرس IP عمومی ندارد، از طریق سروری که دارد.
  • وصل کردن دو کلاینت که مستقیم به هم دسترسی ندارند، از طریق سرور.
  • استفاده از هر پروتکل پروکسی بین کلاینت‌ها و سرور، مثلاً VLESS با REALITY، تا تونل از محافظت همان پروتکل بهره ببرد.

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

تونل پنهان‌سازی مخصوص خودش ندارد. ترافیک آن داخل خروجی‌ای که به کلاینت می‌دهید و ورودی‌ای که به سرور می‌دهید حرکت می‌کند، پس دقیقاً شبیه همان پروتکل است. پروتکلی را انتخاب کنید که در شبکهٔ شما کار می‌کند. چون کلاینت همیشه خودش به سرور وصل می‌شود، جایی هم که اتصال ورودی به کلاینت مسدود است کار می‌کند.

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

  • هویت‌ها. هر کلاینت یک uuid (نام عمومی آن که در قاعده‌های مسیریابی می‌آید) و یک key (یک راز، آن هم با قالب UUID) دارد. سرور uuid خودش و فهرستی از کاربرها دارد که هر کدام uuid و key یک کلاینت است.
  • اتصال‌های آماده. پس از شروع، هر کلاینت از طریق outbound خود ۵ اتصال به سرور باز می‌کند و آماده نگه می‌دارد. سرور برای هر کلاینت حداکثر ۱۰ اتصال نگه می‌دارد و با رسیدن اتصال تازه قدیمی‌ترین را می‌بندد. اگر اتصالی شکست بخورد، کلاینت ۵ ثانیه صبر می‌کند و دوباره تلاش می‌کند.
  • آدرس کنترل. اتصال‌های تونل داخل پروتکل خروجی به آدرس sp.tunnel.sing-box.arpa:444 می‌روند و inbound سرور آن‌ها را رسیدگی می‌کند. بقیهٔ اتصال‌هایی که به این ورودی می‌رسند مثل همیشه مسیریابی می‌شوند، پس همین ورودی می‌تواند به کاربرهای عادی پروکسی هم سرویس بدهد.
  • فرستادن ترافیک. اتصالی که به endpoint tunnel_client مسیریابی شود، همراه UUID طرفی که برای آن است (مقصد تونل) به سرور فرستاده می‌شود. در سرور دوباره مسیریابی می‌شود و tunnel_source برابر کلاینت فرستنده و tunnel_destination برابر مقصد است:
  • اگر مقصد همان uuid خود سرور باشد، سرور آن را مثل هر اتصال دیگری مسیریابی می‌کند (مثلاً به اینترنت).
  • اگر مقصد کلاینت دیگری باشد، یک قاعده آن را به endpoint tunnel_server می‌فرستد و این endpoint آن را از یکی از اتصال‌های آمادهٔ آن کلاینت تحویل می‌دهد. کلاینت مقصد آن را با tunnel_source برابر فرستنده مسیریابی می‌کند.
  • فقط TCP حمل می‌شود و UDP رد می‌شود.
  • اتصالی که مقصدش خود فرستنده باشد به‌عنوان حلقهٔ مسیریابی رد می‌شود.

پیکربندی

سرور:

{
  "endpoints": [
    {
      "type": "tunnel_server",
      "tag": "tunnel",
      "uuid": "00000000-0000-0000-0000-000000000001",
      "users": [
        {
          "uuid": "11111111-1111-1111-1111-111111111111",
          "key": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
        },
        {
          "uuid": "22222222-2222-2222-2222-222222222222",
          "key": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
        }
      ],
      "inbound": {
        "type": "vless",
        "tag": "tunnel-in",
        "listen": "::",
        "listen_port": 443,
        "users": [{ "uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc" }]
      }
    }
  ],
  "route": {
    "rules": [
      {
        "tunnel_destination": ["22222222-2222-2222-2222-222222222222"],
        "outbound": "tunnel"
      }
    ]
  }
}

کلاینت:

{
  "endpoints": [
    {
      "type": "tunnel_client",
      "tag": "tunnel",
      "uuid": "11111111-1111-1111-1111-111111111111",
      "key": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
      "outbound": {
        "type": "vless",
        "tag": "tunnel-out",
        "server": "203.0.113.10",
        "server_port": 443,
        "uuid": "cccccccc-cccc-cccc-cccc-cccccccccccc"
      }
    }
  ]
}

فیلدهای tunnel_client

فیلد نوع پیش‌فرض معنی
uuid string الزامی UUID این کلاینت. دیگران آن را به‌عنوان مقصد تونل به کار می‌برند.
key string الزامی راز این کلاینت با قالب UUID. باید با key یکی از کاربرهای سرور یکی باشد.
outbound object الزامی یک خروجی کامل (با type، tag و فیلدهایش) که به inbound سرور می‌رسد.

فیلدهای tunnel_server

فیلد نوع پیش‌فرض معنی
uuid string الزامی UUID سرور. ترافیکی که برای این UUID است از خود سرور خارج می‌شود.
users فهرست ندارد کلاینت‌ها، هر کدام با uuid و key.
inbound object الزامی یک ورودی کامل (با type، tag و فیلدهایش) که کلاینت‌ها به آن وصل می‌شوند.
connect_timeout duration 5s چقدر برای یک اتصال آمادهٔ آزاد از کلاینت مقصد صبر کند.

فیلدهای قاعدهٔ مسیریابی

فیلد کجا معنی
tunnel_source قاعده‌های route و DNS، rule setها با UUID طرفی که اتصال را فرستاده تطبیق می‌دهد.
tunnel_destination قاعده‌های route و DNS، rule setها با UUID طرفی که اتصال برای آن است تطبیق می‌دهد.
override_tunnel_destination actionهای route و route-options UUID طرفی را که اتصال برای آن است تعیین می‌کند.

نکته‌ها

  • اتصال تازه مقصد تونلش را از override_tunnel_destination در یک action از نوع route یا route-options می‌گیرد. هر دو endpoint اتصال بدون مقصد را رد می‌کنند («tunnel destination not set»).
  • کلید کلاینت ناشناخته، یا UUID مقصدی که کاربر نیست، رد و در لاگ ثبت می‌شود.
  • همهٔ UUIDها و کلیدها باید UUID معتبر باشند، وگرنه کانفیگ بارگذاری نمی‌شود.

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


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

نظرات