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'
Дараа нь үйлчилгээний бүртгэл түүнийг нээж чадахыг баталгаажуулна уу. Тэр бүртгэлээр хийсэн богино сорилт нь эзэмшлийн асуудлыг үйлчилгээний асуудлаас тусгаарлана. Эцэст нь клиентийг эхлүүлж, туннелийн интерфейс гарч ирснийг баталгаажуулна уу; эхний хоёр нь давж болох ч клиентийн профайл эсвэл чадвар буруу хэвээр байж болох тул бүх замыг зөвхөн тэр гурав дахь алхам нотолно.
Өөрчлөлт батлагдсан үед инстанс, төхөөрөмжийн шошго, хостын эх сурвалж, зочны зам, эзэмшигч бүртгэлийг бичиж тэмдэглэнэ үү. Тэр таван утга нь дараагийн дахин үүсгэх, шилжүүлэх эсвэл профайл өөрчлөхөд хадгалах ёстой зүйл бөгөөд контекстгүй зөвшөөрлийн алдаанаас хамаагүй хялбар харьцуулна.