چرا کلید قطع هنگام تغییر سرور ترافیک را میاندازد
چرا کلید قطع در جریان تغییر سرور ترافیک را مسدود میکند، کلاینت در آن فاصله چه میکند و چگونه یک وقفه طبیعی را از یک مسدودی گیرکرده تشخیص دهیم.
سروری را انتخاب میکنید که نزدیکتر به نظر میرسد، روی اتصال میزنید و مرورگر پیش از بالا آمدن تونل جدید بارگذاری را متوقف میکند. نشانگر به حالت در حال اتصال میرود و همانجا میماند تا وقتی همه زبانهها به پایان مهلت برسند. این وقفه معمولاً همان کلید قطع است که مطابق طراحی کار میکند: ترافیک مسدود است تا وقتی کلاینت تونلی برای فرستادن آن ندارد. اینکه وقفه پذیرفتنی است به کاری بستگی دارد که کلاینت در آن چند ثانیه میکند و به اینکه مسدودی وقتی میگوید برداشته شد واقعاً برداشته شود.
کلاینت بین دو سرور چه میکند
تغییر نقطه پایانی چند مرحله است، نه یک کلید. کلاینت تونل فعلی را خراب میکند، قواعد مسدودسازی خود را بهروز میکند، نقطه پایانی جدید را حل میکند و بیرون از تونل به آن میرسد، سپس مسیرهای تازه را نصب میکند و مسدودی را برمیدارد. فاصلهای که حس میکنید میان مرحله اول و آخر است.
ترتیب اینجا از سرعت مهمتر است. اگر قواعد مسدودسازی پیش از استثنای نقطه پایانی جدید اعمال شوند، کلاینت نمیتواند دستدادن را کامل کند و تا پایان مهلت در حالت در حال اتصال میماند. اگر استثنا رونوشتی از نشانی سرور قدیمی باشد، دستدادن جدید مانند هر بسته خروجی دیگری دیده میشود و دور انداخته میشود. هر دو حالت از مرورگر یکسان به نظر میرسند، و به همین دلیل تغییری که پس از شش ثانیه بهبود مییابد و تغییری که هرگز بهبود نمییابد میتوانند یک علت داشته باشند.
نقطه پایانی جدید به یک سوراخ در مسدودی نیاز دارد
برای ساختن تونل، کلاینت باید بستهها را به نشانی و درگاه سرور جدید روی واسط فیزیکی بفرستد، برای نمونه UDP 51820 در یک پروفایل متعارف WireGuard یا 1194 و 443 برای OpenVPN، هر چه پروفایل خودتان تعیین کند. این ترافیک درون تونلی نیست که در شرف ساخت آن است، پس یک مسدودی برای کل دستگاه آن را میبلعد مگر آنکه قاعده مجاز همسانی وجود داشته باشد.
پروفایلهای مبتنی بر نام میزبان شرط دومی میافزایند: خودِ جستوجو. اگر کلاینت نقطه پایانی را پیش از بالا آمدن مسدودی حل کند، میتواند از نشانی ذخیرهشده استفاده کند، اما وقتی پروفایل نشانیها را میچرخاند یا ورودی ذخیرهشده کهنه میشود، دستدادن به نشانیای میرود که قاعده مجاز آن را پوشش نمیدهد. IPv6 این را آشکار میکند، چون نقطه پایانی دوپشته میتواند هر دو رکورد A و AAAA را منتشر کند، و قاعده مجازی که تنها نشانی v4 را پوشش میدهد کلاینت را وادار میکند برابر نشانی v6 مسدودشده دوباره تلاش کند.
نام گزینهها و مقادیر پیشفرض بسته به کلاینت و نسخه فرق میکند، پس فهرست مستند خودتان را بخوانید و از روی تصویرهای صفحه حدس نزنید. مرجع تنظیمات OpenVPN Connect در openvpn.net/connect-docs/app-settings-windows نمونهای است از اینکه یک کلاینت گزینههای مسدودسازی و تونل تفکیکشده خود را چگونه توصیف میکند.
بستن هنگام شکست یک ماشین حالت است، نه یک کلید
بیشتر کلاینتها مسدودی را بهعنوان سیاست دیوار آتش در سه حالت بیان میکنند: تونل بالا، با ترافیک از درون تونل و بدون مسدودی؛ تونل پایین، با مسدودی فعال؛ و گذار، با مسدودی فعال بهعلاوه استثناهای موقت برای نقطه پایانی. اشکالها در حالت سوم زندگی میکنند، چون باید دو بار در چند ثانیه تغییر کند و ناتوانی در بیرون آمدن از آن دقیقاً مانند یک مسدودی دائمی دیده میشود.
سازوکار بسته به سکو فرق میکند و شکست هم. پالایههای Windows Filtering Platform وزن دارند، پس پالایه مسدودسازی که بر مجوز شما غلبه میکند حتی با وجود مجوز به دور ریختن بستهها ادامه میدهد، و پالایههایی که یک فرایند کلاینت کشتهشده جا گذاشته است میتوانند دستگاه را پس از رفتن برنامه بیرون از شبکه نگه دارند. کلاینتهای macOS معمولاً قواعد pf را در یک لنگر مینویسند، جایی که ترتیب قواعد و تصمیمهای سریع تعیین میکند کدام قاعده اعمال شود. کلاینتهای Linux معمولاً زنجیرهای nftables یا iptables را با سیاست drop و مجوزهای صریح برای نقطه پایانی، واسط تونل و loopback مدیریت میکنند. حالت always-on VPN اندروید همراه با گزینه مسدودکردن اتصالها بدون VPN سختگیرانهترین در این گروه است، چون سیستم عامل مسدودی را برای کل دستگاه اعمال میکند نه برای هر برنامه.
WireGuard یادداشت جداگانه میخواهد، چون AllowedIPs یک انتخابگر مسیر است نه مسدودکننده. تعیین میکند کدام مقصدها به تونل میروند؛ کاری نمیکند تا بستهای که هنوز تونل ندارد از Wi-Fi بیرون نرود. در چیدمانی تنها با WireGuard و بدون قاعده دیوار آتش، کلید قطع در واقع نبودِ مسیر است، و پس از یک دستدادن دورانداختهشده ممکن است بسته واقعی از واسط فیزیکی بیرون برود.
فاصله را اندازه بگیرید نه اینکه به نشانگر نگاه کنید
بستهها را بپایید، نه چراغ وضعیت را. در Linux یک ping آهسته به نشانی عمومی در یک ترمینال آغاز کنید و در ترمینال دیگر درگاه انتقال تونل را روی واسط فیزیکی بگیرید:
ping -i 0.2 -c 100 1.1.1.1 | tail -5
sudo tcpdump -ni eth0 'udp port 51820'
هنگامی که هر دو در حال اجرا هستند سرور را در کلاینت عوض کنید. سه چیز مهم است: اینکه pingها چه مدت میایستند، اینکه ثبت نشان میدهد دستدادن به نقطه پایانی جدید میرسد یا نه، و اینکه ترافیک پیش از تغییر وضعیت کلاینت به متصل یا پس از آن برمیگردد. اگر فاصله ping اول تمام شود، یا مسدودی زود برداشته شده یا تونل پیش از آنکه نشانگر اعتراف کند بالاست. اگر فاصله دیرتر تمام شود، نشانگر بیش از حد خوشبین است.
در Windows، فرمان netsh wfp show state یک عکس لحظهای مینویسد که میتوانید در آن پالایههای مسدودسازی را جستوجو کنید که هنوز حاضرند در حالی که کلاینت میگوید قطع است. در macOS، فرمان sudo pfctl -sr قواعد بارگذاریشده و ترتیبشان را فهرست میکند. هر عکس لحظهای را با گزارش خود کلاینت جفت کنید؛ خط زمانی ping شما میگوید مسدودی دیر تمام شد یا هرگز تمام نشد.
خاموشی طبیعی در برابر مسدودی گیرکرده
بخشی از وقفه خودِ هدف این ویژگی است، پس پیش از تغییر هر تنظیمی دستهبندی کنید:
| What you see | Usually means | Next check |
|---|---|---|
| Two or three seconds of timeouts, then normal browsing | Expected fail-closed gap | Nothing to fix |
| State says connected, traffic stays dead | Block filter or route left behind | Firewall snapshot, client log |
| One app dead while others work | TCP session bound to the old exit address | Restart the app |
| LAN devices unreachable after the switch | LAN exception not reapplied | Allow-LAN or split-tunnel setting |
| New server hangs, the old one reconnects | Permit covers only the old address | Resolved address of the new host, including AAAA |
اگر در ردیف دوم یا پنجم افتادید، کلید قطع را برای آزمایش خاموش نکنید، چون این کار یک اشکال مسیریابی را به نشتی تبدیل میکند. سرویس کلاینت را دوباره راه بیندازید، یا جایی که پالایهها از کشتن فرایند جان سالم به در میبرند دستگاه را ریاستارت کنید، سپس ببینید مسدودی پاک میشود یا نه. اگر پاک شود، نقص در پاکسازی هنگام تغییر است نه در خود مسدودی.
پیش از تغییر بعدی چهار چیز را تأیید کنید: مجوز نقطه پایانی هر خانواده نشانیای را که پروفایل شما حل میکند پوشش میدهد، گزارش کلاینت کاملشدن گذار را نشان میدهد، آزمایش ping شما فاصله را میسنجد نه نشانگر را، و بستن کلاینت اتصال عادی را برمیگرداند. کلید قطعی که هنگام تغییر میماند و پس از آن رها میکند کار خود را میکند. کلیدی که زود یا هرگز رها میکند ارزش عیبیابی دارد.