Tailscale سب نیٹ راؤٹر پر ماخذ NAT بند کریں، سرنگ کام کرتی رہتی ہے جبکہ اس سے گزرنے والے کنکشن رک جاتے ہیں۔ درخواستیں منزل تک دور دراز کلائنٹ کے اپنے اوورلے پتے کے ساتھ پہنچتی ہیں، جو اسی تبدیلی کا مقصد ہے، اور جوابات کو اب ایسا راستہ درکار ہے جو LAN کو کبھی جاننے کی ضرورت نہیں تھی۔ اس راستے کے بغیر پیکٹ اترتے ہیں، جوابات عام گیٹ وے سے باہر جاتے ہیں، اور ناکامی ایسی فائر وال مسئلہ دکھائی دیتی ہے جسے کوئی فائر وال قاعدہ نہیں سمجھاتا۔ سرنگ صحت مند ہے؛ واپسی والا حصہ غائب ہے۔

SNAT کیا چھپا رہا تھا

SNAT فعال ہونے پر راؤٹر سب نیٹ میں بھیجنے سے پہلے ماخذ پتے کو اپنے LAN پتے میں دوبارہ لکھتا ہے، اس لیے منزل اس میزبان کو جواب دیتی ہے جس تک پہنچنا اسے پہلے سے معلوم ہے اور مزید کچھ تشکیل کرنے کی ضرورت نہیں۔ اسے بند کرنے سے اصل ماخذ برقرار رہتا ہے، اور منزل پھر اپنی تار پر پڑوسی کے بجائے اوورلے رینج کے اندر پتہ دیکھتی ہے۔ وہ پتہ حقیقی ہے اور tailnet بھر میں روٹ کیا جا سکتا ہے، مگر ڈیفالٹ گیٹ وے کے ذریعے LAN سے وہاں پہنچا نہیں جا سکتا۔ دستاویزی سوئچ --snat-subnet-routes=false ہے، جو Linux سب نیٹ راؤٹر پر ہی لاگو ہوتا ہے۔

یہ ہر پیکٹ کا ٹوگل نہیں بلکہ مستقل ترتیب ہے، اس لیے اس راؤٹر کی طرف سے خدمت کیے جانے والے ہر منزل نیٹ ورک کے لیے واپسی کا راستہ موجود ہونا چاہیے۔ یہی تبدیلی کو چیک باکس کے بجائے تعیناتی کا فیصلہ بناتا ہے۔ اس راؤٹر کی ہر خدمت کو یہ تقاضا اسی لمحے ورثے میں ملتا ہے۔

واپسی کا راستہ کہاں ہو سکتا ہے

تین مقامات عام ہیں، اور وہ درستی میں نہیں بلکہ رسائی میں مختلف ہیں۔ منزل میزبان پر جامد راستہ سب سے براہ راست اور سب سے کم پھیلنے والا ہے، کیونکہ ہر آلے کو اپنی نقل درکار ہے۔ VPC یا سائٹ راؤٹر میں راستہ جدول پورے نیٹ ورک کو ایک ساتھ ڈھانپ لیتا ہے، اور بغیر طبقہ جامد راستے لے جانے والا DHCP اختیار کلائنٹ تک خودکار پہنچتا ہے لیکن ان آلات پر خاموشی سے ناکام ہوتا ہے جو اسے نظر انداز کرتے ہیں۔

ip route add 100.64.0.0/10 via 192.168.1.10
ip route get 100.64.0.5

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

ناکامی کو یک طرفہ ٹریفک کے طور پر پڑھنا

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

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

sudo tcpdump -ni any host 100.64.0.5
ip route get 100.64.0.5

کیا اصل پتہ راستے کے لائق ہے

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

ایک چھوٹے LAN کے لیے یہ تبادلہ عام طور پر فائدہ مند ہوتا ہے، جبکہ جامد راستہ نہ لے سکنے والے آلات کی کثرت کے لیے عام طور پر نہیں۔ فیصلہ اور وجہ راؤٹر ترتیب کے ساتھ لکھیں، تاکہ اگلے منتظم کو معلوم ہو کہ کون سا رویہ جان بوجھ کر ہے۔ جس ڈیفالٹ کو کسی نے نہیں لکھا، اسے لاپرواہی سے الگ نہیں کیا جا سکتا۔

فائر وال، لاگنگ اور دوہرا کردار

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

sudo nft list ruleset | grep -n '100\.64'
sudo iptables-save | grep -n '100\.64'

ایک نوڈ کا بیک وقت ایگزٹ نوڈ اور سب نیٹ راؤٹر ہونا دستاویزی امتزاج ہے جو سب نیٹ SNAT بند ہونے پر اپ اسٹریم ٹریفک گرا سکتا ہے۔ ان کرداروں کو الگ الگ نوڈز پر تقسیم کرنا اس انتباہ کو دور کرتا ہے اور ہر راستے اور فائر وال پالیسی کو ایک ہی مالک دیتا ہے۔ اگر کردار ساتھ ہی رہنا ضروری ہوں، تو اس رویے کی توقع رکھیں اور کلائنٹ کو قصوروار ٹھہرانے سے پہلے اسے جانچیں۔ راستہ، سوئچ ترتیب اور کردار کی تقسیم ایک ہی نوٹ میں رکھیں، کیونکہ اگلا کنکشن ناکام ہونے پر وہ اکٹھے پڑھے جاتے ہیں۔

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