هنگام تنظیم VLESS یا VMess مدام به سه فیلد شبیه به هم برمی‌خورید: آدرس، SNI (در بعضی کلاینت‌ها serverName) و دامنه پوششی یا Host. این‌ها در لایه‌های متفاوتی کار می‌کنند، مقدارشان ممکن است یکی باشد یا نباشد و باید جداگانه فهمیده شوند.

آدرس: واقعاً به کجا وصل می‌شوید

مقصد اتصال TCP. می‌تواند IP یا نام دامنه باشد؛ اگر دامنه باشد کلاینت اول آن را حل می‌کند. برای سروری که پشت CDN است، معمولاً نقطه پایانی CDN در این فیلد می‌نشیند، نه سرور خودتان.

پیشنهاد همکاریلینک اشتراک را از کجا بیاوریم؟سرویس همکار ما هنگام ثبت‌نام ۱ گیگابایت ترافیک پرسرعت هنگ‌کنگ رایگان می‌دهد.دریافت سرور پرسرعت

SNI: نامی که در دست‌دادن TLS اعلام می‌شود

در ClientHello یک فیلد بدون رمزنگاری وجود دارد که می‌گوید کدام نام دامنه را می‌خواهید و سرور بر اساس آن گواهی را انتخاب می‌کند. اگر SNI با گواهی نخواند، دست‌دادن همان‌جا شکست می‌خورد و در گزارش handshake failure یا عدم تطابق نام گواهی می‌بینید.

نکته مهم: SNI رمزنگاری‌نشده می‌رود، پس تجهیزات میانی می‌بینند چه دامنه‌ای خواسته‌اید. همین دیده‌شدن دستاویز بسیاری از سامانه‌های مسدودسازی است و دلیل اینکه REALITY نام یک سایت واقعی را قرض می‌گیرد.

Host: دامنه در لایه HTTP

فقط ترابری‌های WebSocket و HTTP این فیلد را دارند و در سرآیند درخواست HTTP قرار می‌گیرد. CDN با خواندن آن تصمیم می‌گیرد از کدام مبدأ محتوا بگیرد؛ پس پشت CDN مقدار Host باید همان دامنه‌ای باشد که آنجا تعریف کرده‌اید. اشتباهش یعنی CDN پیش از رسیدن درخواست به سرور شما 404 یا 502 برمی‌گرداند.

ترکیب‌های رایج

  • اتصال مستقیم به سرور خودتان: آدرس = IP سرور، SNI = دامنه گواهی، Host معمولاً همان SNI.
  • پشت CDN: آدرس = IP منتخب CDN یا نام میزبان CDN، SNI = دامنه شما، Host = دامنه شما.
هنگام قطعی سراغ allowInsecure نروید. این گزینه فقط بررسی گواهی را در کلاینت خاموش می‌کند؛ دست‌دادن انجام می‌شود، ولی هر کسی هم که وسط نشسته باشد رد می‌شود. به‌جایش SNI را با گواهی تطبیق دهید؛ به WebSocket + TLS + CDN نگاه کنید.