فیلتر شکن آی پی – وی پی ان | IPVPN | V2ray

Project V

برای اطلاعات بیشتر اسناد فارسی پروژه وی را مطالعه کنید

پروژه V مجموعه ای از ابزارهایی است که به شما کمک می کند شبکه خصوصی خود را بر روی اینترنت ایجاد کنید. هسته پروژه V، به نام V2Ray، مسئول پروتکل های شبکه و ارتباطات است. این می تواند به تنهایی کار کند و همچنین با ابزارهای دیگر ترکیب شود.

  پروکسی V2Ray چیست؟
 _ پروکسی V2ray همانند سایر پروکسی ها نیاز به یک پروکسی سرور دارد که به عنوان سرور V2ray باشد و می توان از طریق کامپیوتر، تلفن همراه یا سایر دستگاه ها به آن متصل شد.در نتیجه به وسیله یک پروکسی Local امکان گذر از محدودیت فراهم می شود.

_ V2Ray به طور موازی پروتکل های ورودی و خروجی چندگانه موازی است که هر پروتکل مستقل عمل می کند.
_ مسیریابی قابل برنامه ریزی: ترافیک ورودی می تواند به خروجی های مختلف بر اساس پیکربندی مسیریابی ارسال شود. مسیر ترافیکی را در منطقه یا دامنه هدف آسان است.
_ پروتکل های چندگانه: V2Ray از چندین پروتکل پشتیبانی می کند، از جمله Socks، HTTP، Shadowsocks، VMess و غیره. هر پروتکل ممکن است حمل و نقل خاص خود را داشته باشد، مانند TCP، mKCP، WebSocket و غیره.
_ Obfuscation: V2Ray در ترافیک برای مخفی کردن ترافیک در TLS ساخته شده است و می تواند به صورت موازی با سرورهای وب اجرا شود.
_ معکوس پروکسی: پشتیبانی عمومی پروکسی معکوس. می توان برای ساخت تونل ها به localhost استفاده کرد.
_ سیستم عامل های چندگانه: V2Ray بطور اولیه بر روی ویندوز، سیستم عامل مک، لینوکس و غیره اجرا می شود. پشتیبانی از شخص ثالث در تلفن همراه نیز وجود دارد.

_ VMess به زبان ساده پروتکل رمزنگاری
 ارتباطات در پروتکل V2Ray است و این شامل پروکسی inbound (ورودی) و outbound (خروجی) است.
 به عبارت دیگر پروتکل VMess راهی برای ارسال اطلاعات رمزگذاری شده است که اولین بار توسط V2Ray استفاده شد که مانند Shadowsocks برای بازرسی بسته های عمیق (deep packet inspection) فایروال ها ساخته شد. اما بین v2ray و Shadowsocks تفاوت وجود دارد. V2ray خودش یک پلتفرم است بنابراین، v2ray می تواند با بهبود نرم افزار به رشد خود ادامه دهد. 

v2ray-core
├── app         
│   ├── router  
├── common     
├── proxy      
│   ├── blackhole
│   ├── dokodemo-door
│   ├── freedom
│   ├── socks
│   ├── vmess
├── transport   
  • هسته V2Ray بستری را فراهم می‌کند که از توابع پروکسی شبکه لازم پشتیبانی می‌کند، که توسعه ثانویه را می‌توان برای ارائه تجربه کاربری بهتر انجام داد.
  • اولین اصل برای کاهش هزینه توسعه ثانویه، کراس پلتفرم را در نظر بگیرید
هسته به سه لایه تقسیم می شود: لایه کاربردی، لایه پروکسی و لایه انتقال. هر لایه شامل چندین ماژول است، ماژول ها مستقل از یکدیگر هستند و همان نوع ماژول ها را می توان به طور یکپارچه جایگزین کرد. لایه برنامه شامل برخی از توابع رایج در لایه پروکسی است که برای استفاده مجدد در ماژول های مختلف پراکسی انتزاع می شوند. ماژول ها در لایه برنامه باید پیاده سازی نرم افزاری خالص باشند و به سخت افزار یا فناوری های مرتبط با پلت فرم مرتبط نباشند
  • Dispatcher: برای انتقال داده های دریافتی توسط عامل ورودی به عامل خروجی استفاده می شود.
  • روتر: مسیریابی داخلی، برای جزئیات به پیکربندی مسیریابی مراجعه کنید.
  • DNS: حافظه پنهان DNS داخلی؛
  • مدیر پروکسی: مدیر پروکسی ورودی؛
