Клиентиңиз UDPге коюлган, Nginx серверинде VPN портуна шилтеме кылган location блогу бар, бирок эч нерсе келбейт. Бул күтүлүүчү нерсе: HTTP location UDP датаграммасын ташып бере албайт, алдыңкы бөлүгү кандай аталбасын. Бул үчүн Nginxге stream угуучусу керек, жана конфигурацияны ошол жакка өткөргөндөн кийин сессиянын жашап калышын деталдардын экинчи тобу чечет.

Прокси катмары даректин алдында келет

Nginxдин stream модулу HTTPни талдоосуз эле TCP жана UDPни проксилейт. Анын HTTP модулу сурам сабын, аталыштарды жана жоопту күтөт, алардын эч бири табигый OpenVPN датаграммасында жок. Ошондуктан катмарды тандоо — биринчи чечим, жана ал угуучунун IPv4 же IPv6 экенине көз каранды эмес.

TCP OpenVPN менен иштегендей көрүнгөн конфигурация UDP учуру жөнүндө эч нерсе айтпайт. Бул жерде транспорт протоколдун бөлүгү, жайгаштыруунун деталы эмес.

Угуучу жана backend

nginx -V 2>&1 | tr ' ' '\n' | grep stream

stream {
    server {
        listen [::]:1194 udp reuseport;
        proxy_pass [2001:db8::20]:1194;
    }
}

Бир нерсени оңдоодон мурун buildде stream модулу бар экенине көз жеткириңиз; таратуу пакети аны өзүнчө модулга бөлүшү мүмкүн, ал эми модул жок болсо туннелдин ордуна конфигурация катасы чыгат. Блокту негизги конфигурация контекстине коюңуз, http ичине эмес, жана документтик даректи чыныгы backend менен алмаштырыңыз.

Эки маршрут тең жана эки брандмауэр тең датаграммаларга жол бериши керек: угуучуга чейинки жол жана проксиден backendге чейинки жол. IPv6 угуучусу IPv4 жолун да түзбөйт, ошондуктан айрым клиенттер азыр да IPv4 колдонсо, ал угуучу өзүнүн сынагы менен өзүнчө жазуу. Backendдин өз брандмауэрин проксинин дарегинен текшериңиз, ноутбукуңуздан эмес.

Сессия таймауттары — сурам таймауттары эмес

stream прокси UDP сессиясы үчүн абалды сактайт жана аны өз таймауту менен жооп параметрлерине ылайык таштайт. DNS релесинен көчүрүлгөн кыска таймаут сааттар бою датаграмма алмашууну күткөн VPNге начар туура келет, жана бузулуу баштоодон баш тарткан байланыш эмес, үнсүз өлгөн байланыш катары көрүнөт.

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

Реле эмнени өзгөртөт, эмнени өзгөртпөйт

stream прокси OpenVPNдин TLS башкаруу каналын бүтпөйт жана аны HTTPSке айландырбайт. Backend VPN кызматы бойдон калат, ал эми сертификаттын байланышы клиент менен ошол кызматтын ортосунда калат. Көздөлгөн backend инсандыгын сактоо дагы эле клиент менен сервердин иши.

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

Порттон эмес, клиенттен текшериңиз

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

Бирөө Nginx UDP кыла албайт деп билдирсе, анткени анын ордуна жөнөкөй реле куралы иштеди, бул эки факт байланышсыз. Курал backend жооп берерин далилдеди; алдыңкы бөлүгүнүн эмнени колдой турганы жөнүндө эч нерсе айткан жок. Экөө тең чын болушу мүмкүн, жана алардын бирөө гана бул жайгаштыруунун конфигурациясы.

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