آپ /etc/wireguard/wg0.conf میں ایک peer شامل کرتے ہیں، systemctl restart wg-quick@wg0 چلاتے ہیں، اور دوبارہ دیکھنے پر peer فائل سے غائب ہے۔ کسی نے کچھ خراب نہیں کیا۔ دوبارہ شروع کرنا رکنے کے بعد شروع ہونا ہے، اور رکنے کا مرحلہ ابھی ترمیم کی گئی فائل پر موجودہ رن ٹائم حالت لکھ سکتا ہے۔ ذمہ دار سیٹنگ اسی فائل میں رہتی ہے جسے آپ ترمیم کر رہے تھے، اور یہی اس لوپ کو پہلی بار سامنا کرنے پر اتنا الجھا ہوا بناتا ہے۔

دو حالتیں، ایک فائل اور بند کرنے کے وقت کی محفوظیت

WireGuard کی رن ٹائم حالت اور wg-quick کی کنفیگریشن فائل متعلق ہیں مگر مختلف ہیں۔ فائل ان پٹ ہے: wg-quick اسے پڑھتا ہے، انٹرفیس بناتا ہے، پتے اور راستے مقرر کرتا ہے اور peer ترتیب دیتا ہے۔ کرنل ڈیوائس زندہ شے ہے، اور wg سے کی گئی نچلی سطح کی تبدیلیاں کبھی خود واپس نہیں لکھی جاتیں۔

ایک سمت کے سوا۔ جب انٹرفیس کے حصے میں SaveConfig = true ہوتا ہے تو wg-quick انٹرفیس نیچے اتارنے کے حصے کے طور پر زندہ کنفیگریشن فائل میں محفوظ کرتا ہے۔ wg-quick دستی بالکل اسی سے خبردار کرتا ہے: انٹرفیس کے فعال رہتے ہوئے فائل میں کی گئی تبدیلیاں اسے ہٹاتے وقت اوپر لکھی جا سکتی ہیں۔ یہ بند کرنے کے وقت کی محفوظیت ہے، پس منظر کا ٹائمر نہیں، اس لیے یہ صرف اس وقت چلتی ہے جب کوئی چیز انٹرفیس روکتی ہے۔

ActionWhat it writesWhen it surprises you
wg set on a live interfaceKernel state onlyAfter reboot, when the file was never updated
wg-quick down with SaveConfigLive state into the fileRight after you edited the file
wg syncconfKernel state onlyNever; it does not touch the file
wg-quick upKernel state from the fileIf the file is stale, you get the old tunnel

جدول کو ترتیب کے بارے میں انتباہ کے طور پر پڑھیں۔ اس شعبے میں ہر حادثاتی نقصان محفوظ کرنے کے بعد نہیں بلکہ اس سے پہلے ہونے والی ترمیم سے آتا ہے۔

پہلے روکیں، دوسرے ترمیم کریں، آخر میں شروع کریں

اگر فائل آپ کا سچ کا ماخذ ہے تو امید سے نہیں، ساخت سے فائل کو بااختیار بنائیں۔ انٹرفیس نیچے اتاریں، تصدیق کریں کہ وہ گیا، پھر ترمیم کریں، پھر اسے دوبارہ اوپر لائیں۔ اصول سادہ ہے: جب تک محفوظیت چل سکتی ہے، کوئی ترمیم موجود نہ ہو۔

sudo cp -a /etc/wireguard/wg0.conf /root/wg0.conf.$(date +%F-%H%M)
sudo wg-quick down wg0
ls /sys/class/net/wg0 2>/dev/null || echo "interface is gone"
sudoedit /etc/wireguard/wg0.conf
sudo wg-quick up wg0

بیک اپ لائن محض رسم نہیں۔ اگر ٹنل اس مشین تک پہنچنے کا آپ کا راستہ ہے تو نیچے اتارنے کا مرحلہ آپ کا سیشن ختم کر سکتا ہے، اور ڈسک پر نقل کے ساتھ کنسول یا آؤٹ آف بینڈ راستہ ہی واحد کارآمد رول بیک ہے۔ دوسری لائن پر بھروسا کرنے سے پہلے اسے جانچیں: خاموشی سے ناکام ہونے والی اسکرپٹ میں پرانا انٹرفیس نام ہی وہ طریقہ ہے جس سے لوگ اب بھی زندہ فائل میں ترمیم کرتے ہیں۔

عام نیچے اتارنے سے پہلے SaveConfig = false مقرر کرنا دوسرا قابل قبول راستہ ہے، اور یہ اسی فائل میں کرنا ہوگا جو wg-quick واقعی پڑھتا ہے۔ یہ اس ایک خودکار محفوظیت کو روکتا ہے۔ یہ الگ NetworkManager پروفائل، راؤٹر ایکسپورٹ یا کنٹینر انٹری پوائنٹ کو آپ کی ترامیم دوبارہ لوڈ کرنے پر مجبور نہیں کرتا، کیونکہ وہ منتظمین یہ فائل بالکل نہیں پڑھتے۔

