ویرگول
ورودثبت نام
روزمرگی فنی
روزمرگی فنیروزها درگیر مصائب فنی، شب‌ها مشغول ثبت راه‌حل‌های یافتنی
روزمرگی فنی
روزمرگی فنی
خواندن ۷ دقیقه·۳ سال پیش

خطای TLS handshake timeout در V2ray و چند راه‌حل

در هفته‌های گذشته برای خیلی از کاربران V2ray پیش آمده که موقع اتصال به حساب کاربری خود و تست ping ناگهان با خطای net/http: TLS handshake timeout رو به رو بشوند. گاهی حتی اتفاق می‌افتد که علیرغم اتصال دو دستگاه (مثلا ویندوزی و اندرویدی) به یک اینترنت واحد، کلاینت V2ray در یکی بدون مشکل کار کند ولی در دیگری چنین خطایی بدهد.

به هرحال راهکار یکسانی برای حل این مساله وجود ندارد، فقط می‌دانیم مشکل هرچه هست به پروتکل TLS ربط دارد و نه الزاما به کانفیگ نادرست. پس در اینجا به روش‌های مختلفی می‌پردازیم که توانسته این مشکل را حل کند (منتها موارد سه و چهار، مختص کاربران سرویس کلاودفلر است که پنل X-UI را نصب کرده‌اند. در حال حاضر اکثر کاربران ایرانیِ V2ray در همین دسته جای می‌گیرند!).

اول: بروزرسانی تنظیمات تاریخ و زمان

از ابتدای امسال (1402) ساعت رسمی کشور تغییر نکرد، در حالی که دستگاه‌های الکترونیکی به طور خودکار و پیش‌فرض تغییر را اعمال کردند. بنابراین به احتمال زیاد اکثر کاربران به طور دستی ساعت دستگاه‌ها را یک ساعت عقب کشیده‌اند. این در حالیست که V2ray نسبت به ساعت دستگاه شما خیلی حساس و سختگیر است. در نتیجه موارد متعددی بوده که با تغییر ساعت دستگاه به حالت پیش‌فرض (بروزرسانی خودکار) مشکل رفع شده.

https://guide.v2fly.org/en_US/prep/start.html
https://guide.v2fly.org/en_US/prep/start.html

دوم: تغییر تنظیمات uTLS و alpn و allowinsecure در نرم‌افزار V2ray

اگر از نرم‌افزاهای معروفی مثل V2rayN در ویندوز و V2rayng در اندروید استفاده می‌کنید، می‌توانید تنظیمات حساب V2ray خود را تغییر بدهید (فقط یادتان نرود که اول V2ray را قطع کنید تا امکان ذخیره تغییرات به شما داده شود). در فیلدهای uTLS و alpn گزینه‌های متعددی به شما داده شده (مثلا اولی را می‌توانید در حالت Chrome قرار دهید و دومی را در حالت h2,http/1.1 و یا هر ترکیب دلخواهی از گزینه‌هایی که برای شما تعریف شده). در آخر هم مقدار allowinsecure را به True تغییر بدهید و تست بگیرید.

سوم: بررسی ورژن TLS در Cloudflare

اگر برای راه‌اندازی V2ray خود دامنه خریده و از سرویس کلاودفلر استفاده کرده‌اید، از قسمت SSL/TLS- Edge Certificates بررسی کنید که حداقل ورژن TLS شما 1.2 باشد (به علاوه بهتر است در همان بخش گزینه Always Use HTTPS هم تیک بخورد و ضمنا از بخش overview هم حالت SSL/TLS روی Full قرار بگیرد).

چهارم: تغییر زیردامنه در رکورد DNS کلاودفلر

اگر دامنه گرفته‌اید و برای پنهان کردن آی‌پی پشت دامنه از سرویس کلاودفلر استفاده می‌کنید، پس قبلا حتما یک رکورد DNS به شکل زیر اضافه و ثبت کرده‌اید که با آن کاری نداریم.

در این روش اما باید یک رکورد جدید اضافه کنید. در اینجا مثلا برای دامنه domain.com، یک رکورد جدید از نوع A با نام host2 ایجاد شده که به آی‌پیِ سرور اشاره دارد و ضمنا تیک Proxied هم فعال شده تا این آی‌پی سرور پشت آی‌پی کلاودفلر پنهان شود.

