Docker இல் OpenVPN /dev/net/tun திறக்க முடியவில்லை: எது இல்லை
TUN node மற்றும் நெட்வொர்க் திறன் இரண்டு தனித்தனி அனுமதிகள். இரண்டையும் திறந்து, அதே தீர்வை மீண்டும் செய்யாமல் அடுத்த பிழையை அதன் சொந்த நிபந்தனைகளில் படியுங்கள்.
கன்டெய்னர் படங்கள் தேவையான அனைத்து OpenVPN பைனரி மற்றும் கட்டமைப்பு கோப்புகளைக் கொண்டிருக்கலாம், இருப்பினும் முதல் நெட்வொர்க் அழைப்பில் தோல்வியடையலாம். பிழை /dev/net/tun ஐக் குறிப்பிடுகிறது, ஏனெனில் பயன்பாடு கர்னலிடம் TUN இடைமுகத்தைக் கேட்டது, கன்டெய்னரிடம் சாதன முனை அல்லது அதை உருவாக்கும் திறன் இல்லை. இவை இரண்டு தனித்தனி அனுமதிகள், ஒன்றைச் சரிசெய்தால் மற்றொன்று இருந்த இடத்திலேயே இருக்கும்.
அவற்றைப் பிரிக்க ஒவ்வொன்றுக்கும் ஒரு கட்டளை தேவை. அதன் பிறகு வரும் பிழைச் செய்தி நீங்கள் உண்மையில் எந்த எல்லையில் நின்றீர்கள் என்று கூறும்.
சாதன முனை மற்றும் திறன் இரண்டு கதவுகள்
சாதன முனை கோப்பு முறைமையின் ஒரு பொருள், எனவே கன்டெய்னர் அதை தனது சொந்த மவுண்ட் பெயர்வெளியில் பார்க்க வேண்டும். திறன் ஒரு அனுமதி, எனவே இடைமுகம் உருவாக்கப்படும் பெயர்வெளியில் செயல்முறைக்கு CAP_NET_ADMIN தேவை. திறன் இல்லாமல் சாதனத்தை அனுப்பினால் திறக்கும் முனையும் தோல்வியடையும் ioctl உம் கிடைக்கும். சாதனம் இல்லாமல் திறன் வழங்கினால் பயன்பாடு எதையும் திறக்க முடியாது, அதனால்தான் எடுத்துக்காட்டுகளில் இரண்டும் பொதுவாக ஒன்றாகத் தோன்றும்.
Docker இன் devices அமைப்பு ஹோஸ்ட் சாதனத்தை கன்டெய்னருக்குள் மாப் செய்கிறது, cap_add திறன் தொகுப்பைச் சரிசெய்கிறது. அதே பாதையின் bind mount சாதன அணுகல் பொருளைப் பயன்படுத்தாமல் கோப்பைப் பார்வைக்குள் வைக்கிறது.
இதை Compose கோப்புக்கு வெளியே மீண்டும் உருவாக்குங்கள்
சேவையைத் திருத்துவதற்கு முன், ஹோஸ்ட்டிடம் சாதனம் உள்ளதா மற்றும் வெற்று கன்டெய்னர் ஒரு இடைமுகத்தை உருவாக்க முடியுமா என்பதைச் சரிபார்க்கவும். கீழே உள்ள கட்டளை வேண்டுமென்றே குறைவானது, அதன் ஒரே நோக்கம் ஹோஸ்ட் சிக்கலை compose சிக்கலிலிருந்து பிரிப்பதாகும். அது தோல்வியடைந்தால், எந்த compose மாற்றமும் உதவாது.
ls -l /dev/net/tun
docker run --rm --cap-add NET_ADMIN --device /dev/net/tun:/dev/net/tun alpine sh -c 'apk add -q iproute2 && ip tuntap add dev tun9 mode tun && ip link show tun9'
ஹோஸ்ட்டில் முனை இல்லாதது tun தொகுதி கிடைக்கவில்லை என்பதாகும், இது கன்டெய்னரின் அல்ல, ஹோஸ்ட் பக்கத்தின் திருத்தம். முனை இருந்தும் கன்டெய்னருக்குள் திறக்க முடியாதது சாதன அணுகலைச் சுட்டுகிறது, செய்தி no such file அல்ல permission denied என்று கூறும். இந்த இரண்டு தோல்விகளின் வரிசையே முழு கண்டறிதல். எந்தக் கொடியையும் மாற்றுவதற்கு முன் எதைப் பார்த்தீர்கள் என்று எழுதுங்கள்.
TUN க்குப் பிறகு வரும் பிழைகள் வேறு சிக்கல்கள்
இடைமுகம் தோன்றியவுடன் அடுத்த தோல்விக்கு வேறு உரிமையாளர். அங்கீகாரப் பிழைகள் என்பது சுரங்கப்பாதை சேவையகத்தை அடைந்தது மற்றும் சான்றுகள் நிராகரிக்கப்பட்டன, எனவே திறன் மாற்றங்கள் உதவாது. பயன்பாடுகள் இன்னும் தோல்வியடையும்போது சுரங்கப்பாதை நிறுவப்பட்டால் அது வழிகள், அனுப்புதல், கன்டெய்னருக்குள் DNS தீர்வு அல்லது கன்டெய்னரின் சொந்த நெட்வொர்க் அமைப்பைச் சுட்டுகிறது. அவை ஒவ்வொன்றும் TUN அனுமதி பதிலளிக்க முடியாத சாதாரண நெட்வொர்க் கேள்வி. ஒவ்வொரு மாற்றத்திற்குப் பிறகும் அசல் சோதனையை மீண்டும் செய்வது தோல்விகள் ஒரே மனப்பதிவாக இணைவதைத் தடுக்கிறது.
வேலை செய்யும் எடுத்துக்காட்டிலிருந்து ஒவ்வொரு அமைப்பையும் நகலெடுப்பதே குறைந்தபட்ச திருத்தம் படிக்க முடியாத சேவை வரையறையாக மாறும் வழி. இந்தப் பயன்பாட்டிற்குத் தேவையானவற்றை மட்டும் கொண்டு வாருங்கள், ஒவ்வொன்றும் ஏன் உள்ளது என்று எழுதுங்கள்.
கன்டெய்னருக்குள் இடைமுகத்தைச் சரிபார்க்கவும்
இடைமுகத்தையும் திறன் தொகுப்பையும் சரிபார்க்கவும் ஹோஸ்ட்டிலிருந்து அல்ல, இயங்கும் கன்டெய்னரின் உள்ளிருந்து. கீழே உள்ள கட்டளைகள் சாதன முனை, திறன்களின் பட்டியல் மற்றும் இடைமுகத்தை உருவாக்க முடியுமா என்பதைக் காட்டுகின்றன. வாடிக்கையாளரை இயக்கும் அதே கன்டெய்னரில் அவற்றை இயக்கவும், படம் குறைவாக இருந்தால் கருவிகளை நிறுவவும்.
ls -l /dev/net/tun
capsh --print | grep -i net_admin
ip link add dev tun9 type tun && ip link show tun9
bounding set இல் உள்ள ஆனால் effective set இல் இல்லாத திறன் ஒருபோதும் வழங்கப்படாத திறனிலிருந்து வேறுபட்டு நடந்துகொள்கிறது, capsh இரண்டையும் காட்டுகிறது. முனை உள்ளது மற்றும் திறனும் உள்ளது ஆனால் உருவாக்கம் இன்னும் தோல்வியடைந்தால், இயக்கச் சூழல் செயல்பாட்டைக் கட்டுப்படுத்தும் seccomp சுயவிவரம் அல்லது AppArmor கொள்கை போன்ற வேறு ஒன்றைச் செயல்படுத்துகிறது. அது பயன்பாடு அல்ல, இயக்கச் சூழல் ஆவணப்படுத்தும் மூன்றாவது எல்லை.
கன்டெய்னர் கொடிகள், படம் மற்றும் ஒவ்வொரு முயற்சியின் சரியான பிழையை எழுதுங்கள். அந்தக் குறிப்பை அடுத்து படிக்கும் நபர் முழு விசாரணையையும் மீண்டும் செய்யாமல் எந்தக் கதவு மூடப்பட்டிருந்தது என்று சொல்ல முடியும்.