انٹرفیس پھاڑے بغیر peer تبدیلیاں لاگو کریں

ہر ترمیم کو وقفے کی ضرورت نہیں۔ فائل کو کنفیگریشن میں بدل کر ہم آہنگ کرنے سے چلتی ہوئی انٹرفیس پر peer سطح کی تبدیلیاں لاگو کی جا سکتی ہیں، جو نیچے اتارنے کے مرحلے کو مکمل طور پر بچاتی ہے اور اس لیے محفوظیت کو بھی بچاتی ہے:

sudo wg syncconf wg0 <(sudo wg-quick strip wg0)
sudo wg show wg0 peers
sudo wg show wg0 latest-handshakes

strip مرحلہ اہم ہے۔ یہ فائل کو صرف wg-quick کی چابیاں ہٹا کر چھاپتا ہے، تاکہ پتے، DNS اور روٹنگ ہدایات ایسے آلے میں نہ جائیں جو انہیں نہیں سمجھتا۔ پھر ہم آہنگی انٹرفیس دوبارہ بنائے بغیر peer اور چابیاں زندہ ڈیوائس پر لاگو کرتی ہے، اس لیے موجودہ سیشن اور راستے بچے رہتے ہیں۔

حدود کے بارے میں درست رہیں۔ peer ہم آہنگ کرنا انٹرفیس کا پتہ، wg-quick کے شامل کردہ راستے یا resolver کی کنفیگریشن نہیں بدلتا، کیونکہ ان میں سے کوئی بھی WireGuard ڈیوائس کا نہیں ہے۔ AllowedIPs میں سب نیٹ شامل کرنا اور یہ توقع کرنا کہ کرنل اسے روٹ کرے گا، روایتی غلط قراءت ہے؛ راستہ اوپر اٹھاتے وقت wg-quick یا آپ کو شامل کرنا ہوگا۔

کچھ بھی ترمیم کرنے سے پہلے دیکھیں کہ انٹرفیس کس کا ہے

کنفیگریشن سسٹم کے زیر انتظام ڈیسک ٹاپ یا سرور پر فائل ان پٹ کے بجائے آؤٹ پٹ ہو سکتی ہے۔ NetworkManager کنکشن، راؤٹر کا بنایا پروفائل یا کنٹینر اسٹارٹ اپ اسکرپٹ سب ایک ہی انٹرفیس نام کے مالک ہو سکتے ہیں، اور اس صورت میں بے عیب wg-quick ترتیب بھی غلط چیز ہی میں ترمیم کرتی ہے۔

systemctl status wg-quick@wg0 --no-pager
nmcli connection show | grep -i wireguard
sudo wg showconf wg0 | head -n 5

تیسری کمانڈ زندہ کنفیگریشن کو فائل جیسی ہی شکل میں، نجی چابی سمیت چھاپتی ہے، جو موازنے کے لیے مفید اور ٹکٹ میں خطرناک ہے۔ چسپاں کرنے سے پہلے اسے مبہم کریں؛ معاونت کے دھاگے میں نجی چابی مستقل سمجھوتہ ہے، ٹائپو نہیں۔

اگر سروس یونٹ غیر فعال ہے مگر انٹرفیس موجود ہے تو کسی اور نے اسے بنایا ہے اور فائل بااختیار نہیں۔ وہ ایک مشاہدہ کسی نہ پڑھی جانے والی فائل میں ترمیم کا ایک گھنٹہ بچاتا ہے۔

اگلی دوبارہ شروعات کی تصدیق کریں، پھر رول بیک رکھیں

جو آزمائش واقعی اصلاح کو ثابت کرتی ہے وہ دوسری دوبارہ شروعات ہے، کیونکہ پہلی بار وہی ترتیب ناکام ہوئی تھی۔ تصدیق کریں کہ peer اس سے بچتا ہے اور زندہ کنفیگریشن اب بھی ڈسک پر موجود سے میل کھاتی ہے:

sudo systemctl restart wg-quick@wg0
sudo wg show wg0 latest-handshakes
sudo grep -c '^\[Peer\]' /etc/wireguard/wg0.conf

دوبارہ شروعات دو بار چلائیں۔ ایک بار صاف گزرنا خوش قسمتی ہو سکتا ہے: پہلی دوبارہ شروعات ایسی رن ٹائم تبدیلی استعمال کر سکتی ہے جو ابھی محفوظ نہیں ہوئی تھی، اس لیے دوسری ہی آپ کو بتاتی ہے کہ پہلی کے آخر میں فائل اور رن ٹائم متفق تھے۔

بیک اپ کو عمل کے آغاز سے دوہری دوبارہ شروعات مکمل ہونے تک رکھیں، پھر اسے حذف کریں یا کنفیگریشن ڈائریکٹری سے باہر لے جائیں۔ اصل فائل کے پاس پڑی wg0.conf.bak wg-quick کے لیے بے ضرر ہے اور اگلے شخص کے لیے الجھن پیدا کرتی ہے، جو بالآخر غلط میں ترمیم کرے گا۔

متعلقہ مضامین