LXD контейнері /dev/net/tun файлын аша алмай ма? unix-char жазбасын тексеріңіз
VPN клиенті оны қолдана алуы үшін LXD хосттың TUN құрылғысын контейнерге беруі керек. unix-char нені қосатынын, нені қоспайтынын және оны қалай тексеру керектігін қараңыз.
LXD хосттың таңбалық құрылғысын контейнерге құрылғы түйінін қосу арқылы ұсынады, қонаққа оны жасауды үйрету арқылы емес. Егер контейнерде /dev/net/tun болмаса, құрылғы хостта болуы мүмкін, бірақ қонақ оны бәрібір аша алмауы мүмкін. unix-char жазбасы осы жолдың әкімші жағындағы жартысы және ол артықшылықты контейнерден әдейі тар. Сондықтан хост түйіні мен контейнер түйіні жеке тексеріске лайық.
Механизм көз алдында ұстауға жеткілікті қысқа: LXD хост жолын шешеді, дана ішінде сәйкес түйін жасайды және құрылғыны контейнердің құрылғы cgroup-іне қосады. Содан кейін қонақ процесіне түйінді бірдеңеге пайдалану үшін өз рұқсаты мен қабілеті қажет.
unix-char жазбасы шын мәнінде нені өзгертеді
unix-char құрылғысы LXD-ге хосттың бір таңбалық құрылғысын контейнер ішіндегі таңдалған жолда ұсынуды айтады. Жазбаның үш маңызды бөлігі бар: әкімші пайдаланатын құрылғы белгісі, хосттағы source жолы және қонақ көретін path. Тек соңғы екеуі құрылғының өзін сипаттайды. Олардың кез келгеніндегі теру қатесі клиент ешқашан ашпайтын жерде түйін жасайды.
Хостта құрылғы әдетте /dev/net/tun болады. Контейнер ішінде сол жолды қалдыруға немесе басқасын таңдауға болады, бірақ жол VPN клиенті күтетін жолға сәйкес болуы керек. /dev/net/tun-ді сақтау екінші конфигурация мәселесін болдырмайды, өйткені клиенттердің көбі сол жолды сұрамай-ақ ашады.
Әкімші жазбаны дана іске қосылғанда немесе құрылғы ыстық қосылғанда қолданады. Ол қонаққа драйвер көшірмейді және туннель интерфейсін жасамайды. Ол түйінді көрінетін етіп, контейнердің құрылғы бақылау тобы арқылы кіруге рұқсат береді.
Құрылғыны қонақтың ішінде емес, данада жариялаңыз
Жазбаны LXD әкімшілік контекстінен қосыңыз, дана атауын және кейін танитын белгіні көрсетіңіз. vpnbox атаулы контейнер үшін команда мынау:
lxc config device add vpnbox tun unix-char source=/dev/net/tun path=/dev/net/tun
lxc config device show vpnbox
tun белгісі дана конфигурациясына ғана қатысты. Ол интерфейс атауы емес және қонақтағы ешнәрсемен сәйкесуі міндетті емес. Егер профиль сол құрылғыны әлдеқашан берсе, екінші жазба артықтық емес, қайшылық туғызады, сондықтан алдымен әрекетті конфигурацияны қарап шығыңыз.
Контейнер ішіндегі файлдарды өңдеу дұрыс емес қабат. Іске қосу скриптіндегі mknod артықшылықты контейнерде жұмыс істейтіндей көрініп, кейін қайта жасау кезінде жоғалып кетуі немесе азырақ артықшылықты контейнерде сәтсіз болуы мүмкін. Дананың құрылғы жиынтығы әкімшіге тиесілі; түйін де соған тиесілі болсын.
Меншікті мен режимді қонақ процесіне сәйкестендіріңіз
unix-char жазбасы контейнер ішіндегі түйін үшін uid, gid және mode мәндерін орната алады. Оларды барлық пайдаланушыға құрылғыны ашу немесе контейнерді артықшылықты режимге көшіру орнына, VPN клиентін іске қосатын тіркелгіге сәйкестендіру үшін қолданыңыз.
Көріну рұқсатпен бірдей емес. root-қа тиесілі және режимі 600 түйін артықшылықсыз пайдаланушы ретінде жүретін қызметке көрінеді, бірақ ол оны бәрібір аша алмайды. Алдымен қонақ тіркелгісін тексеріңіз, содан кейін меншікті сол тіркелгіге беріңіз және режимді клиентке қажеттен кең ұстамаңыз.
Процеске туннель интерфейсін конфигурациялау қабілеті де қажет, әдетте контейнердің желілік атаулар кеңістігіндегі CAP_NET_ADMIN. Құрылғыны беру бұл қабілетті бермейді, ал қабілетті беру құрылғыны қамтамасыз етпейді; бұлар тәуелсіз талаптар.
Жазба нені бермейтінін біліңіз
Көрінетін түйін жұмыс істеп тұрған VPN емес. Клиент пакетін әлі орнату керек, профиль әлі жарамды болуы керек және қызмет әлі іске қосылуы керек. Аутентификация, маршруттар және DNS клиенттің жұмысы болып қалады, ал ондағы сәтсіздік құрылғы жазбасының дұрыс еместігіне дәлел емес.
systemd тағы бір шектеу қосуы мүмкін. DeviceAllow бар немесе қатайтылған құрылғы саясаты бар бірлік контейнер әкімшісі берген түйінге кіруді қабылдамауы мүмкін. Түйін бар болғанымен қызмет рұқсат қатесін хабарлағанда бірліктің құрылғы саясатын тексеріңіз және контейнерді кеңейтудің орнына сол саясатты өзгертіңіз.
Ыстық қосу міндетті емес және айқын. required=false бар жазбаға көз жолы қажет және хост құрылғысы өзгергенде пайда болып немесе жоғалып кетуі мүмкін. Мұндай өмірлік цикл келіп-кететін аппаратқа жарайды; VPN-ге жүктелу кезінде қажет TUN құрылғысы үшін міндетті емес жазба қызметті оның алғышарты пайда болмай тұрып іске қосуға жібере алады.
Көрінуді, ашылуды және интерфейсті осы ретпен тексеріңіз
Алдымен көзделген контейнер ішіндегі түйінді растаңыз. Жол, негізгі және қосымша нөмір және меншік хост құрылғысына және сіз қосқан жазбаға сәйкес болуы керек. Түйіннің болмауы әкімші жазбаны қолданбағанын немесе оны басқа данаға қолданғанын білдіреді.
lxc exec vpnbox -- ls -l /dev/net/tun
lxc exec vpnbox -- sh -c 'test -c /dev/net/tun && echo char-device-ok'
Содан кейін қызмет тіркелгісінің оны аша алатынын растаңыз. Сол тіркелгімен қысқа сынақ меншік мәселесін қызмет мәселесінен бөледі. Соңында клиентті іске қосып, туннель интерфейсінің пайда болғанын растаңыз; тек осы үшінші қадам бүкіл жолды дәлелдейді, өйткені алғашқы екеуі өтіп кетуі мүмкін, ал клиент профилі немесе қабілеті әлі дұрыс болмауы мүмкін.
Өзгеріс бекітілгенде дананы, құрылғы белгісін, хост көзін, қонақ жолын және иеленуші тіркелгіні жазып алыңыз. Осы бес мән кейінгі қайта жасау, көшіру немесе профиль өзгерісі сақтауға тиісті нәрсе және оларды мәнмәтіні жоқ рұқсат қатесімен салыстырған әлдеқайда оңай.