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

Чечүүчү кайтарган нерседен баштаңыз

Клиент vpn-a.example сурап, дарек алат; ошол дарек жана порт анын баарын түзөт. Ат издөө учурунда жергиликтүү түрдө сарпталат жана эч качан зымдагы талаага айланбайт, ошондуктан аркы тараптагы угуучу кайсы белги колдонулганын көрө албайт. vpn-a.example жана vpn-b.example бир хостко багыттаңыз, экөө тең бирдей багытка алып барат, ошондуктан демон айырмачылыкты каттабастан эки байланышты бир нускага сиңирет. Дарекке негизделген профилдер да ушундай себептен атка негизделгендердей жүрүм-турум кылат.

Бул ошондой эле азгырыктуу айлануу жолдорунун үй-бүлөсүн жабат: кошумча ылакап аттар, бир сокетте ар бир ат үчүн сертификат тандоо же суралган атка байланган брандмауэр эрежеси. Алардын эч бири клиенттен биринчи пакет чыкканга чейин эле ыргытылган маалыматка таасир эте албайт. Эгер эки сервер өзүнчө калышы керек болсо, бөлүнүү байланыштын өзү менен кошо жүрүшү керек, башкача айтканда дарек, порт же протокол аныктаган пайдалуу жүк талаасы.

Эсептелүүчү жалгыз тандагыч пакеттин ичинде жүрөт

HTTP муну Host аталышы менен чечет, ал эми TLS ClientHello ичиндеги сервер атынын кеңейтүүсү менен, ошентип бир дарек бир угуучунун артында көп сайтка кызмат кылат. Экөө тең иштейт, анткени зымдагы протокол белгилүү кызматка суроо ташыйт. OpenVPN жөнүндө маанилүү факт: ортолук куту текшере турган катмарда бул талаалардын эч бири жок.

Стандарттык түзүлүштө башкаруу каналын коргогон TLS кол алышуу тышкы сессия түзүлгөндөн кийин болот жана анын ичинде ташылат, ошондуктан ошол сессияны бүтүрбөгөн угуучу тунук эмес агымды көрөт. Ал дагы эле бул OpenVPN экенин айта алат, анткени баштапкы байттардагы опкод жана алкак таанымал, бирок сервер аты, эгер бар болсо, шифрленген бөлүгүндө отурат. Тышкы пакеттен виртуалдык хост окууну күткөн долбоор протокол эч качан жазбаган талааны окуп жатат. Бул тоннелдин кантип курулганынан келет, акылдуураак үлгү дал келүү жаба алган кемтиктен эмес.

Протокол бөлгүчү кайда токтойт

sslh долбоору документтеген типтеги мультиплексор бир портто угат, баштапкы байттарды текшерет жана байланышты таанылган протоколду сүйлөгөн backend-ке өткөрүп берет. Бир порт SSH, HTTPS жана OpenVPN-ге чогуу кызмат кылышы керек болгондо бул чыныгы баалуулук.

sslh ар бир протокол үчүн өзүнчө зонд кармайт, ал эми анын TLS зонду чыныгы ClientHello-дон сервер атын же ALPN маанисин чыгара алат. Кадимки OpenVPN-ди таануу TLS кеңейтүүсүн окуудан башка классификация, жана экөө биригишпейт, анткени угуучу сокетке ClientHello-ду эч качан жөнөтпөгөн клиент зондду окуганга эч нерсесиз калтырат. Ошондуктан OpenVPN-ге дал келген эреже «бул OpenVPN клиенти» деп жооп берет жана андан ары барбайт. Ошол эреженин артындагы эки OpenVPN backend ажыратылбайт, алдыңкы тарапта тандоого негиз жок, жана ар бир сессия бир эле жерге конот. Мультиплекстөө бир портту ар кайсы кызматтардын ортосунда бөлүшөт; ал бир кызматтын ичинде виртуалдык хостинг жасабайт.

Эки серверди чын эле бөлгөн түзүлүштөр

Эң арзан адал бөлүү — экинчи коомдук дарек, ар бир нускага бирден, ал эми учурдагы профилдер керектүүнү эчак алып жүрөт, анткени алар ар башка даректерге шилтейт. Кийинкиси — ошол эле даректеги башка порт, ал ар бир профилдеги бир сандан башка эч нерсе турбайт. TCP жана UDP өзүнчө порт таблицаларын кармайт, ошондуктан 1194/tcp жана 1194/udp байланышсыз сокеттер жана ар биринен бирден бир хостто катар жашай алат; бул транспорттук бөлүнүү, ат боюнча маршруттоо эмес, жана аны менен көп жолу чаташтырылат. Эки вариант тең брандмауэр кароодон өтөт, анткени эреже пакетте чын эле бар нерсеге дал келет.

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

OpenVPNдин алдына коюлган TLS аяктоочу жөндөмдүү алдыңкы тарапка чыныгы сервер атын ача алат, бирок клиент тарабы да ошол кошумча катмарга конфигурацияланган болгондо гана. Учурдагы профилдер бир эле дарекке шилтөө менен бул жүрүм-турумду алышпайт.

Куруудан мурун тандагычты далилдеңиз

Backend-ти аныктай турган талааны атаңыз, анан клиент аны чын эле жөнөтөрүн ырастаңыз; эгер жооп дарек болсо план турат, ал эми эгер ал угуучуга эч качан жетпеген кол алышуунун ичиндеги сервер аты болсо, эч бир DNS иши аны куткарбайт. Үч буйрук угуучу тарапты тез чечет.

ss -lntup | grep -E ':443|:1194'
openssl s_client -connect vpn-a.example:443 -servername vpn-a.example </dev/null | head -n 20
journalctl -u openvpn-server@server-a -n 20 --no-pager

openssl сабы сертификатты ошол даректе бир нерсе TLS-ти бүтүргөн жерде гана берет; кадимки OpenVPN угуучусуна каршы ал токтоп калат же ийгиликсиз болот, жана бул тышкы катмар эмнени ачканы жөнүндөгү жооптун өзү. journal сабы ар бир backend-те окулганда кайсы нуска сессияны кабыл алганын көрсөтөт. Алдыңкы тараптын журналдары эмне классификацияланганын жазат жана эч качан эмне ниет кылынганын жазбайт, ошондуктан колдонуучунун кайда конгону боюнча жалгыз бийлик backend бойдон калат.

Ар башка серверлерге жетүү үчүн жасалган эки профил менен бүткөрүңүз, аларды бир-бирден туташтырыңыз жана ар бири үчүн backend журналын белгилеңиз. Эгер эки сессия тең бир journal-до көрүнсө, тандагыч туура эмес конфигурацияланган эмес, жок, жана оңдоо — клиент бутага ала турган дарек же порт. Маршруттоо эрежесин өзгөртүү жардам бербейт, анткени эрежеге эч качан маршруттай турган нерсе берилген эмес. Бөлүнүү чыныгы болгондон кийин, аны профилдердин жанына жазыңыз, кийинки адам экинчи ылакап ат кошуп, андан ишти күтпөсүн.

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