Docker හි OpenVPN: අවම සේවාලාභියාට අවශ්ය ක්රියාකාරී ගිවිසුම
සමාලෝචිත රූපයක්, එක් ආරක්ෂිත පැතිකඩක්, TUN ප්රවේශය සහ NET_ADMIN. බහාලුමට ලැබෙන දේ, නොලැබිය යුතු දේ සහ උමං මාර්ගය ක්රියා කරන බව ඔප්පු කරන ආකාරය.
VPN සේවාලාභියෙකු බහාලුමක තැබූ විට ඔබට ඇතුළත උමං මාර්ගයක් සහිත එක් නාම අවකාශයක් ලැබේ, සියලු රථවාහන VPN හරහා මාර්ගගත කරන සත්කාරකයක් නොවේ. මේවා වෙන වෙනම ව්යාපෘති වන අතර, ඒවා එකක් ලෙස සැලකීම තමයි බහාලුම් අහම්බෙන් වරප්රසාද ලබන මාර්ගය. මෙම මාර්ගෝපදේශය ආවරණය කරන්නේ පළමු එක පමණි: එක් සමාලෝචිත රූපයක්, එක් ආරක්ෂිත පැතිකඩක් සහ තමන්ගේම ජාල නාම අවකාශයට සීමා වූ සේවාලාභී ක්රියාවලියක්.
කවුරුන් හෝ දැනටමත් අනුමත කළ නිර්මාණයකින් පටන් ගන්න. පහත පියවර openvpn විධායක ගොනුව සහ සහතිකය හා යතුරු ද්රව්ය මවුන්ට් තුළ දැනටමත් විසඳා ඇති සම්පූර්ණ සේවාලාභී පැතිකඩක් ඇති රූපයක් උපකල්පනය කරයි. ඒවා මෘදුකාංග ගොඩනඟන්නේ නැත, අක්තපත්ර නිකුත් කරන්නේ නැත, root රහිත ක්රියාකාරී පරිසරයන් සහ ස්වදේශීය Windows බහාලුම් ආවරණය නොකරයි; ඒ සෑම එකක්ම පිළිතුර වෙනස් කරයි.
බහාලුමට ලැබෙන දේ සහ නොලැබෙන දේ
පැතිකඩ සහ එය යොමු වන සියල්ල සීමිත අවසර සහිත දේශීය නාමාවලියක තබා, කියවීමට පමණක් ලෙස මවුන්ට් කරන්න. පැතිකඩ තුළ ඇති සාපේක්ෂ මාර්ග එම මවුන්ට් තුළම විසඳිය යුතුය; සහතිකය පැතිකඩට වඩා එක් නාමාවලියක් ඉහළින් පිහිටන විට සහ බහාලුම එය කිසිදා නොදකින විට මිනිසුන්ට මඟ හැරෙන විස්තරය මෙයයි.
services:
vpn:
image: ${VPN_CLIENT_IMAGE:?set the reviewed image reference}
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
volumes:
- ./vpn:/vpn:ro
working_dir: /vpn
entrypoint: ["openvpn"]
command: ["--config", "/vpn/client.ovpn"]
එම ගොනුව දේ තුනක් ලබා දෙන අතර තවත් කිසිවක් ඉල්ලන්නේ නැත. ඔබේ යෙදවීම් ප්රතිපත්තිය එසේ පවසන්නේ නම් රූප සඳහන ඩයිජෙස්ට් මගින් සවි කළ යුතු අතර, පැතිකඩ සමාලෝචිත එකම විය යුතුය, සත්කාරකයේ යමෙකු එතැනම සංස්කරණය කළ පිටපතක් නොවේ.
මෙහි කියවීමට පමණක් යන්නෙන් අදහස් වන්නේ බහාලුමට ඔබේ සත්කාරක ගොනු වෙනස් කළ නොහැකි බවයි; ඔබ මවුන්ට් කළ පුද්ගලික යතුර කියවිය නොහැකි බව එයින් අදහස් නොවේ. මවුන්ට් කිරීමේ මුළු අරමුණ එයයි, ඒ නිසාම ගොනු අවසර, හිමිකාරිත්වය සහ රහස සත්කාරකයට පැමිණි ආකාරය තවමත් වැදගත් වේ. මුරපදයක් කිසිදා විධාන රේඛාවේ ලබා නොදෙන්න, රූප ස්ථරයක නොපිළිස්සන්න, මන්ද දෙකම පසුව පිරිසිදු කළ නොහැකි ස්ථානවල රැඳී තිබේ.
හැකියාවන්, entrypoint සහ ඒවා අතර ඇති උගුල
සැකසුම් දෙකක් අවශ්ය වන අතර ඒවා සම්බන්ධයක් නැති වැඩ කරයි. NET_ADMIN බහාලුමේ නාම අවකාශය තුළ අතුරුමුහුණත් සහ මාර්ග හසුරුවීමට ඉඩ දෙයි. /dev/net/tun උපාංග සටහන ක්රියාවලියට උමං උපාංගය කියවීමට පවා ඉඩ දෙයි. එකක් අනෙක නොමැතිව දීම පැහැදිලි අසාර්ථකත්වයක් ඇති කරයි, එය පහසුය: නොමැති TUN උපාංගය විවෘත කිරීමේදී අසාර්ථක වේ, නමුත් නොමැති හැකියාව සේවාලාභියා අතුරුමුහුණත වින්යාස කිරීමට උත්සාහ කරන විට අසාර්ථක වේ.
ඒවායින් කිසිවක් privileged: true සාධාරණීකරණය නොකරයි. වරප්රසාද ලත් බහාලුමට සියලු හැකියාවන් සහ උපාංග ප්රවේශය ලැබෙන අතර, එය මෙම වැඩ භාරයට අවශ්ය ප්රමාණයට වඩා බෙහෙවින් විශාල ලබා දීමකි. ක්රියාකාරී වරප්රසාද සහ හැකියාවන් පිළිබඳ යොමුව මෙම ලබා දීම කොතෙක් දුර යනවාද යන්න පැහැදිලි කරයි. chart එකක් හෝ බ්ලොග් සටහනක් එය ඉල්ලා සිටියි නම්, අවශ්යතාව ඇත්තෙන්ම නොමැති උපාංග මාර්ගයක්ද නැතහොත් නොමැති හැකියාවක්ද යන්න මුලින්ම පරීක්ෂා කරන්න.
entrypoint අභිබවා යැවීම තමයි හපන කොටස. openvpn සෘජුව ඇමතීම සාමාන්ය රූපයකට නිවැරදි වන අතර, ඩීමනය ධාවනය කිරීමට පෙර ගිනි පවුරු නීති, විසඳුම්කරු ගොනු හෝ අක්තපත්ර සකසන ඕනෑම නිෂ්පාදන රූපයකට වැරදිය. එම පිටපත අභිබවා යැවීම සූදානම මඟ හරින අතර අඩක් වින්යාස කළ නාම අවකාශයක ඉහළ ආ උමං මාර්ගය නිරවුල් කිරීමට ඔබව තබයි.
සේවාලාභියා පෙරබිමෙහි ධාවනය කර එය බහාලුමේ ප්රධාන ක්රියාවලිය වීමට ඉඩ දෙන්න. ඩීමනීකරණය වන ක්රියාවලියක් වහාම පිටව යයි, බහාලුම ලූපයක නැවත ආරම්භ වේ, ඔබට අවශ්ය ලොග සියල්ල එකම ලෙස පෙනෙන නැවත ආරම්භ අතර විසිරී ඇත.
නාම අවකාශය තුළින් සත්යාපනය කරන්න, සත්කාරකයෙන් නොව
ස්ටැක් එක ඉහළ දමන්න, සේවාලාභියා සම්බන්ධිත තත්ත්වයට පැමිණ ඇති බව ලොගයේ තහවුරු කර, පසුව උමං මාර්ගය ඇත්තෙන්ම රඳවා ගන්නා නාම අවකාශය පරීක්ෂා කරන්න.
docker compose up -d
docker compose logs --tail 40 vpn
docker compose exec vpn ip -br addr
docker compose exec vpn ip route
ලිපින ලැයිස්තුවේ තටාකයෙන් ලිපිනයක් සහිත උමං අතුරුමුහුණතක් පෙනිය යුතු අතර, මාර්ග වගුවේ එය දෙසට යොමු වන තල්ලු කළ ගමනාන්ත පෙනිය යුතුය. අතුරුමුහුණත නොමැති නම්, සේවාලාභියා එය නිර්මාණය කරන අවස්ථාවට කිසිදා නොපැමිණියේය. එය තිබුණත් කිසිදු මාර්ගයක් එය භාවිතා නොකරන්නේ නම්, සොයා බැලිය යුතු තැන push හෝ මාර්ග විකල්ප වේ.
පසුව ඔබට වැදගත් ගමනාන්තය උමං මාර්ගය භාවිතා කළ යුතු නාම අවකාශයෙන්, ping පමණක් නොව යෙදුම සමඟ පරීක්ෂා කරන්න. නාම විසඳුම වෙනම අසාර්ථකත්වයක් වන අතර එය පැහැදිලිව පරීක්ෂා කිරීම වටී: තල්ලු කළ DNS ලිපිනයක් බහාලුමේ විසඳුම්කරු ස්වයංක්රීයව යාවත්කාලීන නොකරන අතර, push නොසලකා හරින ස්වාධීන සේවාලාභියා රූපය වින්යාස කළ දෙය හරහා නාම විසඳයි.
විසන්ධි තත්ත්වය ගිවිසුමේ කොටසකි
නැවත සම්බන්ධ වීමේ හැසිරීමට තමන්ගේම පරීක්ෂාවක් අවශ්ය වේ, මන්ද නැවත ආරම්භ කිරීමේ ප්රතිපත්තිය ක්රියාවලිය නැවත ආරම්භ වන බව ඔප්පු කරන අතර එම අතරතුර රථවාහන කරන දේ ගැන කිසිවක් නොකියයි. උමං මාර්ගය නවත්වන්න, අපේක්ෂිත ගමනාන්තය උත්සාහ කර, සම්බන්ධතාවය ප්රතික්ෂේප වේද, එල්ලී තිබේද, නැතහොත් බහාලුමේ සාමාන්ය මාර්ගය හරහා නිහඬව සාර්ථක වේද බලන්න. අවසාන ප්රතිඵලය තමයි වැදගත්, එය සුවපත් ලොගයක නොපෙනේ.
වැඩ භාරය කිසිදා සාමාන්ය මාර්ගය භාවිතා නොකළ යුතු නම්, ගිනි පවුරු නීති සහ නාම අවකාශය තුළ සූදානම් බවට සංඥාවක් සමඟ එය පැහැදිලිව නිර්මාණය කරන්න. Kill switch යනු ඔබ ලියා පරීක්ෂා කරන ප්රතිපත්තියකි, බහාලුමක සේවාලාභියෙකු ධාවනය කිරීමෙන් උරුම වන ගුණාංගයක් නොවේ.
අවසාන වශයෙන්, සීමාව මතක තබා ගන්න: මෙම මාර්ග බහාලුමේ නාම අවකාශයේ ජීවත් වන අතර සත්කාරකයේ මාර්ගගත කිරීමේ වගුව ප්රතිස්ථාපනය නොකරයි. Docker හි ඉදිරියට යැවීම, පරිවර්තනය සහ ගිනි පවුරු නීති පිටත මාර්ගයේ කොටසක් ලෙස පවතින අතර, ප්රකාශිත වරාය VPN අතුරුමුහුණතක් නොවේ.