دست‌دادن در wg show تازه است، نقطه پایانی درست است، کلیدها هرگز تغییر نکرده‌اند — و ping هنوز می‌گوید مسیری به همتا نیست. یک ساعت پیش زیرشبکه تونل را عوض کردید. این نشانه امضای ناسازگاری پیشوند است، نه مشکل کلید: WireGuard دست‌دادن را کامل کرد و سپس داده‌ها را دور انداخت، چون آدرس مبدأ دیگر با آنچه همتای گیرنده می‌پذیرد مطابقت ندارد. دو راه معقول برای اعمال تغییر زیرشبکه وجود دارد و هر یک در جای متفاوتی شکست می‌خورد.

دو راه برای اعمال تغییر، و هزینه هر کدام

گزینه A شماره‌گذاری مجدد درجاست: آدرس رابط، بازه‌های همتا، مسیرها و هر نسخه از پیکربندی را ویرایش کنید و سپس دوباره بارگذاری کنید. گزینه B ساختن رابط دوم روی پیشوند جدید در کنار رابط قدیمی است، انتقال همتاها و حذف رابط قدیمی پس از آنکه ترافیک واقعاً جابه‌جا شد.

A: renumber in placeB: parallel interface
DowntimeThe reload window, per hostNone if peers are added to both
RollbackRe-apply the previous filesPoint peers back at the old interface
RiskHalf-applied change: new address, old rangesTwo live interfaces with overlapping intent
EffortSmall, if the deployment has one ownerHigher, and needs a cleanup step
FitsTwo or three peers you controlMany peers, remote sites, or no maintenance window

همان وضعیت نیمه‌اعمال‌شده است که گزینه A را خطرناک می‌کند، چون خراب به نظر نمی‌رسد. رابط بالا می‌آید، دست‌دادن موفق می‌شود و فقط مسیر داده شکست می‌خورد. گزینه B کار بیشتری می‌خواهد اما مسیر کارآمد را تا زمانی که همه ارجاع‌ها را پیدا کنید زنده نگه می‌دارد.

چه چیزهایی باید در سمت شما با هم جابه‌جا شوند

چهار چیز روی میزبان محلی همان زیرشبکه را توصیف می‌کند و تغییر یکی تغییر همه است: آدرس رابط، AllowedIPs هر همتا، مسیری که سیستم برای آن مقصدها به کار می‌برد و هر چیزی که مدیر به‌جای شما نصب می‌کند. با wg-quick دو مورد آخر هر بار که رابط بالا می‌آید از پیکربندی ساخته می‌شوند، بنابراین یک نسخه کهنه بی‌صدا پیشوند قدیمی را دوباره نصب می‌کند.

پیکربندی‌شده را با آنچه زنده است مقایسه کنید، نه اینکه به یکی از آن دو اعتماد کنید:

wg show
wg showconf wg0
ip addr show wg0
ip route get 10.90.0.5

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

برای یک رابط در حال اجرا، فایل ویرایش‌شده را بدون فروپاشاندن تونل اعمال کنید:

wg syncconf wg0 <(wg-quick strip wg0)

این کار همتاها و بازه‌ها را درجا به‌روز می‌کند. آدرس رابط یا مسیرها را به‌روز نمی‌کند، چون آنها تنظیمات WireGuard نیستند — پس شماره‌گذاری مجدد هنوز به بازسازی رابط یا تغییر آدرس با ip نیاز دارد و سپس باید مسیریابی دوباره بررسی شود.

چه چیزهایی باید در انتهای دور با هم جابه‌جا شوند

اینجاست که تغییر زیرشبکه معمولاً می‌میرد. AllowedIPs فقط یک اشاره مسیریابی نیست؛ فهرست آدرس‌های مبدئی هم هست که یک همتا اجازه دارد ارائه کند. وقتی کارخواه‌ها را شماره‌گذاری مجدد می‌کنید و AllowedIPs سرور را روی پیشوند قدیمی می‌گذارید، سرور دست‌دادن را می‌پذیرد، بسته‌های رمزگذاری‌شده را دریافت می‌کند و آنها را دور می‌ریزد، چون مبدأ درونی با هیچ بازه‌ای که به آن همتا نسبت می‌دهد مطابقت ندارد. هیچ خطایی ثبت نمی‌شود و کارخواه یک وقفه زمانی می‌بیند.

پس سمت گیرنده را آگاهانه به‌روز کنید: ورودی همتا روی سرور باید پیشوند جدید کارخواه را فهرست کند، مسیر بازگشت خود سرور باید برای آن پیشوند به تونل اشاره کند و هر شبکه پایین‌دستی پشت سرور باید مسیر جدید را یاد بگیرد. سیاست دیوار آتشی که بازه قدیمی را نام می‌برد هم به همان درمان نیاز دارد و همچنین هر چیزی که انتخاب بر پایه مبدأ انجام می‌دهد.

تشخیصی که دو شکست را از هم جدا می‌کند ارزان است. دست‌دادن تازه بدون داده یعنی تونل بالاست و آدرس‌دهی درونی توافق ندارد. نبود کامل دست‌دادن یعنی به دسترس‌پذیری یا کلیدها نگاه می‌کنید. برای مشکل پیشوند کلیدها را نچرخانید؛ این تنها چیزی را که کار می‌کرد بازنشانی می‌کند.

نسخه‌های کهنه‌ای که از ویرایش شما بیشتر عمر می‌کنند

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

نام‌ها هم سفر می‌کنند. اگر مسیر عددی کار کند اما نام میزبان شکست بخورد، یک رکورد DNS داخلی یا پیکربندی یک سرویس هنوز به آدرس قدیمی تونل اشاره می‌کند. ارجاع را درست کنید، نه اینکه هر بازه همتا را گسترده کنید، چون آن کار مشکل واقعی را می‌پوشاند و همزمان ACL مبدأ را بزرگ می‌کند.

در حین کار یک مسیر بازیابی را باز نگه دارید: راه دومی به میزبان، یک کنسول سریال یا بازگردانی زمان‌بندی‌شده فایل‌های پیکربندی. تغییری در تونل که شما را از ماشینی که در حال تغییرش هستید بیرون بگذارد، رایج‌ترین راه تبدیل این کار به یک شب است.

انتخاب میان دو گزینه و تأیید قطع

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

در هر دو گزینه، تغییر زمانی انجام شده است که چهار بررسی بگذرد: دست‌دادن تازه است، جست‌وجوی مسیر برای مقصدی با پیشوند جدید تونل را نام می‌برد، باری به اندازه چند صد بایت در هر دو جهت منتقل می‌شود و همین پس از راه‌اندازی مجدد میزبان یا مدیر هم برقرار است. برای راهنمای wg(8) مرجعی است برای اینکه AllowedIPs در هر جهت چه معنایی دارد، و ارزش دارد پیش از گسترده کردن یک بازه برای محو کردن یک نشانه، دوباره خوانده شود.

  • دست‌دادن تازه و بدون داده: پیش از دست زدن به کلیدها، AllowedIPs را در گیرنده ببینید.
  • جست‌وجوی مسیر به رابط اشتباه اشاره می‌کند: مسیر مال مدیر یا کانتینر است، نه فایل شما.
  • آدرس عددی درست و نام میزبان خراب: یک ارجاع قدیمی، نه حلقه مسیریابی.
  • تغییر تنها زمانی کامل است که پس از راه‌اندازی مجدد هنوز از پیشوند جدید استفاده شود.

مقالات مرتبط