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'

नंतर सेवा खाते तो उघडू शकते याची पुष्टी करा. त्या खात्याने केलेली छोटी चाचणी मालकीची समस्या सेवेच्या समस्येपासून वेगळी करते. शेवटी क्लायंट सुरू करा आणि टनेल इंटरफेस दिसत असल्याची पुष्टी करा; पहिली दोन उत्तीर्ण होऊ शकतात पण क्लायंट प्रोफाइल किंवा क्षमता अजून चुकीची असू शकते, म्हणून संपूर्ण मार्ग फक्त तिसरी पायरीच सिद्ध करते.

बदल मंजूर झाल्यावर इन्स्टन्स, उपकरण लेबल, होस्ट स्रोत, अतिथी मार्ग आणि मालक खाते नोंदवा. तीच पाच मूल्ये पुढील पुनर्निर्मिती, स्थलांतर किंवा प्रोफाइल बदलाने जपली पाहिजेत आणि संदर्भविरहित परवानगी त्रुटीपेक्षा ती तुलना करणे खूप सोपे आहे.

संबंधित लेख