Орнатылған Linux VPN пайдаланатын браузер /dev/net/tun ашпайды. Ол сокет ашады, ал ядро сол сокет пакеттерінің қай интерфейстен шығатынын шешеді. Туннельді жасаған процесс өзі тасымалдайтын трафиктің процесінен басқа жұмыс істейді. Осы екі рөлді бөлек ұстау рұқсат сұрақтарының көбіне олар қойылмай тұрып жауап береді.

Сокеттен туннельге дейін бір пакетті бақыла

Қарапайым қолданба connect немесе send шақырады, ал ядро межелі орынға маршрут іздейді. Егер таңдалған маршрут туннель интерфейсіне нұсқаса, пакет VPN демоны оқитын құрылғының кезегіне қойылады. Демон оны шифрлап, физикалық интерфейс арқылы сыртқа жібереді. Сол сипаттамадағы әрбір көрсеткі – рұқсат сұрағына жауап беруге болатын орын.

Бұл жолда қолданбаның құрылғыны білуін талап ететін ештеңе жоқ. Демон файл дескрипторын ұстап, интерфейс операцияларын орындайды, ал қолданба тек қалыпты желілік API көреді.

Екі жартыны бір рет сызыңыз, сонда рұқсат сұрақтарын орналастыру оңайырақ болады. Жоғарғы жарты – қолданбалар әлемі, төменгісі демонға тиесілі.

Құрылғы кімге керек, кімге керек емес екенін шешіңіз

TUN интерфейсін жасау немесе оған қосылу құрылғыға қатынауды және оған қоса оны конфигурациялау мүмкіндігін талап етеді, сондықтан қолдау көрсетілетін VPN қызметі желі әкімшілігінің өкілеттігімен басталады немесе артықшылығы бар көмекшіні пайдаланады. Бұл талап демонға тиесілі. Ол браузер, дерекқор клиенті немесе файл тасымалдау құралы туралы ештеңе айтпайды. Бұл мүмкіндік қажет қызмет оны өзінің орнату қадамы үшін қажет етеді, клиенттері үшін емес.

Маршрут пен саясат орнына келгеннен кейін қарапайым процесс пайда болған жолды өзінің әдеттегі сокет шақырулары арқылы пайдаланады. Оған құрылғы түйіні қажет емес, root та қажет емес.

Құрылғы рұқсаттарын өзгерту қолданбаға межелі орынға қатынау берудің жолы емес. Ол құрылғы шекарасын басқа жерге жылжытады.

Қолданба шын мәнінде қай атау кеңістігінде жұмыс істейтінін тексеріңіз

Контейнер немесе екінші желілік атау кеңістігі өз процестеріне бөлек интерфейстер жиынтығы мен маршрут кестесін береді. Хосттағы туннель онда өздігінен пайда болмайды және құрылғы рұқсаттарының ешбір өзгерісі оны өзгертпейді. Қолданба сол атау кеңістігі ұсынған нәрсенің көмегімен маршруттайды. Сондықтан контейнер бейнесі хост туннелін кездейсоқ мұраға ала алмайды.

Оны ip netns list және ip -n NAME route арқылы немесе процестің атау кеңістігі сілтемесін қарап тексеріңіз. Жауап әдетте бір командада көрінеді.

Бір хосттағы екі пайдаланушыға саясат арқылы әртүрлі жолдар беруге де болады. Бұл желілік шешім, құрылғы иелігінің дәлелі емес.

Мүмкіндіктерді желі саясатынан бөліңіз

Кейбір құралдарға сокеттен артық қажет. Пакеттерді ұстау үшін шикі сокет керек, ал маршруттарды өзгерту үшін әкімшілік өкілеттік керек. Бұлар – бөлек рұқсаттары бар бөлек операциялар, және біреуін беруді VPN пайдаланудың жалпы талабы деп оқуға болмайды.

Өз туннелін іске асыратын бағдарлама – үшінші жағдай. Ол демонның рөлін алып отырғандықтан TUN-ді шынымен ашады, сондықтан оған демонның артықшылықтары қажет.

Артықшылықты атамас бұрын операцияны атаңыз. Бұл екеуін бөлу әдетте көрінгеннен оңай.

Бөліністі екі тіркелгімен тексеріңіз

Туннельді қызмет ретінде қосыңыз, содан кейін қолданбаны қарапайым пайдаланушы ретінде іске қосып, оның жеке ресурсқа жететінін растаңыз. Сол пайдаланушының shell-інен межелі орын үшін ip route get тексеріп, қай интерфейс таңдалғанын көріңіз. Егер маршрут дұрыс болып, байланыс әлі де сәтсіз болса, мәселе саясатта, артықшылықта емес.

Нәтижелік дизайн – айқын шекарасы бар ең аз артықшылық: бір компонент орнату мен туннель ресурстарына ие, жұмыс жүктемелері әдеттегі тіркелгілерін сақтайды, ал желі саясаты не өте алатынын шешеді. Барлығын root ретінде іске қосу бұл рөлдерді ештеңе түсіндірмей құлатады.

Қатысты мақалалар