لایه پروکسی به دو قسمت تقسیم می شود: Inbound Proxy و Outbound Proxy. این دو بخش مستقل از یکدیگر هستند و پروکسی ورودی به یک پراکسی خروجی خاص وابسته نیست و بالعکس. لیست تمام پروتکل های پیاده سازی شده پیاده سازی proxy.Inbound رابط. پیاده سازی proxy.Outbound رابط. لایه انتقال برخی از ماژول های ابزار مربوط به انتقال داده های شبکه را فراهم می کند
VMess پروتکل ارتباطی رمزگذاری شده اصلی V2Ray است. VMess یک پروتکل مبتنی بر TCP است، تمام داده ها با استفاده از TCP منتقل می شوند ID معادل UUID است که یک عدد تصادفی 16 بایتی است و نقش آن معادل یک توکن (Token) است. شناسه‌ای مانند این: de305d54-75b4-431b-adb2-eb6b9e546014، تقریباً کاملاً تصادفی، می‌تواند با استفاده از هر مولد UUID، مانند این ، تولید شود . شناسه کاربر را می توان در فایل پیکربندی مشخص کرد
  • MD5: عملکرد MD5
    • پارامتر ورودی یک آرایه بایت با هر طولی است
    • خروجی یک آرایه 16 بایتی است
  • HMAC: عملکرد HMAC
    • پارامترهای ورودی عبارتند از:
      • H: تابع هش
      • K: کلید، آرایه بایتی با هر طول
      • M: پیام، آرایه بایتی با هر طول
  • لرزش: عملکرد SHA3-Shake128
    • پارامتر ورودی یک رشته با هر طولی است
    • خروجی به عنوان کاراکتر با هر طول
VMess یک پروتکل بدون حالت است، یعنی کلاینت و سرور می توانند مستقیماً داده ها را بدون دست دادن ارسال کنند و هر انتقال داده تأثیری بر سایر انتقال داده ها قبل و بعد از آن ندارد. مشتری VMess یک درخواست را آغاز می کند و سرور قضاوت می کند که آیا درخواست از یک کلاینت قانونی می آید یا خیر. اگر تأیید تأیید شود، درخواست ارسال می شود و پاسخ به دست آمده به مشتری بازگردانده می شود. VMess از فرمت نامتقارن استفاده می کند، یعنی درخواست ارسال شده توسط مشتری و پاسخ سرور از فرمت های مختلف استفاده می کند.
16 بایت X بایت بقیه
اطلاعات گواهینامه بخش دستورالعمل بخش داده
اطلاعات احراز هویت یک مقدار هش (هش) 16 بایتی است که به صورت زیر محاسبه می شود:
  • H = MD5
  • K = شناسه کاربر (16 بایت)
  • M = زمان UTC، دقیق به ثانیه، مقدار یک مقدار تصادفی 30 ثانیه قبل و بعد از زمان فعلی است (8 بایت، Big Endian)
  • هش = HMAC(H، K، M)
بخش دستورالعمل رمزگذاری شده AES-128-CFB است:
  • کلید: MD5(شناسه کاربری + []بایت(‘c48619fe-8f02-49e0-b9e9-edf763e17e21’))
  • IV: MD5 (X + X + X + X)، X = [] بایت (زمان تولید اطلاعات احراز هویت) (8 بایت، Big Endian)
که در:
  • شماره نسخه نسخه: همیشه 1;
  • رمزگذاری داده IV: مقدار تصادفی.
  • کلید رمزگذاری داده ها: مقدار تصادفی.
  • احراز هویت پاسخ V: مقدار تصادفی.
  • انتخاب گزینه:
    • S (0x01): جریان داده در قالب استاندارد (توصیه می شود باز شود).
    • R (0x02): مشتری انتظار دارد از اتصال TCP مجدد استفاده کند (منسوخ شده در V2Ray 2.23+).
    • این مورد فقط زمانی معتبر است که S روشن باشد.
    • M (0x04): فعال کردن مبهم سازی ابرداده (توصیه می شود).
    • این مورد فقط زمانی معتبر است که S روشن باشد.
    • وقتی آیتم آن فعال است، کلاینت و سرور باید به ترتیب دو نمونه Shake بسازند، RequestMask = Shake (اطلاعات درخواست IV)، ResponseMask = Shake (داده پاسخ IV).
    • X: رزرو شده
  • حاشیه P: مقدار تصادفی P بایت قبل از مقدار بررسی اضافه می شود.
  • روش رمزگذاری: روش رمزگذاری قسمت داده را مشخص کنید، مقادیر اختیاری عبارتند از:
    • 0x00:AES-128-CFB؛
    • 0x01: بدون رمزگذاری.
    • 0x02:AES-128-GCM.
    • 0x03:ChaCha20-Poly1305.
  • دستور Cmd:
    • 0x01: داده های TCP.
    • 0x02: داده های UDP
  • پورت پورت: شماره پورت عدد صحیح در قالب Big Endian.
  • نوع آدرس T:
    • 0x01:IPv4
    • 0x02: نام دامنه
    • 0x03:IPv6
  • آدرس الف:
    • وقتی T = 0x01، A یک آدرس IPv4 4 بایتی است.
    • وقتی T = 0x02، A 1 بایت طول (L) + L بایت نام دامنه است.
    • وقتی T = 0x03، A یک آدرس IPv6 16 بایتی است.
  • F را بررسی کنید: FNV1a هش تمام محتویات به جز F در بخش دستورالعمل.
