د TLS بسته د OpenVPN مخې ته کېږدئ او ځای پر ځای کول دویم اورېدونکی ترلاسه کوي، چې یوازې یو یې باید کله هم انټرنېټ ته مخامخ شي۔ کله چې تونل له همدې ماشین کار کوي او له باندې ناکامېږي، لېږد معمولاً د دوی له دوو څخه غلط ته متوجه وي۔ هغه څه چې باید برابر شي یوه زنځیر ده: عامه قاعده بستې ته رسېږي، او د بستې خپله بیکنډ نښلون اصلي VPN ساکټ ته رسېږي۔ څلور ټوپونه دا زنځیر وړي، او هر یو یې کولای شي څېړنه ژر پای ته ورسوي۔

دوه ساکټونه، دوه مالکان، یو یې عامه

بسته د باندې نښلون لپاره TLS پای ته رسوي او ډيکریپټ شوی بایټ جریان یو عادي OpenVPN TCP اورېدونکي ته سپاري۔ دا جلا ساکټونه له جلا کانفیګریشن فایلونو سره دي، نو یو یې سمول بل ناچې او لا هم ظاهراً روغ پریږدي۔ دا دا هم مانا لري چې دواړه کولای شي سره جلا شي کله چې یو له بل پرته بدل شي۔

له ماشین څخه پخپله کار کول نو د عامه لارې په اړه ډېر لږ ثابتوي۔ اصلي پورټ ته مستقیم نښلون بسته پرېږدي، بستې ته د هغې د LAN پتې له مخې نښلون ژباړه پرېږدي، او یوازې د کلاینټ اړخ بشپړ ترتیب هغه څه تمرینوي چې بهرنی کارونکی یې کوي۔ نومونه هم باید په احتیاط سره ولوستل شي، ځکه چې localhost هغه هوسټ مانا کوي چې همدا برخه چلوي، نه هغه هوسټ چې تاسو ناڅاپه پرې ټایپ کوئ۔ دا توپیر په خپلو یادښتونو کې وساتئ، ځکه چې د خپل پوښل شوي ټوپ پرته ثبت شوې ازموینه د دوو بېلو شیانو پرتله کولو ته بلنه ورکوي۔

لېږد واقعاً چېرته ناست کېږي

زنځیر د درې پورټ شمېرو په پرتله د څلورو ټوپونو په توګه ساتل اسانه دي، ځکه چې یوه شمېره په هر سر کې بېل مانا ورکولای شي۔ جدول کرښه په کرښه ولولئ: هر کرښه یو ساکټ دی چې باید یو نښلون ومني او بیا بل پرانیزي۔ کله چې یوه کرښه غلط ملګري ته متوجه وي، د وروستي ستنې نښه هغه څه ده چې کارونکی یې راپور ورکوي۔

HopListens onMust reachSymptom when it points elsewhere
Client machineA local plaintext portThe wrapper's public TLS addressPlain text offered to a TLS endpoint
Router forwardPublic TCP 443The wrapper host on its translated portWrapper records no connection at all
Wrapper, server modeIts accepted port, 8443 hereThe native VPN socket on loopbackHandshake completes, then silence
Native VPN listenerLoopback TCP portIts peer, over TCP onlyA UDP socket behind a byte-stream relay

هغه قاعده چې د بستې پرځای اصلي VPN پورټ په نښه کوي، د TLS پای بشپړ پرېږدي، او دا د دې تېروتنې تر ټولو عامه بڼه ده: کلاینټ له هغه اورېدونکي سره لاس ورکول پرانیزي چې د OpenVPN چوکاټ تمه لري، نو نښلون کېدای شي پرانیستل شي او بیا ودرېږي۔ ژباړل شوی پورټ د حافظې پرځای د بستې د کانفیګریشن فایل سره تایید کړئ، ځکه چې بل ځل چې څوک هغه فایل سم کړي ممکن بله شمېره غوره کړې وي۔ لاندې دوه کمانډونه د دې پوښتنې دواړه خواوې یو ځای ښیي۔

grep -nE '^[[:space:]]*(accept|connect)' /etc/stunnel/stunnel.conf
ss -lntp | grep -E ':443|:8443|:1194'

هغه بایند پته چې تاسو ردوي

127.0.0.1 ته تړل شوې accept کرښه یوازې خپل هوسټ ته ځواب وایي، نو هغه لېږد چې LAN پتې ته راځي نشي نښلېدلی او کلاینټ داسې رد ویني چې د پاکټ فلټر ستونزې غوندې ښکاري۔ د اور وژنې دیوال لمسولو دمخه ساکټ وګورئ، ځکه چې ساکټ ارزانه ځواب دی۔ یا بسته دې هغه انټرفیس ته وتړئ چې لېږد یې په نښه کوي، یا یې په loopback کې وساتئ او لېږد دې د واقعاً کار کوونکي څه له لارې loopback ته ورسېږي۔ دا دوه ډیزاینونه دي، او هر یو خپله قاعده غواړي۔