الآن زیردامنه شما به صورت host2.domain.com در آمده و حالا می‌خواهیم برای این زیردامنه گواهی SSL بگیریم تا نهایتا در کانفیک V2ray استفاده کنیم. روش کار همانی است که روز اولِ راه‌اندازی V2ray برای گرفتن SSL استفاده کرده‌اید، با یک تفاوت کوچک که در ادامه به آن می‌رسیم.

در اینجا دستورات لازم برای دریافت گواهی SSL رایگان آمده. حالا بعد از اتصال به سرور لینوکس، ابتدا دستور زیر را وارد می‌کنید (به جای host2.domain.com آدرس جدید خودتان را قرار دهید):

~/.acme.sh/acme.sh --issue -d host2.domain.com --standalone

در قدم دوم به سراغ دستور زیر می‌رویم. تنها تفاوت این دستور با آنچه در اینجا گفته شده اینست که نام فایل‌های cert.crt و private.key به cert2.crt و private2.key تغییر داده شده. به این خاطر که شما قبلا برای دامنه خودتان گواهی SSL گرفته‌اید و بنابراین در پوشه root، فایل‌های crt و key از قبل موجودند؛ پس نام‌ فایل‌ها تغییر داده شده‌اند تا تداخلی ایجاد نشود. در نتیجه کافیست دستور زیر را (مجددا با تغییر host2.domain.com به آدرس خودتان) اجرا کنید و تمام.

~/.acme.sh/acme.sh --installcert -d host2.domain.com --key-file /root/private2.key --fullchain-file /root/cert2.crt

در قدم آخر، به مرحله ساخت یک user جدید در پنل X-UI می‌رسید. همه تنظیمات مثل سابق هستند، با این تفاوت که این بار در قسمت TLS، نام زیردامنه جدید (host2.domain.com) قرار می‌گیرد و در مسیرهای Public key file و key file هم آدرس فایل گواهی‌های جدید، یعنی:

/root/cert2.crt
/root/private2.key

الآن اگر این حساب جدید را به کلاینت V2ray وارد کنید و تست بگیرید، به احتمال زیاد مشکل حل شده و اتصال شما برقرار می‌شود.

  • اگر گواهی SSL کلاودفلر را برای دامنه و زیردامنه‌ها فعال کرده‌اید، ابتدا باید از SSL/TLS ->Edge Certificates گواهی SSL سراسری را غیرفعال کنید و بعد با ریموت زدن به سرور یا استفاده از نرم‌افزارهای FTP مثل FileZilla، کلیدها را از روت پاک کنید و سپس مراحل بالا را طی کنید.

پنجم: تغییر پورت

در صورت فعال بودن پروکسی کلاودفلر، فقط تعداد محدودی پورت https ساپورت می‌شود. در مواردی با تغییر پورت و ساخت یک کانفیگ جدید با آن پورت مساله حل شده (برای استفاده از پورت‌هایی به جز پورت‌های زیر در ساخت کانفیگ‌های جدید باید تیک DNS proxy خاموش باشد).

ششم: بروزرسانی اپلیکیشن V2rayng به ورژن 1.8.0 و بالاتر

در زمان نوشتن این مطلب آخرین ورژن رسمی V2rayng در گوگل پلی استور 1.7.38 است، اما طی یک ماه گذشته ورژن‌های بالاتری هم از آن آمده که فعلا به صورت پیشاانتشار (pre-release) در گیت‌هاب موجودند (اینجا) و ناگفته نماند که ورژن +1.8.0 از پروتکل جذاب Reality هم پشتیبانی می‌کند. اگر نصب این آپدیت با خطا روبرو شد (unable to install)، ناگزیر باید نسخه نصب‌شده در اندروید را پاک و به جایش نسخه جدید را نصب و تست کنید.

هفتم؛ تغییر آی‌پی سرور