بخش داده دارای دو فرمت است، پیش فرض فرمت اصلی است این قالب فقط برای سازگاری با عقب است و ممکن است در نسخه های بعدی حذف شود. فرض می شود تمام داده ها محتوای واقعی درخواست هستند. اینها به آدرسی که در قسمت فرمان مشخص شده ارسال می شود. هنگامی که Cmd = 0x01، این داده ها در قالب TCP ارسال می شوند و زمانی که Cmd = 0x02، این داده ها به شکل UDP ارسال می شوند. این فرمت از دو روش رمزگذاری “بدون رمزگذاری” و “AES-128-CFB” پشتیبانی می کند و کلید رمزگذاری شده و IV توسط قسمت فرمان مشخص می شوند. وقتی Opt(S) روشن است، بخش داده از این قالب استفاده می کند. داده های درخواست واقعی به چند بلوک کوچک تقسیم می شوند و فرمت هر بلوک کوچک به شرح زیر است. پس از اینکه سرور تمام بلوک های کوچک را بررسی کرد، آنها را در قالب اصلی فوروارد می کند.
2 بایت L بایت
طول L بسته داده
که در:
  • طول L: عدد صحیح در قالب Big Endian، حداکثر مقدار 2^14 است.
    • وقتی Opt(M) روشن است، مقدار L = مقدار واقعی xor Mask. Mask = (RequestMask. NextByte() « 8) + RequestMask. NextByte();
  • بسته داده: بسته داده ای که با روش رمزگذاری مشخص شده رمزگذاری شده است.
قبل از پایان ارسال باید داده های واقعی در بسته وجود داشته باشد، یعنی داده هایی غیر از طول و داده های تأیید اعتبار. هنگامی که انتقال به پایان می رسد، مشتری باید یک بسته داده خالی، یعنی L = 0 (بدون رمزگذاری) یا طول داده های احراز هویت (با رمزگذاری)، ارسال کند تا پایان انتقال را نشان دهد. با توجه به روش های مختلف رمزگذاری، قالب بسته داده به شرح زیر است:
  • بدون رمزگذاری:
  • L بایت: داده های واقعی.
  • AES-128-CFB: کل بخش داده با استفاده از AES-128-CFB رمزگذاری شده است.
  • 4 بایت: هش FNV1a از داده های واقعی.
  • L – 4 بایت: داده های واقعی.
  • AES-128-GCM: Key کلید قسمت فرمان است، IV = تعداد (2 بایت) + IV (10 بایت). تعداد از 0 افزایش می یابد و برای هر بسته داده 1 افزایش می یابد؛ IV بایت 3 تا 12 قسمت دستورالعمل IV است.
  • L – 16 بایت: داده های واقعی.
  • 16 بایت: اطلاعات احراز هویت GCM
  • ChaCha20-Poly1305: کلید = MD5 (کلید دستورالعمل) + MD5 (MD5 (کلید دستورالعمل))، IV = تعداد (2 بایت) + IV (10 بایت). تعداد از 0 افزایش می یابد و برای هر بسته داده 1 افزایش می یابد؛ IV بایت 3 تا 12 قسمت دستورالعمل IV است.
  • L – 16 بایت: داده های واقعی.
  • 16 بایت: اطلاعات احراز هویت Poly1305
داده‌های سرصفحه پاسخ با AES-128-CFB رمزگذاری می‌شوند، IV MD5 (رمزگذاری داده IV) و کلید MD5 (کلید رمزگذاری داده‌ها) است. داده های پاسخ واقعی بسته به تنظیمات رمزگذاری متفاوت است.
1 بایت 1 بایت 1 بایت 1 بایت 1 بایت M بایت بقیه
احراز هویت پاسخ V گزینه Opt دستور Cmd طول دستورالعمل M محتوای فرمان داده های پاسخ واقعی
که در:
  • احراز هویت پاسخ V: باید با احراز هویت پاسخ V در درخواست مشتری سازگار باشد.
  • انتخاب گزینه:
  • 0x01: سرور آماده استفاده مجدد از اتصال TCP است (منسوخ شده در V2Ray 2.23+).
  • دستور Cmd:
  • 0x01: دستور پورت پویا
  • داده های پاسخ واقعی:
  • اگر Opt(S) در درخواست روشن باشد، از قالب استاندارد استفاده می شود، در غیر این صورت از قالب اصلی استفاده می شود.
  • فرمت مانند داده های درخواست است.
    • وقتی Opt(M) روشن است، مقدار طول L = مقدار واقعی xor Mask. Mask = (ResponseMask. NextByte() « 8) + ResponseMask. NextByte();
1 بایت 2 بایت 16 بایت 2 بایت 1 بایت 1 بایت
ذخیره بندر بندر شناسه کاربر AlterID سطح کاربر زمان موثر T
که در:
  • پورت پورت: شماره پورت عدد صحیح در قالب Big Endian.
  • زمان معتبر T: دقیقه;
هنگامی که کلاینت فرمان پورت پویا را دریافت می کند، سرور یک پورت جدید برای ارتباط باز کرده است و مشتری می تواند داده ها را به پورت جدید ارسال کند. پس از T دقیقه، این پورت نامعتبر می شود و مشتری باید دوباره از پورت اصلی برای ارتباط استفاده کند. برای اطمینان از سازگاری فوروارد، تمام فیلدهای رزرو شده باید دارای مقدار 0 باشد