Жөнөкөй Linux колдонмосу TUN'га тийбестен VPN колдонот
Демон TUN түзмөгүнө жана туннелге ээ; колдонмолор гана сокет ачат. Орнотуу артыкчылыгын жана тармакка кирүүнү өзүнчө чек катары кармаңыз.
Орнотулган 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 катары иштетүү бул ролдорду эч нерсе түшүндүрбөстөн кыйратат.