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'

પછી ખાતરી કરો કે સેવા ખાતું તેને ખોલી શકે છે. એ ખાતા તરીકેની ટૂંકી કસોટી માલિકીની સમસ્યાને સેવાની સમસ્યાથી અલગ પાડે છે. અંતે ક્લાયન્ટ શરૂ કરો અને ખાતરી કરો કે ટનલ ઇન્ટરફેસ દેખાય છે; ફક્ત એ ત્રીજું પગલું આખો માર્ગ સાબિત કરે છે, કારણ કે પહેલાં બે પસાર થઈ શકે છે જ્યારે ક્લાયન્ટ પ્રોફાઇલ કે ક્ષમતા હજી ખોટી હોય.

ફેરફાર મંજૂર થાય ત્યારે ઇન્સ્ટન્સ, ઉપકરણ લેબલ, હોસ્ટ સ્રોત, મહેમાન માર્ગ અને માલિક ખાતું નોંધો. એ પાંચ મૂલ્યો જ પછીના પુનઃનિર્માણ, સ્થળાંતર કે પ્રોફાઇલ ફેરફારે જાળવવા પડે છે, અને સંદર્ભ વગરની પરવાનગી ભૂલ કરતાં તેમની તુલના ઘણી સહેલી છે.

સંબંધિત લેખો