Docker හි OpenVPN /dev/net/tun විවෘත කළ නොහැක: නැති දේ කුමක්ද
TUN නෝඩය සහ ජාල හැකියාව වෙනස් අවසර දෙකකි. දෙකම විවෘත කර, එම විසඳුමම නැවත නොකර ඊළඟ දෝෂය එහිම කොන්දේසි යටතේ කියවන්න.
කන්ටේනර රූපවලට අවශ්ය සියලුම 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 ප්රතිපත්තියක්. එය යෙදුම නොව ධාවන පරිසරය ලේඛනගත කරන තෙවන සීමාවයි.
කන්ටේනර ධජ, රූපය සහ සෑම උත්සාහයකම නිශ්චිත දෝෂය ලියන්න. එම සටහන කියවන ඊළඟ පුද්ගලයාට මුළු විමර්ශනයම නැවත නොකර කුමන දොර වසා තිබුණේදැයි කිව හැක.