مشکل عجیبی که این اواخر بروز کرده اینست که علیرغم سالم بودن آی‌پی سرور، اما اتصال به سرور از طریق ترمینال با این آی‌پی مقدور نیست و با خطای عدم اتصال و Timeout روبرو می‌شود. در این حالت راهی نیست جز تغییر آی‌پی سرور. دستکم در سرورهای هتزنر فرایند تعویض آی‌پی بسیار ساده است و نیازی نیست که سرور کنونی حذف و یک سرور جدید به جایش گرفته شود! در مطلب آموزش تعویض آی‌پی سرورهای هتزنر این موضوع به همراه یک نکته کاربردی و مهم که اغلب فراموش می‌شود توضیح داده شده.

نکته:

در نهایت تمام راهکارهای بالا به فرض آنست که ریشه دامنه فیلتر نشده. در غیر این صورت هیچ‌یک از گزینه‌های بالا جواب نمی‌دهد و به ناچار یا باید دامنه را تعویض کرد (و البته اتصال ورودی آی‌پی‌های چینی به سرور و اتصال خروجی سرور به سایت‌ها و اپ‌های ایرانی را مسدود کرد) و یا از روش‌های جایگزین برای دور زدن فیلترینگ دامنه استفاده کرد (به عبارتی کانفیگ‌هایی ایجاد کرد که با وجود دامنه فیلتر هم کار کنند، مانند این روش).

هشتم (آپدیت جدید)؛ استفاده از قابلیت فرگمنت (Fragmentation)

در فرآیند TLSHandshaking، یک پکت داده از سمت کلاینت به سرور ارسال می‌شود و اگر سرور به آن پاسخ بدهد عملیات با موفقیت انجام می‌شود. این پکت ارسالی که حجم کمی در حدود 300-400 بایت دارد، شامل یک سری داده‌های قابل خواندن هست (مثل آی‌پی مبدأ، آی‌پی و SNI مقصد) و یک سری داده‌های رمزگذاری‌شده. در روش فرگمت به جای ارسال یکجای کل پکت، این پکت به چند تا بسته کوچک‌تر تقسیم می‌شود که با فواصل زمانی متغیر ارسال می‌شوند و این می‌تواند فایروال را قدری گیج کند. V2ray از نسخه 6.4.3 به بعد از این قابلیت پیشتیبانی می‌کند.
از بخش تنظیمات V2rayng می‌توان این قابلیت را فعال و مقدار حداقل و حداکثر حجم بسته‌ها (Length) و فواصل زمانی ارسال آن‌ها (Interval) را تعیین کرد.


نهم (آپدیت جدید)؛ استفاده از Rethinkdns

روش دیگر برای حل مشکل، استفاده از پراکسی فورواردینگ و تغییر DNS با rethinkdns است (دانلود برای گوشی از اینجا). بعد از دریافت و نصب این اپ، ابتدا باید در V2rayng از بخش تنظیمات -> تنظیمات پیشرفته حالت VPN Mode را به Proxy Only تغییر دهید. بعد از این وارد Rethinkdns بشوید و از قسمت Proxy، گزینه Socks5 Proxy را فعال کنید. در تنظیمات این بخش باید app موردنظر را انتخاب کنید (در اینجا V2rayng)، پورت آن را 10808 تنظیم کنید (پورت پیش‌فرض V2rayng برای Socks5) و دو گزینه بعدی را هم مطابق تصویر تیک بزنید. در نهایت به صفحه اول Rethinkdns برگردید و دکمه Start را بزنید و بعد با قطع و وصل V2rayng کانکت بشوید.

در این روش به صورت پیش‌فرض از DNSResolverهای Rethinkdns استفاده شده ولی در صورت کار نکردن می‌توان تغییرش داد (برای اینکار از گزینه Configure در پایین صفحه اول اپ، باید وارد DNS، سپس Other DNS و DOH بشوید و یکی از DNSها را انتخاب کنید (مثلا Google).


وندا نوژن

مطالب مرتبط:

مسدودسازی دسترسی آی‌پی‌های چینی و روسی به سرور V2ray

دور زدن فیلترینگ دامنه در V2ray با روش تونل کلودفلر (+فرگمنت): حل دو مشکل

جایگزین NetMod برای SSH Tunneling در ویندوز

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

۹
۸
روزمرگی فنی
روزمرگی فنی
روزها درگیر مصائب فنی، شب‌ها مشغول ثبت راه‌حل‌های یافتنی
شاید از این پست‌ها خوشتان بیاید