د WireGuard لاس ورکول لا هم بشپړېږي، peer لا هم نوی endpoint ښیي، او بیا هم د هغه شاته د ریلې له لارې نوې SSH ناسته پرته له کوم بینر ځړېده۔ دا ترکیب له تونل څخه لرې، هغې پروسې ته اشاره کوي چې socket مني۔ د socat په څېر ريله د اپلیکیشن په لاره کې د خپل ډیسکریپټر بودیجې، خپلو ماشومانو او خپلو میراثي حدونو سره ناسته ده۔ لاندې تګ له کلاینټ پیل او په لومړي هغه برخه ودرېږي چې بل socket نشي پرانیستلی۔

د شمېرې بدلولو دمخه لار تعقیب کړئ

د ټول تونل په اړه د فکر کولو پرځای یوه ناکامه غوښتنه تعقیب کړئ۔ کلاینټ په تونل کې لیکي، VPN ډیمون ډیکریپټ او روټ کوي، او ريله په بل اړخ کې مني۔ هر ګام ډیسکریپټرونه لګوي، او هغه چې معمولا ختمېږي وروستی دی۔

له هغې غوښتنې پیل کړئ چې بیا یې تولیدولی شئ او وخت یې وټاکئ۔ که TCP لاس ورکول بشپړ شي خو د اپلیکیشن بینر نه راځي، ريلې socket واخیست او بیا په ماشوم یا خپله پورتنۍ پښه کې ودرېد۔ که لاس ورکول پخپله هېڅکله بشپړ نشي، لامل روټینګ، فایر وال یا د اورېدونکي حالت دی، نه د ډیسکریپټر چت۔ ولیکئ چې له دوو بڼو کومه یې ولیده، ځکه چې دوی بېلابېلو پروسو ته اشاره کوي۔

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

هغه حد ولولئ چې ريلې میراث کړی

یوازینی مهم حد د روانې پروسې دی، او هغه څه ټاکلی چې پروسه یې پیل کړې۔ په shell کې ulimit -n لیکل shell توصیفوي۔ د خدماتو مدیر وپوښتئ چې څه یې پلي کړل، بیا پر PID یې تایید کړئ۔

systemctl show -p MainPID -p LimitNOFILE vpn-relay.service
cat /proc/$(systemctl show -p MainPID --value vpn-relay.service)/limits

limits فایل نرم او کلک چتونه لکه څنګه چې پروسه یې ویني چاپوي۔ د لوی کلک ارزښت لاندې ټیټ نرم ارزښت معنی دا ده چې ډیمون کولی شي خپل چت پورته کړي، او ځینې یې د پیل پر مهال کوي؛ برابر ټیټ ارزښتونه معنی دا ده چې unit فایل سرچینه ده۔

Drop-in فایلونه په لغوي ترتیب لوډېږي او وروستي فایلونه ګټي، نو systemctl cat vpn-relay.service د هغه څه معتبره ښودنه ده چې پلي کېږي۔ هغه فایل سمول چې مدیر یې هېڅکله نه لولي، د پورته شوې شمېرې د بې اغیزې کېدو تر ټولو عام لامل دی۔

ثابت هممهالي له ساتل شوي حالت څخه جلا کړئ

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

په بې کارۍ، په خپل عادي اوج او د بار له بندېدو څو دقیقې وروسته بیا وټاکئ۔ د ls /proc/PID/fd | wc -l سره پرانیستې ننوتنې د نرم حد په مقابل کې شمېرل به تاسو ته تشه ووایي، او له چت څخه یو یا دوه ټیټ شمېر سخت بند دی نه ورو لار۔

کله چې شمېر له کمېدو انکار وکړي، د ټولو پرځای د socket حالتونه وګورئ۔ هغه ډیسکریپټرونه چې په CLOSE_WAIT کې ناست دي معنی دا ده چې peer بند کړ او ستاسو اړخ هېڅکله نه، چې د اپلیکیشن د ژوند دورې نیمګړتیا ده او لوی حد یې یوازې ځنډوي۔ د ماشومانو ماډل هم محدود کړئ: د هممهالو ماشومانو لپاره پرته له حد څانګه اخیستونکې ريله ډیسکریپټرونه، د پروسې ځایونه او حافظه یوځای ختموي۔

نوی ارزښت په ژوندي پروسه کې وګورئ

د unit له سمولو وروسته مدیر بیا لوډ کړئ او خدمت بیا پیل کړئ، ځکه چې یوازې بیا لوډول هغه حدونه هېڅکله نه بدلوي چې روانې پروسې دمخه میراث کړي دي۔ په هغه پروسه کې تایید کړئ چې واقعیا ټرافیک خدمتوي۔

systemctl daemon-reload
systemctl restart vpn-relay.service
awk '/Max open files/ {print}' /proc/$(systemctl show -p MainPID --value vpn-relay.service)/limits
ss -tnp state established '( sport = :2222 )' | wc -l

awk کرښه نوې جوړه بیرته راګرځوي؛ که لا هم زړه ښیي، هغه drop-in چې تاسو سمولی هغه نه دی چې لوډېږي۔ ss شمېر ستاسو د کار بار ازموینه ده، نو د تمه شوې ناستې شمېر پرانیزئ او پورته کېدل یې وګورئ۔ هغه شمېر چې د دغو ناستو له بندېدو وروسته هم پورته ځي معنی دا ده چې حد هېڅکله ټوله ستونزه نه وه۔

له هرې لویې زیاتېدنې سره یوه خبرداری راځي۔ هغه اپلیکیشنونه چې د select() سره پوښتنه کوي نشي کولی له FD_SETSIZE پورته ډیسکریپټرونه وګوري، کوم چې په عادي جوړښتونو کې 1024 دی، نو له هغې پورته پورته شوی چت کولی شي داسې ناکامۍ رامنځته کړي چې بې تړاوه ښکاري۔ د systemd د اجرا مرجع هماغه خبرداری د هغو خدمتونو لپاره لري چې پیل یې کوي۔

بیا پیلول له تونل شتون څخه لرې وساتئ

د ریلې بیا پیلول فعالې ناستې غورځوي، او دا د VPN لوېدو څخه جلا پېښه ده۔ بدلون داسې ترتیب کړئ چې ريله چلېدل کوي او تونل پورته پاتې شي، او هر هغه څوک خبرداری کړئ چې اوږده ناسته یې له هغې تېرېږي۔

بیرته تګ پخوانی unit فایل او یو بل بیا پیل دی، او هغه فایل خپل ځای کې پاتې کېږي تر څو چې نوی ارزښت یوه کاري ورځ پوره کړي۔ بیا د هغې غوښتنې سره چې پخوا ناکامه وه حلقه بنده کړئ: د ریلې له لارې یوه نوې SSH ناسته، د مهمېدو لپاره کافي اوږد یو لیږد، او هغه ډیسکریپټر شمېر چې بې کارۍ کچې ته راستون شي۔

اړوندې مقالې