دواړه ګډول هغه لار ده چې کار کوونکې بسته له باندې نه رسېدونکې کېږي پداسې حال کې چې هر فایل سم ښکاري۔ لاندې څېړنه یو کمانډ دی، او هغې پوښتنې ځواب وایي چې د اور وژنې دیوال د قواعدو بیاکتنه یې نشي ورکولای۔ که پایله loopback پته وښیي او لېږد LAN پته په نښه کوي، سمون د accept کرښې پورې اړه لري، نه پاکټ فلټر ته۔

ss -lntp '( sport = :8443 )'

ځایي ازموینې واقعاً څه ثابت کړل

هغه بریا چې د خپل پوښل شوي ټوپ پرته ثبت شي د نورو ټوپونو په اړه ثبوت نه دی۔ ولیکئ چې ازموینې کومه پته وکاروله او کوم بهیر ځواب ورکړ۔ بیا له شبکې باندې تکرار کړئ، نه د همدې Wi-Fi له تلیفونه، ځکه چې د ویښتو د سنجاق چلند د روټرونو ترمنځ توپیر لري او هغه نښلون چې کله هم LAN نه دی پرېښی کولای شي کلاینټ قناعت وکړي پرته له دې چې لېږد لږ تر لږه ښکېل وي۔ یوازې هغه دویمه هڅه د بهرني انسان لار تمرینوي۔

کله چې هڅه ناکامه شي، یو نښلون په دواړو لاګونو کې تعقیب کړئ: د بستې منل شوې او نښلېدلې کرښې، بیا د VPN ډیمون خپل سیشن لاګ۔ لومړۍ هغه پوله چې هېڅ نه ثبتوي د بل بدلون ځای دی۔ کله چې OpenVPN د ملګري اختیارونه پرتله کول پیل کړي، هغه پیغامونه د هغه تطبیق د قواعدو له مخې ارزوئ۔ د link-mtu ناهمغږۍ خبرداری په خپله وژونکی نه دی، link-mtu په 1500 باندې ټینګول ثابتوي نه چې ټوټه کېدل درېدلي، او د سایفر خبرې اترې د روټر لېږد نه، بلکې د OpenVPN داخلي کانفیګریشن پورې اړه لري۔

nc -vz 127.0.0.1 1194
journalctl -u stunnel -n 50 --no-pager

هغه ازموینې بیکنډ ساکټ او د بستې لاګ پوښي، چې رد شوی بیکنډ له رد شوي لاس ورکولو جلا کوي۔ هغوی هغه وخت چل کړئ چې یوه هڅه روانه ده، نه وروسته۔ د یوې هڅې وخت نښې هغه څه دي چې پرتله باوري کوي۔

دوه هویتونه، دوه ناکامۍ ترتیبونه

بهرنۍ سند د بستې دی او داخلي هویت د OpenVPN دی، او دوی کولای شي له بېلو ادارو څخه راشي۔ له دوو څخه هر څېړنه بندول ترڅو لار روغه ښکاره شي، اصلي ساتنه د بڼې پایلې سره بدلوي۔ دواړه تاییدونه وساتئ او په ترتیب یې تصحیح کړئ، ځکه چې د پیغامونو ترتیب طبقې ته نوم ورکوي: د بستې د سند ستونزه له هر VPN اختیار د خبرو اترو دمخه ښکاري، پداسې حال کې چې د داخلي هویت ناکامي یوازې له جریان له جوړېدو وروسته ښکاري۔

د stunnel لارښود accept، connect او د کلاینټ حالت په دقیق ډول تعریفوي، او هغه برخې د ساکټ پوښتنې ته له اټکل څخه ژر ځواب وایي۔ که لا هم نشئ ویلای چې کومه طبقه ځواب ورکړ، هغه سند چې عامه پورټ یې وړاندې کوي په لاندې کمانډ ولولئ۔ په پایله کې د بستې سند وي نو لېږد بستې ته رسېدلی، او چوپتیا یا د پروتوکول تېروتنه وي نو نه دی رسېدلی۔ همدا یوه توپیر له دې ځای له هر بلې څېړنې ډېر وخت خوندي کوي۔

openssl s_client -connect vpn.example:443 -servername vpn.example </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer

اړوندې مقالې