تقریباً ہر چھوٹے OpenVPN گیٹ وے پر نام کے دو مسائل سامنے آتے ہیں۔ جڑے ہوئے لیپ ٹاپ تک اس کے سرٹیفکیٹ پر لکھے نام سے نہیں پہنچا جا سکتا، اور سرنگ کے پیچھے کی سروسز کے نام ہی نہیں ہیں۔ یہ ایک ہی مسئلہ لگتے ہیں اور اُلٹ علاج چاہتے ہیں، کیونکہ ایک پتہ ہر سیشن کے ساتھ بدلتا ہے اور دوسرا نہیں۔ کچھ بھی تبدیل کرنے سے پہلے طے کریں کہ آپ کس قسم کا نام شامل کر رہے ہیں۔

گیٹ وے کے حساب سے نہیں، نام کے حساب سے فیصلہ کریں

جانچ سادہ ہے: جب کلائنٹ دوبارہ جڑتا ہے تو کیا یہ پتہ بدلتا ہے؟ اگر ہاں، تو نام VPN سیشن سے بنایا جانا چاہیے۔ اگر نہیں، تو یہ ایک مستقل اندراج میں ہے جسے آپ پڑھ اور جانچ سکتے ہیں۔

Name kindSource of truthWhere it lives
Connected clientThe address OpenVPN just assignedGenerated hosts file, rewritten per session
Service behind the tunnelA fixed address you choseStatic address= drop-in
Anything with a certificate nameThe certificate, not the poolEither, but the name must match the certificate

دونوں کو ملانا ہی عام ناکامی ہے۔ بنائی گئی فائل میں مستقل کیا گیا سروس اسکرپٹ کے پہلی بار دوبارہ لکھنے پر غائب ہو جاتا ہے، اور مستقل اندراج میں لکھا کلائنٹ اُس کی طرف اشارہ کرتا ہے جس کے پاس وہ پتہ آخری بار تھا۔ دونوں غلطیاں اُس وقت تک نظر نہیں آتیں جب تک نام غلط مشین پر حل نہ ہو جائے۔ اُس وقت ڈی بگ کرنے والا سمجھتا ہے کہ DNS خراب ہے، فائل نہیں۔

متحرک راستہ: learn-address اور پول

OpenVPN تقسیم جانتا ہے، اس لیے اسے بتانے دیں۔ یہ سرور اختیارات تقسیم کو پائیدار اور اسکرپٹ کے قابل بناتے ہیں:

client-config-dir /etc/openvpn/ccd
ifconfig-pool-persist /etc/openvpn/ip-pool 60
script-security 2
learn-address /etc/openvpn/learn-address.sh

learn-address ہر بار پتہ شامل، اپ ڈیٹ یا حذف ہونے پر آپ کی اسکرپٹ چلاتا ہے، اور عمل، پتہ اور مشترکہ نام آگے بھیجتا ہے۔ کم سے کم اسکرپٹ ہر کلائنٹ کے لیے ایک سطر شامل کرتا ہے اور حذف کے وقت اُسے ہٹا دیتا ہے:

#!/bin/sh
HOSTS=/etc/openvpn/hosts.lan
case "$1" in
  add|update) echo "$2 $3" >> "$HOSTS" ;;
  delete)     sed -i "/^$2 /d" "$HOSTS" ;;
esac
kill -HUP $(cat /var/run/dnsmasq.pid)

tun ڈیوائس پر دوسری دلیل کلائنٹ کا سرنگ پتہ ہے، اس لیے سطر براہ راست استعمال کی جا سکتی ہے۔ tap ڈیوائس پر OpenVPN اس کے بجائے کلائنٹ کا MAC پتہ بھیجتا ہے، کیونکہ tap سیگمنٹ IPv4 کے علاوہ دیگر پروٹوکول بھی لے جا سکتا ہے، اور پھر کچھ لکھنے سے پہلے مشترکہ نام سے پول فائل میں پتہ تلاش کرنا پڑتا ہے۔

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

مستقل راستہ: address= اور ڈومین کی توسیع

سسٹم کی hosts فائل کے بجائے dnsmasq کو بنائی گئی فائل کی طرف اشارہ کریں، اور اسے ڈومین دیں تاکہ مختصر نام مکمل اہل ناموں میں پھیل جائیں:

domain=corp.example
no-hosts
addn-hosts=/etc/openvpn/hosts.lan
listen-address=127.0.0.1,10.8.0.1
bind-interfaces

جب domain مقرر ہو، تو 10.8.0.6 alice جیسی سطر alice اور alice.corp.example دونوں کے لیے جواب دیتی ہے۔ listen-address کو صرف سرنگ گیٹ وے اور loopback تک محدود رکھیں، کیونکہ LAN انٹرفیس پر حادثاتی طور پر شائع شدہ ریزولور ایسی سروس ہے جو آپ پیش کرنے کا ارادہ نہیں رکھتے تھے۔

وہ سروسز جو کبھی پول سے نہیں آتیں اُن کے اپنے اندراجات ہوتے ہیں۔ اُنہیں تقسیم کی کنفیگریشن ڈائریکٹری میں الگ drop-in فائل میں رکھیں تاکہ پیکیج اپ گریڈ اُنہیں مٹا نہ سکے:

address=/files.corp.example/10.8.0.20
address=/db.corp.example/10.9.0.5

ریزولور حوالے کریں ورنہ کچھ نہیں ہوگا

جسے کوئی نہیں پوچھتا ایسا ریزولور کچھ نہیں بدلتا۔ سرور کو اُس کا اعلان کرنا ہوگا:

push "dhcp-option DNS 10.8.0.1"
push "dhcp-option DOMAIN corp.example"

Windows کلائنٹ دونوں اختیارات خود لاگو کرتے ہیں۔ زیادہ تر Linux کلائنٹ نہیں کرتے: اُنہیں معاون ریزولور انضمام درکار ہے، جیسے تقسیم کا update-resolv-conf ہک یا NetworkManager کا DNS انتظام، یا ہاتھ سے مقرر کردہ تلاش ڈومین اور نیم سرور۔ push کو مان لینے کے بجائے کلائنٹ کا اصل ریزولور جانچیں، کیونکہ نظر انداز کیا گیا push بالکل ایسے سرور جیسا دکھتا ہے جو جواب نہیں دے رہا۔

تین تہوں پر تصدیق کریں

پہلے براہ راست سرور سے پوچھیں، پھر کلائنٹ سے، پھر ایپلیکیشن سے:

dig +short @10.8.0.1 alice.corp.example
getent hosts files.corp.example

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

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

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