WireGuard кол алышуусу дагы эле аяктайт, peer дагы эле жакынкы endpoint көрсөтөт, бирок анын артындагы реле аркылуу жаңы SSH сессиясы баннерсиз илинип калат. Бул айкалыш туннелден алыс, socket кабыл алган процессти көрсөтөт. socat сыяктуу реле өзүнүн дескриптор бюджети, өзүнүн балдары жана өзүнүн мураска алынган чектөөлөрү менен колдонмо жолунда отурат. Төмөнкү жүрүш кардардан башталып, дагы бир socket ача албаган биринчи компонентте токтойт.

Санды өзгөртүүдөн мурун жолду көзөмөлдөңүз

Бүт туннел жөнүндө ойлонуунун ордуна бир ийгиликсиз сурамды көзөмөлдөңүз. Кардар туннелге жазат, VPN демону шифрди ачат жана маршруттайт, ал эми реле каршы тарапта кабыл алат. Ар бир кадам дескрипторлорду сарптайт, жана адатта түгөнгөнү — акыркысы.

Кайталай алган сурамдан баштап, анын убактысын өлчөңүз. Эгер TCP кол алышуусу аяктап, бирок колдонмо баннери келбесе, реле socketти алып, анан балада же өзүнүн жогорку бутунда кармалып калды. Эгер кол алышуунун өзү эч качан аяктабаса, себеби — маршруттоо, firewall же угуучунун абалы, дескриптор чеги эмес. Эки форманын кайсынысын байкаганыңызды жазыңыз, анткени алар ар башка процесстерди көрсөтөт.

Жумушту кайталаган секириктерди да санаңыз. Тармактанган угуучу ар бир кабыл алынган 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 сессиясы, маанилүү болушу үчүн жетиштүү узун бир өткөрмө жана бош деңгээлине кайткан дескриптор саны.

Тектеш макалалар