{
    "componentChunkName": "component---src-templates-issues-tsx",
    "path": "/issues/124",
    "result": {"data":{"issuesJson":{"id":"a0d540ff-6776-5c14-bd53-a617897189ca","title":"dockovpn/dockovpn: 一个开箱即用、无状态、无需持久存储的 VPN服务器 Docker 镜像，可以在几秒钟内启动。","number":124,"bodyHTML":"<div align=\"center\" dir=\"auto\">\n<p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\"><img src=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\" width=\"100%\" height=\"3\" data-animated-image=\"\" data-canonical-src=\"https://cdn.jsdelivr.net/gh/eryajf/tu@main/img/image_20240420_214408.gif\" style=\"max-width: 100%; height: auto; max-height: 3px;\"></a><br><br></p>\n<markdown-accessiblity-table><table role=\"table\">\n<thead>\n<tr>\n<th align=\"right\">Repos</th>\n<th align=\"left\"><a href=\"https://github.com/dockovpn/dockovpn\">dockovpn/dockovpn</a></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td align=\"right\"><strong>Views</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/55192208c1d1150c97d27669f2d4cec779ec7f44a7f64e59718668d19a45e870/68747470733a2f2f76696577732e77686174696c656172656e65642e746f6461792f76696577732f6769746875622f646f636b6f76706e2f646f636b6f76706e2e737667\" alt=\"views\" data-canonical-src=\"https://views.whatilearened.today/views/github/dockovpn/dockovpn.svg\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>Stars</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/f35ddc16beb17715202a42e8b95fbca12fae6ffc2f599ba39dca3b2f55ed6158/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f646f636b6f76706e2f646f636b6f76706e3f636f6c6f723d663266303864266c6f676f3d556e64657274616c65266c6f676f436f6c6f723d656234363330\" alt=\"stars\" data-canonical-src=\"https://img.shields.io/github/stars/dockovpn/dockovpn?color=f2f08d&amp;logo=Undertale&amp;logoColor=eb4630\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>Forks</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/66297f42e60cccbb11a4a416da99ccc89ded1c1aafcf8be942e908fba3678cfd/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f666f726b732f646f636b6f76706e2f646f636b6f76706e3f636f6c6f723d626138366562266c6f676f3d48616e647368616b65266c6f676f436f6c6f723d656136616136\" alt=\"forks\" data-canonical-src=\"https://img.shields.io/github/forks/dockovpn/dockovpn?color=ba86eb&amp;logo=Handshake&amp;logoColor=ea6aa6\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>License</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/28b96cf33dc2fe227b6287806884ce2b89b47c73e455a05f5e090e1803e81341/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f646f636b6f76706e2f646f636b6f76706e3f6c6f676f3d64617461253341696d616765253246706e672533426261736536342532436956424f5277304b47676f414141414e53556845556741414144414141414177434159414141425841766d48414141414358424957584d41414173544141414c457745416d70775941414144336b6c45515652346e4f335953557a5555426748384a726f57567255474a66456d3773584e63534446784d544c327069347348456778654e526f77586770455742445552522532424e414e4f4b4f4b36366f6f4b4a4742586545475263574163455646475152484677516d483525324630774861655748493944554455354c356b6e6568644f62377a66652532423139636e434a47495243516945596c514237594a4979474c38616f73756c565a36695246516a69474b6b7564576735614c6c704f70704e586e665071773555304459524a6d56786a4367464633424c755a476d416f5655694b4541726d583744375553677351706f72674761336748664b34483663754262435644334771683141352532424c6745253242467749656e514d306a6f446f66714c6f48564e7742796d384370546e416d327a51713073676478624964515a556c416b7150415a3664676a303541446f59526f6f66792532466f5869726f376b3551586a4c6f70677a4b69514e6c4c4461716f4967754577426a7a7150355066446a45394479495879493633464d547751464d43567271774e61763451666f52673538514625324266724d485172454b3844546f434d714e4179574e4866786d54526f4c4f726d5352566747744466714345715a4f4851727a6f34706243557341333431365169364551394b476a6345465267484f724f4b6e5536574162396247455459656b4b7843766a546167394534706a653534446b3551503862624d4859762532464333756541654a6b50304f4778422532424a70426e4172595238455951516e6f4e31414e4661426e5050356c385372736559514c303641646b30464a5938484f5761424d6c6541486a683068506f73497a6c6f3876304125324633345a694f6548726130714b52504d5653493774762532423932747725324676687855654252713456454c674d376642714b354770526d6f514c584e7075625475367a6f4e52706754386e5051627138347764253246494375767978694b4871694e41664933774d367549684271476b4c696977414f734b44714f68743749747239567938536a52424557667941627225324668523142667056514664484a42253246423268683778376a36517077435665655951326b72554235436c636a3641326d3067576a25324244306d4c34397a573563517943484c4e37726a6c6d6d6174457958582532464372547a412532466f51785a6b576c39474a5443566f25324279546a3837253242346769504b6376307149486f344156344430565a727251493334706e70524d36357875652532467a417265453425324654253246536f676c664542794d7369517441546c4c3352414a355948725378365a44665337307337754d486842705225324659423573305057366f455270316236253246667252684b3353444c35546965364f515548516c5133735644752532427a50636b397657453973747225324236496a533967486d5750616861444a25324277434b364e494242587348423948796b587378774470686c436d416476706c6162554a4e6e5a504239342532464e7436784f6538587a4562503257684d335741673147756236744825324233513150673337365239713475716c6e6f36676448476a444f5139306562303141484d3672596975554a314f713472344656756a35765239427a4d3957674e764f7977446869495951467667626366774166774d764863615067425041253246447948476a50624e394138616d6562636477416444354e6633373574787165774e5552656f797677424958594c645170576c6877465771745061435044334173467541535636717171496c62304a766b564331464c39576b4c55556c55574b337a585a4c46432532423125324642726f46746f364f7358497545594a5034447a7a5732594656316f4a614141414141456c46546b5375516d4343\" alt=\"license\" data-canonical-src=\"https://img.shields.io/github/license/dockovpn/dockovpn?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD3klEQVR4nO3YSUzUUBgH8JroWVrUGJfEm7sXNcSDFxMTL2pi4sHEgxeNRowXgpEWBDURR%2BNANOKOK66ooKJGBXeEGRcWAcEVFGQRHFwQmH5%2F0wHaeWHI9DUDU5L5knehdOb7zfe%2B19cnCJGIRCQiEYlQB7YJIyGL8aosulVZ6iRFQjiGKkudWg5aLlpOppNXnfPqw5U0DYRJmVxjCgFF3BLuZGmAoVUiKEArmX7D7USgsQporgGa3gHfK4H6cuBbCVD3Gqh1A5%2BLgE%2BFwIenQM0joDofqLoHVNwBym8CpTnAm2zQq0sgdxbIdQZUlAkqPAZ6dgj05ADoYRoofy%2FoXiro7k5QXjLopgzKiQNlLDaqoIguEwBjzqP5PfDjE9DyIXyI63FMTwQFMCVrqwNav4QfoRg58QF%2BfrMHQrEK8DToCMqNAyWNHfxmTRoLOrmSRVgGtDfqCEqZOHQrzo4pbCUsA3416Qi6EQ9KGjcEFRgHOrOKnU6WAb9bGETYekKxCvjTag9E4pje54Dk5QP8bbMHYv%2FC3ueAeJkP0OGxB%2BJpBnArYR8EYQQnoN1ANFaBnPP5l8SrseYQL06Adk0FJY8HOWaBMleAHjh0hPosIzlo8v0A%2F34ZiOeHra0qKRPMVSI7tv%2B92tw%2FvhxUeBRq4VELgM7fBqK5GpRmoQLXNpubTu6zoNRpgT8nPQbq84wd%2FICuvyxiKHqiNAfI3wM6uIhBqGkLiiwAOsKDqOht7Itr9Vy8SjRBEWfyAbr%2FhR1BfpVQFdHJB%2FB2hh7x7j6QpwCVeeYQ2krUB5Clcj6A2m0gWj%2BD0mL49zW5cQyCHLN7rjlmmatEyXX%2FCrTzA%2FoQxZkWl9GJTCVo%2ByTj87%2B4giPKcv0qIHo4AV4D0VZrrQI34pnpRM65xue%2FzAreE4%2FT%2FSoglfEByMsiQtATlL3RAJ5YHrSx6ZDfS70s7uMHhBpR%2FYB5s0PW6oERp1b6%2FfrRhK3SDL5Tie6OQUHQlQ3sVDu%2BzPck9vWE9str%2B6IjS9gHmWPahaDJ%2BwCK6NIBBXsHB9HykXsxwDphlCmAdvplabUJNnZPB94%2FNt6xOe8XzEbP2WhM3WAg1Gub6tH%2B3Q1Pg376R9q4uqlno6gdHGjDOQ90eb01AHM6rYiuUJ1Oq4r4FVuj5vR9BzM9WgNvOywDhiIYQFvgbcfwAfwMvHcaPgBPA%2FDyHGjPbN9A8amebcdwAdD5Nf375txqewNUReoyvwBIXYLdQpWlhwFWqtPaCPD3AsFuASV6qqqIlb0JvkVC1FL9WkLUUlUWK3zXZLFC%2B1%2FBroFto6OsXIuEYJP4DzzW2YFV1oJaAAAAAElFTkSuQmCC\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>UpdatedAt</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/cd7ec8fbb4c79c4a852e861183eea91b2b743c5611cd341db4566b4e7fc431dd/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f646f636b6f76706e2f646f636b6f76706e3f646973706c61795f74696d657374616d703d636f6d6d6974746572266c6f676f3d64617461253341696d616765253246706e672533426261736536342532436956424f5277304b47676f414141414e5355684555674141414234414141416543415941414141374d4b3669414141414358424957584d41414173544141414c457745416d7077594141414648556c45515652346e4c5658375539615678776d3236646c582532466468627825324232253246516e626b7655627264554151674a4a496655444e574454546d4f76314651554661504a346b7573725630314a7431734e70637453327533626f745a746d786439744a5346536f714b71494635625944464c436f76436c656673747a4a387758524c445a4c7a6e6b634f343535376e3364332532466e655a3472454f515a74315771462532423858467234253242664f4c4565326a6f59307a776638546f795a50766a45676b4c592532426b306d6d72584f36644b696e787a476b30666a5430782532425279723055716e6359637a4d317263347451253242497270324c4758646f344e4334567657715453373277716c632532427231334f527269364b6458646e624f484c6c776c7a4a70524b6e3657342532424b36706f4f434e6e494166486a253246253242776168495a4234764b6e715a6630714a704e49716c2532467638545530634e6c3572627963337730516e54703379324c54614a374d314e617844723266526e315370504736476961323174664533345463614f617931694d55564f5146624659714957536f31573854694156616e43306576584f4542375770313448466232327a453566714c4f433545524c515769644e614e49347545636339693768634a6c644868324e57725135674464624f6c7061756d49754c62326174415144506e7a3062384e6257636d785656524a33486d7870536377777a4f4a6d4b44524765384c6c435a444c4739673754496e5631516c376462586256316533675430574b697243466f6d6b5079767758466c5a474a4f6a563625324253743634757564445a4f55354555636f782532464d455144567674364d62634e3237593341797a687633737061557242365a3971724a534f3139657a6a387032704c426b4a792532426343484a7857493567573574636652527a31645531394766476b6f7539505a4f34736d52396a4746777065783444793362766e6d4b79706f74625531335669646a71595a68726a343972764d457425324625324659714c7a396430304e6a57253246637a67796f394f35317a7336614e6c6f354644747530445a675146686c47584a30644241446f4e6864367576703657686f617967374e394c564748386d443462253246486e667455516f4e4734764c51306769784d716c5725324234714f6a744e48446733723166365969525347785279375576714c62395534716b716e78504f4e7661356c447048723125324279794b524e4b57425a793565644d554842326d3572792532422532424551772532427a6766347a6f39253246306f634e3357527a4c4277344a2532424a7950574372716d4967475974554f735744346f785a46516f50556a4770564871493425324661666b51504336665a5165654d31253242764c7549516e6a754257514444437363726d485039656f4e5041744271664f6e5875614b25324268364a45624772732532427076764d6d78654962683836336162565065597953456f39464a48704e4d464a59253242503563575a6b6667374f3174537759436553514c54593345385130392532464256504a556c78516a7368543142736343593032723955445542667643484236367063665041336c794165336e6772332532463437584467614a7a736c7937787741364e5a746c555550437541487161536a5549502532427375653842525741432532464e6651374a5a505a35397330476a3756747049537a34685125324243706658474d4b685a63764c70554b7866574d386f68766637702532464f446a4842666356463849736b383267314648796b63564645253242555a414158343761452532464d6c34504f3530506e75683025324678346e6d637957507364774468427836436d6b4c562532466746446a594b784f4a4f4674623077517949684c39527943774b33414f664947703159464542686e4d4a634c525745624b644b516f55366e63545a6b494544696341792532463831645675454d3552775066657934784f7830496b25324649324e6e466b692532425761664f6f464959466367595a43797864376543556a626334416d46363566742532466b4d686b336f25324235686337734d4a79716a4a45477659466151464972375930775077384246415925324236253242766d6b3377367a7a5275444d6d5a5652736668385274413075455453443775434254364459514e36697665553066706b594c6a453671725672744f78654e4b553954484c5a4a396b4255324a427342685635416976422532466f4b61514e4b675043427744596149665a4334616454684f71463457454e56694c4a77566f586f62664c424b56773637414f6154734c6336355461564b32317651344c613939654b6359673576627873624f627a5451394e37554b4467554f3177446a6944494942736868357a746733396e514d4c535a4248344f7a424f55444551586d323036643366634c67737762585141345068634b336e6873775531427a3877765130395248472532466f597933656a6677424e6d746f59714c4130586741414141424a52553545726b4a676767253344253344266c6162656c3d557064617465644174\" alt=\"last-commit\" data-canonical-src=\"https://img.shields.io/github/last-commit/dockovpn/dockovpn?display_timestamp=committer&amp;logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFHUlEQVR4nLVX7U9aVxwm26dlX%2Fdhbx%2B2%2FQnbkvUbrdUAQgJJIfUDNWDTTmOv1FQUFaPJ4kusrV01Jt1sNpctS2u3botZtmxd9tJSFSoqKqIF5bYDFLCovClefstzJ8wXRLDZLznkcO4557n3d3%2FneZ4rEOQZt1WqF%2B8XFr4%2BfOLEe2joY0zwf8ToyZPvjEgkLY%2Bk0mmrXO6dKinxzGk0fjT0x%2BRyr0UqncYczM1rc4tQ%2BIrp2LGXdo4NC4VvWqTS72wqlc%2Br13ORri6KdXdnbOHLlwlzJpRKn6W4%2BK6poOCNnIAfHj%2F%2BwahIZB4vKnqZf0qJpNIql%2Fv8TU0cNl5rbyc3w0QnTp3y2LTaJ7M1NaxDr2fRn1SpPG6Gia21tfE34TcaOay1iMUVOQFbFYqIWSo1W8TiAVanC0evXOEB7Wp14HFb22zE5fqLOC5ERLQWidNaNI4uEcc9i7hcJldHh2NWrQ5gDdbOlpaumIuLb2atAQDPnz0b8NbWcmxVVRJ3HmxpScwwzOJmKDRGe8LlCZDLG9g7TInV1Ql7dbXbV1e3gT0WKirCFomkPyvwXFlZGJOjV6%2BSt64uudDZOU5EUcox%2FMEQDVvt6MbcN27Y3Ayzhv3spaUrB6Z9qrJSO19ezj8p2pLBkJy%2BcCHJxWI5gW5tcfRRz1dU19GfGkou9PZO4smR9jGFwpex4Dy3bvnmKypotbU13VidjqYZhrj49rvMEt%2F%2FYqLz9d00NjW%2Fczgyo9O51zs6aNlo5FDtu0DZgQFhlGXJ0dBADoNhd6uvp6Whoayg7N9LVGH8mD4b%2FHnftUQoNG4vLQ0gixMqlW%2B4qOjtNHDg3r1f6YiRSGxRy7UvqLb9U4qkqnxPONva5lDpHr1%2ByyKRNKWBZy5edMUHB2m5ry%2B%2BEQw%2Bzgf4zo9%2F0ocN3WRzLBw4J%2BJyPWCrqmIgGYtUOsWD4oxZFQoPUjGpVHqI4%2FafkQPC6fZQeeM1%2BvLuIQnjuBWQDDCscrmHP9eoNPAtBqfOnXuaK%2Bh6JEbGrs%2BpvvMmxeIbh863abVPeYySEo9FJHpNMFJY%2BP5cWZkfg7O1tSwYCeSQLTY3E8Q09%2FBVPJUlxQjshT1BscCY02r9UDUBfvCHB66pcfPA3lyAe3ngr3%2F47XDgaJzsly7xwA6NZtlUUPCuAHqaSjUIP%2Bsue8BRWAC%2FNfQ7JZPZ59s0Gj7VtpISz4hQ%2BCpfXGMKhZcvLpUKxfWM8ohvf7p%2FODjHBfcVF8Isk82g1FHykcVFE%2BUZAAX47aE%2FMl4PO50Pnuh0%2Fx4nmcyWPsdwDhBx6CmkLV%2FgFDjYKxOJOFtb0wQyIhL9RyCwK3AOfIGp1YFEBhnMJcLRWEbKdKQoU6ncTZkIEDicAy%2F81dVuEM5RwPfey4xOx0Ik%2FI2NnFki%2BWafOoFIYFcgYZCyxd7eCUjbc4AmF65ft%2FkMhk3o%2B5hc7sMJyqjJEGvYFaQFIr7Y0wPw8BFAY%2B6%2Bvmk3w6zzRuDMmZVRsfh8RtA0uETSD7uCBT6DYQN6iveU0fpkYLjE6qrVrtOxeNKU9THLZJ9kBU2JBsBhV5AivB%2FoKaQNKgPCBwDYaIfZC4adThOqF4WENViLJwVoXobfLBKVw67AOaTsLc65TaVK21vQ4La99eKcYg5vbxsbObzTQ9N7UKDgUO1wDjiDIIBshh5ztg39nQMLSZBH4OzBOUDEQXm206d3fcLgswbXQA4PhcK3nhswU1Bz8wvQ09RHG%2FoYy3ejfwBNmtoYqLA0XgAAAABJRU5ErkJggg%3D%3D&amp;label=UpdatedAt\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>CreatedAt</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/fe474f2d1fb92966cc7252bc6121d46b31c103316a905d728db0cc6f3a481c0b/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f637265617465642d61742f646f636b6f76706e2f646f636b6f76706e3f6c6f676f3d64617461253341696d616765253246706e672533426261736536342532436956424f5277304b47676f414141414e5355684555674141414234414141416543415941414141374d4b3669414141414358424957584d41414173544141414c457745416d7077594141414648556c45515652346e4c5658375539615678776d3236646c582532466468627825324232253246516e626b7655627264554151674a4a496655444e574454546d4f76314651554661504a346b7573725630314a7431734e70637453327533626f745a746d786439744a5346536f714b71494635625944464c436f76436c656673747a4a387758524c445a4c7a6e6b634f343535376e3364332532466e655a3472454f515a74315771462532423858467234253242664f4c4565326a6f59307a776638546f795a50766a45676b4c592532426b306d6d72584f36644b696e787a476b30666a5430782532425279723055716e6359637a4d317263347451253242497270324c4758646f344e4334567657715453373277716c632532427231334f527269364b6458646e624f484c6c776c7a4a70524b6e3657342532424b36706f4f434e6e494166486a253246253242776168495a4234764b6e715a6630714a704e49716c2532467638545530634e6c3572627963337730516e54703379324c54614a374d314e617844723266526e315370504736476961323174664533345463614f617931694d55564f5146624659714957536f31573854694156616e43306576584f4542375770313448466232327a453566714c4f433545524c515769644e614e49347545636339693768634a6c644868324e57725135674464624f6c7061756d49754c62326174415144506e7a3062384e6257636d785656524a33486d7870536377777a4f4a6d4b44524765384c6c435a444c4739673754496e5631516c376462586256316533675430574b697243466f6d6b5079767758466c5a474a4f6a563625324253743634757564445a4f55354555636f782532464d455144567674364d62634e3237593341797a687633737061557242365a3971724a534f3139657a6a387032704c426b4a792532426343484a7857493567573574636652527a31645531394766476b6f7539505a4f34736d52396a4746777065783444793362766e6d4b79706f74625531335669646a71595a68726a343972764d457425324625324659714c7a396430304e6a57253246637a67796f394f35317a7336614e6c6f354644747530445a675146686c47584a30644241446f4e6864367576703657686f617967374e394c564748386d443462253246486e667455516f4e4734764c51306769784d716c5725324234714f6a744e48446733723166365969525347785279375576714c62395534716b716e78504f4e7661356c447048723125324279794b524e4b57425a793565644d554842326d3572792532422532424551772532427a6766347a6f39253246306f634e3357527a4c4277344a2532424a7950574372716d4967475974554f735744346f785a46516f50556a4770564871493425324661666b51504336665a5165654d31253242764c7549516e6a754257514444437363726d485039656f4e5041744271664f6e5875614b25324268364a45624772732532427076764d6d78654962683836336162565065597953456f39464a48704e4d464a59253242503563575a6b6667374f3174537759436553514c54593345385130392532464256504a556c78516a7368543142736343593032723955445542667643484236367063665041336c794165336e6772332532463437584467614a7a736c7937787741364e5a746c555550437541487161536a5549502532427375653842525741432532464e6651374a5a505a35397330476a3756747049537a34685125324243706658474d4b685a63764c70554b7866574d386f68766637702532464f446a4842666356463849736b383267314648796b63564645253242555a414158343761452532464d6c34504f3530506e75683025324678346e6d637957507364774468427836436d6b4c562532466746446a594b784f4a4f4674623077517949684c39527943774b33414f664947703159464542686e4d4a634c525745624b644b516f55366e63545a6b494544696341792532463831645675454d3552775066657934784f7830496b25324649324e6e466b692532425761664f6f464959466367595a43797864376543556a626334416d46363566742532466b4d686b336f25324235686337734d4a79716a4a45477659466151464972375930775077384246415925324236253242766d6b3377367a7a5275444d6d5a5652736668385274413075455453443775434254364459514e36697665553066706b594c6a453671725672744f78654e4b553954484c5a4a396b4255324a427342685635416976422532466f4b61514e4b675043427744596149665a4334616454684f71463457454e56694c4a77566f586f62664c424b56773637414f6154734c6336355461564b32317651344c613939654b6359673576627873624f627a5451394e37554b4467554f3177446a6944494942736868357a746733396e514d4c535a4248344f7a424f55444551586d323036643366634c67737762585141345068634b336e6873775531427a3877765130395248472532466f597933656a6677424e6d746f59714c4130586741414141424a52553545726b4a676767253344253344266c6162656c3d437265617465644174\" alt=\"create-at\" data-canonical-src=\"https://img.shields.io/github/created-at/dockovpn/dockovpn?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFHUlEQVR4nLVX7U9aVxwm26dlX%2Fdhbx%2B2%2FQnbkvUbrdUAQgJJIfUDNWDTTmOv1FQUFaPJ4kusrV01Jt1sNpctS2u3botZtmxd9tJSFSoqKqIF5bYDFLCovClefstzJ8wXRLDZLznkcO4557n3d3%2FneZ4rEOQZt1WqF%2B8XFr4%2BfOLEe2joY0zwf8ToyZPvjEgkLY%2Bk0mmrXO6dKinxzGk0fjT0x%2BRyr0UqncYczM1rc4tQ%2BIrp2LGXdo4NC4VvWqTS72wqlc%2Br13ORri6KdXdnbOHLlwlzJpRKn6W4%2BK6poOCNnIAfHj%2F%2BwahIZB4vKnqZf0qJpNIql%2Fv8TU0cNl5rbyc3w0QnTp3y2LTaJ7M1NaxDr2fRn1SpPG6Gia21tfE34TcaOay1iMUVOQFbFYqIWSo1W8TiAVanC0evXOEB7Wp14HFb22zE5fqLOC5ERLQWidNaNI4uEcc9i7hcJldHh2NWrQ5gDdbOlpaumIuLb2atAQDPnz0b8NbWcmxVVRJ3HmxpScwwzOJmKDRGe8LlCZDLG9g7TInV1Ql7dbXbV1e3gT0WKirCFomkPyvwXFlZGJOjV6%2BSt64uudDZOU5EUcox%2FMEQDVvt6MbcN27Y3Ayzhv3spaUrB6Z9qrJSO19ezj8p2pLBkJy%2BcCHJxWI5gW5tcfRRz1dU19GfGkou9PZO4smR9jGFwpex4Dy3bvnmKypotbU13VidjqYZhrj49rvMEt%2F%2FYqLz9d00NjW%2Fczgyo9O51zs6aNlo5FDtu0DZgQFhlGXJ0dBADoNhd6uvp6Whoayg7N9LVGH8mD4b%2FHnftUQoNG4vLQ0gixMqlW%2B4qOjtNHDg3r1f6YiRSGxRy7UvqLb9U4qkqnxPONva5lDpHr1%2ByyKRNKWBZy5edMUHB2m5ry%2B%2BEQw%2Bzgf4zo9%2F0ocN3WRzLBw4J%2BJyPWCrqmIgGYtUOsWD4oxZFQoPUjGpVHqI4%2FafkQPC6fZQeeM1%2BvLuIQnjuBWQDDCscrmHP9eoNPAtBqfOnXuaK%2Bh6JEbGrs%2BpvvMmxeIbh863abVPeYySEo9FJHpNMFJY%2BP5cWZkfg7O1tSwYCeSQLTY3E8Q09%2FBVPJUlxQjshT1BscCY02r9UDUBfvCHB66pcfPA3lyAe3ngr3%2F47XDgaJzsly7xwA6NZtlUUPCuAHqaSjUIP%2Bsue8BRWAC%2FNfQ7JZPZ59s0Gj7VtpISz4hQ%2BCpfXGMKhZcvLpUKxfWM8ohvf7p%2FODjHBfcVF8Isk82g1FHykcVFE%2BUZAAX47aE%2FMl4PO50Pnuh0%2Fx4nmcyWPsdwDhBx6CmkLV%2FgFDjYKxOJOFtb0wQyIhL9RyCwK3AOfIGp1YFEBhnMJcLRWEbKdKQoU6ncTZkIEDicAy%2F81dVuEM5RwPfey4xOx0Ik%2FI2NnFki%2BWafOoFIYFcgYZCyxd7eCUjbc4AmF65ft%2FkMhk3o%2B5hc7sMJyqjJEGvYFaQFIr7Y0wPw8BFAY%2B6%2Bvmk3w6zzRuDMmZVRsfh8RtA0uETSD7uCBT6DYQN6iveU0fpkYLjE6qrVrtOxeNKU9THLZJ9kBU2JBsBhV5AivB%2FoKaQNKgPCBwDYaIfZC4adThOqF4WENViLJwVoXobfLBKVw67AOaTsLc65TaVK21vQ4La99eKcYg5vbxsbObzTQ9N7UKDgUO1wDjiDIIBshh5ztg39nQMLSZBH4OzBOUDEQXm206d3fcLgswbXQA4PhcK3nhswU1Bz8wvQ09RHG%2FoYy3ejfwBNmtoYqLA0XgAAAABJRU5ErkJggg%3D%3D&amp;label=CreatedAt\" style=\"max-width: 100%;\"></a></td>\n</tr>\n</tbody>\n</table></markdown-accessiblity-table>\n<a href=\"https://github.com/opsre/awesome-ops\">\n</a><p dir=\"auto\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/b964a36ea4078c39f603d46a29436371c7541a2f26e0228d7b21b9d9805b43d3/68747470733a2f2f736f6369616c6966792e6769742e63692f6f707372652f617765736f6d652d6f70732f696d6167653f6465736372697074696f6e3d3126666f6e743d42697474657226666f726b733d31266973737565733d31266c616e67756167653d31266c6f676f3d6874747073253341253246253246617661746172732e67697468756275736572636f6e74656e742e636f6d25324675253246313838353638303230266e616d653d31266f776e65723d31267061747465726e3d436972637569742b426f6172642670756c6c733d31267374617267617a6572733d31267468656d653d4c69676874\" alt=\"\" data-canonical-src=\"https://socialify.git.ci/opsre/awesome-ops/image?description=1&amp;font=Bitter&amp;forks=1&amp;issues=1&amp;language=1&amp;logo=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F188568020&amp;name=1&amp;owner=1&amp;pattern=Circuit+Board&amp;pulls=1&amp;stargazers=1&amp;theme=Light\" style=\"max-width: 100%;\"></a></p>\n<a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\"><img src=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\" width=\"100%\" height=\"3\" data-animated-image=\"\" data-canonical-src=\"https://cdn.jsdelivr.net/gh/eryajf/tu@main/img/image_20240420_214408.gif\" style=\"max-width: 100%; height: auto; max-height: 3px;\"></a>\n</div>\n<p align=\"center\" dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/d00011ad46117a6225c7baa8e945dc5a85e898a863339da606e461d968779a68/68747470733a2f2f616c656b736c697476696e656e6b2e6769746875622e696f2f646f636b65722d6f70656e76706e2f6173736574732f696d672f6c6f676f2d732e706e67\"><img src=\"https://camo.githubusercontent.com/d00011ad46117a6225c7baa8e945dc5a85e898a863339da606e461d968779a68/68747470733a2f2f616c656b736c697476696e656e6b2e6769746875622e696f2f646f636b65722d6f70656e76706e2f6173736574732f696d672f6c6f676f2d732e706e67\" data-canonical-src=\"https://alekslitvinenk.github.io/docker-openvpn/assets/img/logo-s.png\" style=\"max-width: 100%;\"></a></p><br>\n<p align=\"center\" dir=\"auto\">\n<a href=\"https://github.com/alekslitvinenk/docker-openvpn/blob/master/README.md\">[English]</a>\n<a href=\"https://github.com/alekslitvinenk/docker-openvpn/blob/master/docs/README_RU.md\">[Русский]</a>\n<a href=\"https://github.com/alekslitvinenk/docker-openvpn/blob/master/docs/README_CN.md\">[中国人]</a>\n<br>\n</p><p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/f7151a2e414028fb7dd46c6652273c6fed01acd7cf850170e1073801ea1a60be/687474703a2f2f636963642e646f636b6f76706e2e696f2f76657273696f6e2f646f636b6f76706e\"><img src=\"https://camo.githubusercontent.com/f7151a2e414028fb7dd46c6652273c6fed01acd7cf850170e1073801ea1a60be/687474703a2f2f636963642e646f636b6f76706e2e696f2f76657273696f6e2f646f636b6f76706e\" alt=\"Build Version\" data-canonical-src=\"http://cicd.dockovpn.io/version/dockovpn\" style=\"max-width: 100%;\"></a><br>\n<a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/f393828a4de3e2e331bf9c95f7123ce54308af77fd7ee6285d058608ae0b2114/687474703a2f2f636963642e646f636b6f76706e2e696f2f6275696c642f646f636b6f76706e\"><img src=\"https://camo.githubusercontent.com/f393828a4de3e2e331bf9c95f7123ce54308af77fd7ee6285d058608ae0b2114/687474703a2f2f636963642e646f636b6f76706e2e696f2f6275696c642f646f636b6f76706e\" alt=\"Build Status\" data-canonical-src=\"http://cicd.dockovpn.io/build/dockovpn\" style=\"max-width: 100%;\"></a><br>\n<a href=\"https://cicd.dockovpn.io/reports/dockovpn\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/98a284214ba4eb43abdd60907e87caf859b3ba87839416659fe19aac64605964/687474703a2f2f636963642e646f636b6f76706e2e696f2f74657374732f646f636b6f76706e\" alt=\"Tests Status\" data-canonical-src=\"http://cicd.dockovpn.io/tests/dockovpn\" style=\"max-width: 100%;\"></a><br>\n<a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/338c70240717cf2109e0b1418d56aaa6509d615f0e5320a7469709926f5759df/687474703a2f2f636963642e646f636b6f76706e2e696f2f6275696c742f646f636b6f76706e\"><img src=\"https://camo.githubusercontent.com/338c70240717cf2109e0b1418d56aaa6509d615f0e5320a7469709926f5759df/687474703a2f2f636963642e646f636b6f76706e2e696f2f6275696c742f646f636b6f76706e\" alt=\"Build Time\" data-canonical-src=\"http://cicd.dockovpn.io/built/dockovpn\" style=\"max-width: 100%;\"></a><br>\n<a href=\"https://hub.docker.com/r/alekslitvinenk/openvpn/\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/d467e6bb99c6662972e9e0dd1aa62a058a7c363cabf0de6aa8745b02954df40d/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f616c656b736c697476696e656e6b2f6f70656e76706e2e737667\" alt=\"Docker Pulls\" data-canonical-src=\"https://img.shields.io/docker/pulls/alekslitvinenk/openvpn.svg\" style=\"max-width: 100%;\"></a><br>\n<a href=\"https://gitter.im/docker-openvpn/community\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/bf485de7f7582758a3347c90a10d39c82582e00640081d64bfc44c369a21555e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636861742d6f6e5f6769747465722d3530623662622e737667\" alt=\"Gitter chat\" data-canonical-src=\"https://img.shields.io/badge/chat-on_gitter-50b6bb.svg\" style=\"max-width: 100%;\"></a><br>\n<a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/a222e5f8616f0b088bb69e2b64cbb0e5ee54020cd69382117793561095479c7d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f646f636b6f76706e2f646f636b6f76706e\"><img src=\"https://camo.githubusercontent.com/a222e5f8616f0b088bb69e2b64cbb0e5ee54020cd69382117793561095479c7d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f646f636b6f76706e2f646f636b6f76706e\" alt=\"GitHub\" data-canonical-src=\"https://img.shields.io/github/license/dockovpn/dockovpn\" style=\"max-width: 100%;\"></a></p>\n<h1 dir=\"auto\">🔐DockOvpn</h1>\n<p align=\"center\" dir=\"auto\"><a href=\"https://techround.co.uk/vpns/11-dockovpn-solutions/\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/4a4de9fbc64d438e37d56415006403d2960ec0d958213d7c25b0b19083c7d416/68747470733a2f2f616c656b736c697476696e656e6b2e6769746875622e696f2f646f636b65722d6f70656e76706e2f6173736574732f696d672f56504e35332d42616467652d333030783330302e706e67\" width=\"198\" height=\"198\" data-canonical-src=\"https://alekslitvinenk.github.io/docker-openvpn/assets/img/VPN53-Badge-300x300.png\" style=\"max-width: 100%; height: auto; max-height: 198px;\"></a></p><br>\n<p dir=\"auto\">Out of the box stateless VPN server docker image which starts in just a few seconds and doesn't require persistent storage. To get it running,  just copy &amp; paste the snippet below and follow instructions in your terminal:</p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"docker run -it --rm --cap-add=NET_ADMIN \\\n-p 1194:1194/udp -p 80:8080/tcp \\\n--name dockovpn alekslitvinenk/openvpn\"><pre class=\"notranslate\">docker run -it --rm --cap-add=NET_ADMIN \\\n-p 1194:1194/udp -p 80:8080/tcp \\\n--name dockovpn alekslitvinenk/openvpn</pre></div>\n<p dir=\"auto\">To get more detailed information, go to <a href=\"#-quick-start\">Quick Start</a> tutorial or watch <a href=\"https://youtu.be/y5Dwakc6hMs\" rel=\"nofollow\">video</a>.</p>\n<h2 dir=\"auto\">Supporting Dockovpn</h2>\n<p dir=\"auto\">Dockovpn is a team of cybersecurity experts developing leading edge projects in Networking, VPN, DevOPS and SecOPS domains. Project is supported entirely by volonteers.<br>\nIf you'd like to help support the future of the project, please consider:</p>\n<ul dir=\"auto\">\n<li>Giving developer time (see <a href=\"https://github.com/alekslitvinenk/docker-openvpn/blob/master/CONTRIBUTING.md\">Contrubition Guidelines</a>)!</li>\n<li>Giving funds by becoming a sponsor on <a href=\"https://github.com/sponsors/dockovpn\">GitHub</a> or <a href=\"https://opencollective.com/dockovpn\" rel=\"nofollow\">OpenCollective</a>!</li>\n</ul>\n<h2 dir=\"auto\">Content</h2>\n<p dir=\"auto\"><a href=\"#resources\">Resources</a> <br>\n<a href=\"#container-properties\">Container properties</a> <br>\n<a href=\"#-video-guide\">Video Guide</a> <br>\n<a href=\"#-quick-start\">Quick Start</a> <br>\n<a href=\"#persisting-configuration\">Persisting configuration</a> <br>\n<a href=\"#alternative-way-run-with-docker-compose\">Alternative way. Run with docker-compose</a> <br>\n<a href=\"#other-resources\">Other resources</a></p>\n<h2 dir=\"auto\">Resources</h2>\n<h3 dir=\"auto\">Real-time Chat</h3>\n<p dir=\"auto\"><a href=\"https://dockovpn.slack.com\" rel=\"nofollow\">Slack</a> (<a href=\"https://join.slack.com/t/dockovpn/shared_invite/zt-200sz4vdi-w2qCtjlN7YIu~ZQPfph_Ow\" rel=\"nofollow\">registration</a>)</p>\n<h3 dir=\"auto\">Website</h3>\n<p dir=\"auto\"><a href=\"https://dockovpn.io\" rel=\"nofollow\">https://dockovpn.io</a></p>\n<h3 dir=\"auto\">Social media</h3>\n<markdown-accessiblity-table><table role=\"table\">\n<thead>\n<tr>\n<th align=\"center\">Name</th>\n<th align=\"center\">URL</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td align=\"center\">LinkedIn</td>\n<td align=\"center\"><a href=\"https://www.linkedin.com/company/dockovpn\" rel=\"nofollow\">https://www.linkedin.com/company/dockovpn</a></td>\n</tr>\n<tr>\n<td align=\"center\">Facebook</td>\n<td align=\"center\"><a href=\"https://www.facebook.com/dockovpn\" rel=\"nofollow\">https://www.facebook.com/dockovpn</a></td>\n</tr>\n</tbody>\n</table></markdown-accessiblity-table>\n<h3 dir=\"auto\">Repos</h3>\n<markdown-accessiblity-table><table role=\"table\">\n<thead>\n<tr>\n<th align=\"center\">Name</th>\n<th align=\"center\">URL</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td align=\"center\">GitHub</td>\n<td align=\"center\"><a href=\"https://github.com/dockovpn/dockovpn\">https://github.com/dockovpn/dockovpn</a></td>\n</tr>\n<tr>\n<td align=\"center\">Docker Hub</td>\n<td align=\"center\"><a href=\"https://hub.docker.com/r/alekslitvinenk/openvpn\" rel=\"nofollow\">https://hub.docker.com/r/alekslitvinenk/openvpn</a></td>\n</tr>\n</tbody>\n</table></markdown-accessiblity-table>\n<h2 dir=\"auto\">Container properties</h2>\n<p align=\"center\" dir=\"auto\"><a href=\"https://dockovpn.io\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/372489ac85d9b8326500cd88d02ded54fcfb0a4458ffd2b487b359ae468509de/68747470733a2f2f616c656b736c697476696e656e6b2e6769746875622e696f2f646f636b65722d6f70656e76706e2f6173736574732f696d672f636f6e7461696e65722e737667\" width=\"150\" height=\"110\" data-canonical-src=\"https://alekslitvinenk.github.io/docker-openvpn/assets/img/container.svg\" style=\"max-width: 100%; height: auto; max-height: 110px;\"></a></p>\n<h3 dir=\"auto\">Docker Tags</h3>\n<markdown-accessiblity-table><table role=\"table\">\n<thead>\n<tr>\n<th align=\"center\">Tag</th>\n<th align=\"center\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td align=\"center\"><code class=\"notranslate\">latest</code></td>\n<td align=\"center\">This tag is added to every newly built version be that <code class=\"notranslate\">v#.#.#</code> or <code class=\"notranslate\">v#.#.#-regen-dh</code></td>\n</tr>\n<tr>\n<td align=\"center\"><code class=\"notranslate\">v#.#.#</code></td>\n<td align=\"center\">Standard fixed release version, where {1} is <em>major version</em>, {2} - <em>minor</em> and {3} is a <em>patch</em>. For instance, <code class=\"notranslate\">v1.1.0</code></td>\n</tr>\n<tr>\n<td align=\"center\"><code class=\"notranslate\">v#.#.#-regen-dh</code></td>\n<td align=\"center\">Release version with newly generated Deffie Hellman security file. In order to keep security high this version is generated every hour. Tag example - <code class=\"notranslate\">v1.1.0-regen-dh</code></td>\n</tr>\n<tr>\n<td align=\"center\"><code class=\"notranslate\">dev</code></td>\n<td align=\"center\">Development build which contains the most recent changes from the active development branch (master)</td>\n</tr>\n</tbody>\n</table></markdown-accessiblity-table>\n<h3 dir=\"auto\">Environment variables</h3>\n<markdown-accessiblity-table><table role=\"table\">\n<thead>\n<tr>\n<th align=\"center\">Variable</th>\n<th align=\"center\">Description</th>\n<th align=\"center\">Default value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td align=\"center\">NET_ADAPTER</td>\n<td align=\"center\">Network adapter to use on the host machine</td>\n<td align=\"center\">eth0</td>\n</tr>\n<tr>\n<td align=\"center\">HOST_ADDR</td>\n<td align=\"center\">Host address override if the resolved address doesn't work</td>\n<td align=\"center\">localhost</td>\n</tr>\n<tr>\n<td align=\"center\">HOST_TUN_PORT</td>\n<td align=\"center\">Tunnel port to advertise in the client config file</td>\n<td align=\"center\">1194</td>\n</tr>\n<tr>\n<td align=\"center\">HOST_TUN_PROTOCOL</td>\n<td align=\"center\">Tunnel protocol (<code class=\"notranslate\">tcp</code> or <code class=\"notranslate\">udp</code>)</td>\n<td align=\"center\">udp</td>\n</tr>\n<tr>\n<td align=\"center\">HOST_CONF_PORT</td>\n<td align=\"center\">HTTP port on the host machine to download the client config file</td>\n<td align=\"center\">80</td>\n</tr>\n<tr>\n<td align=\"center\">CRL_DAYS</td>\n<td align=\"center\">CRL days until expiration, i.e. invalid for revocation checking</td>\n<td align=\"center\">3650</td>\n</tr>\n</tbody>\n</table></markdown-accessiblity-table>\n<p dir=\"auto\"><strong><g-emoji class=\"g-emoji\" alias=\"warning\">⚠️</g-emoji> Note:</strong> In the provided code snippet we advertise the configuration suitable for the most users. We don't recommend setting custom<br>\nNET_ADAPTER and HOST_ADDR unless you absolutely have to. Now host address is resolved automatically when container starts..<br>\nMore often you'd like to customize HOST_TUN_PORT, HOST_CONF_PORT or HOST_TUN_PROTOCOL. If this is the case, use the snippet below (dont forget to replace <code class=\"notranslate\">&lt;custom port&gt;</code> and <code class=\"notranslate\">&lt;custom protocol&gt;</code>  with your values):</p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"DOCKOVPN_CONFIG_PORT=&lt;custom port&gt;\nDOCKOVPN_TUNNEL_PORT=&lt;custom port&gt;\nDOCKOVPN_TUNNEL_PROTOCOL=&lt;custom protocol&gt;\ndocker run -it --rm --cap-add=NET_ADMIN \\\n-p $DOCKOVPN_TUNNEL_PORT:1194/$DOCKOVPN_TUNNEL_PROTOCOL -p $DOCKOVPN_CONFIG_PORT:8080/tcp \\\n-e HOST_CONF_PORT=&quot;$DOCKOVPN_CONFIG_PORT&quot; \\\n-e HOST_TUN_PORT=&quot;$DOCKOVPN_TUNNEL_PORT&quot; \\\n-e HOST_TUN_PROTOCOL=&quot;$DOCKOVPN_TUNNEL_PROTOCOL&quot; \\\n--name dockovpn alekslitvinenk/openvpn\"><pre class=\"notranslate\">DOCKOVPN_CONFIG_PORT=<span class=\"pl-k\">&lt;</span>custom port<span class=\"pl-k\">&gt;</span>\nDOCKOVPN_TUNNEL_PORT=<span class=\"pl-k\">&lt;</span>custom port<span class=\"pl-k\">&gt;</span>\nDOCKOVPN_TUNNEL_PROTOCOL=<span class=\"pl-k\">&lt;</span>custom protocol<span class=\"pl-k\">&gt;</span>\ndocker run -it --rm --cap-add=NET_ADMIN \\\n-p <span class=\"pl-smi\">$DOCKOVPN_TUNNEL_PORT</span>:1194/<span class=\"pl-smi\">$DOCKOVPN_TUNNEL_PROTOCOL</span> -p <span class=\"pl-smi\">$DOCKOVPN_CONFIG_PORT</span>:8080/tcp \\\n-e HOST_CONF_PORT=<span class=\"pl-s\"><span class=\"pl-pds\">\"</span><span class=\"pl-smi\">$DOCKOVPN_CONFIG_PORT</span><span class=\"pl-pds\">\"</span></span> \\\n-e HOST_TUN_PORT=<span class=\"pl-s\"><span class=\"pl-pds\">\"</span><span class=\"pl-smi\">$DOCKOVPN_TUNNEL_PORT</span><span class=\"pl-pds\">\"</span></span> \\\n-e HOST_TUN_PROTOCOL=<span class=\"pl-s\"><span class=\"pl-pds\">\"</span><span class=\"pl-smi\">$DOCKOVPN_TUNNEL_PROTOCOL</span><span class=\"pl-pds\">\"</span></span> \\\n--name dockovpn alekslitvinenk/openvpn</pre></div>\n<h3 dir=\"auto\">Container options</h3>\n<markdown-accessiblity-table><table role=\"table\">\n<thead>\n<tr>\n<th align=\"center\">Short name</th>\n<th align=\"center\">Long name</th>\n<th align=\"center\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td align=\"center\"><code class=\"notranslate\">-r</code></td>\n<td align=\"center\"><code class=\"notranslate\">--regenerate</code></td>\n<td align=\"center\">Regenerates PKI and DH file</td>\n</tr>\n<tr>\n<td align=\"center\"><code class=\"notranslate\">-n</code></td>\n<td align=\"center\"><code class=\"notranslate\">--noop</code></td>\n<td align=\"center\">Initialise container, but don's start VPN server</td>\n</tr>\n<tr>\n<td align=\"center\"><code class=\"notranslate\">-q</code></td>\n<td align=\"center\"><code class=\"notranslate\">--quit</code></td>\n<td align=\"center\">Quit after container was initialized</td>\n</tr>\n<tr>\n<td align=\"center\"><code class=\"notranslate\">-s</code></td>\n<td align=\"center\"><code class=\"notranslate\">--skip</code></td>\n<td align=\"center\">Skip client generation on first start</td>\n</tr>\n</tbody>\n</table></markdown-accessiblity-table>\n<p dir=\"auto\"><strong><g-emoji class=\"g-emoji\" alias=\"warning\">⚠️</g-emoji> Note:</strong> We strongly recommend always run your container with <code class=\"notranslate\">-r</code> option, even though it will take container a bit longer to start. In future releases we will apply this option by default:</p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"docker run -it --rm --cap-add=NET_ADMIN \\\n-p 1194:1194/udp -p 80:8080/tcp \\\n--name dockovpn alekslitvinenk/openvpn -r\"><pre class=\"notranslate\">docker run -it --rm --cap-add=NET_ADMIN \\\n-p 1194:1194/udp -p 80:8080/tcp \\\n--name dockovpn alekslitvinenk/openvpn -r</pre></div>\n<h3 dir=\"auto\">Container commands</h3>\n<p dir=\"auto\">After container was run using <code class=\"notranslate\">docker run</code> command, it's possible to execute additional commands using <code class=\"notranslate\">docker exec</code> command. For example, <code class=\"notranslate\">docker exec &lt;container id&gt; ./version.sh</code>. See table below to get the full list of supported commands.</p>\n<markdown-accessiblity-table><table role=\"table\">\n<thead>\n<tr>\n<th align=\"center\">Command</th>\n<th align=\"center\">Description</th>\n<th align=\"center\">Parameters</th>\n<th align=\"center\">Example</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td align=\"center\"><code class=\"notranslate\">./version.sh</code></td>\n<td align=\"center\">Outputs full container version, i.e <code class=\"notranslate\">Dockovpn v1.2.0</code></td>\n<td align=\"center\"></td>\n<td align=\"center\"><code class=\"notranslate\">docker exec dockovpn ./version.sh</code></td>\n</tr>\n<tr>\n<td align=\"center\"><code class=\"notranslate\">./genclient.sh</code></td>\n<td align=\"center\">Generates new client configuration</td>\n<td align=\"center\"><code class=\"notranslate\">z</code> — Optional. Puts newly generated client.ovpn file into client.zip archive.<br><br><code class=\"notranslate\">zp paswd</code> — Optional. Puts newly generated client.ovpn file into client.zip archive with password <code class=\"notranslate\">pswd</code> <br><br><code class=\"notranslate\">o</code> — Optional. Prints cert to the output. <br><br><code class=\"notranslate\">oz</code> — Optional. Prints zipped cert to the output. Use with output redirection. <br><br><code class=\"notranslate\">ozp paswd</code> — Optional. Prints encrypted zipped cert to the output. Use with output redirection.  <br><br><code class=\"notranslate\">n profile_name</code> — Optional. Use specified profile_name parameter instead of random id. Prints client.ovpn to the output<br><br><code class=\"notranslate\">np profile_name</code> — Optional. Use specified profile_name parameter instead of random id and protects by password asked by stdin. Password refers to the connection and it will be asked during connection stage. Prints client.ovpn to the output</td>\n<td align=\"center\"><code class=\"notranslate\">docker exec dockovpn ./genclient.sh</code><br><br><code class=\"notranslate\">docker exec dockovpn ./genclient.sh z</code><br><br><code class=\"notranslate\">docker exec dockovpn ./genclient.sh zp 123</code> <br><br><code class=\"notranslate\">docker exec dockovpn ./genclient.sh o &gt; client.ovpn</code><br><br><code class=\"notranslate\">docker exec dockovpn ./genclient.sh oz &gt; client.zip</code> <br><br><code class=\"notranslate\">docker exec dockovpn ./genclient.sh ozp paswd &gt; client.zip</code><br><br><code class=\"notranslate\">docker exec dockovpn ./genclient.sh n profile_name</code><br><br><code class=\"notranslate\">docker exec -ti dockovpn ./genclient.sh np profile_name</code></td>\n</tr>\n<tr>\n<td align=\"center\"><code class=\"notranslate\">./rmclient.sh</code></td>\n<td align=\"center\">Revokes client certificate thus making him/her anable to connect to given Dockovpn server.</td>\n<td align=\"center\">Client Id, i.e <code class=\"notranslate\">vFOoQ3Hngz4H790IpRo6JgKR6cMR3YAp</code></td>\n<td align=\"center\"><code class=\"notranslate\">docker exec dockovpn ./rmclient.sh vFOoQ3Hngz4H790IpRo6JgKR6cMR3YAp</code></td>\n</tr>\n<tr>\n<td align=\"center\"><code class=\"notranslate\">./listconfigs.sh</code></td>\n<td align=\"center\">List all generated available config IDs</td>\n<td align=\"center\"></td>\n<td align=\"center\"><code class=\"notranslate\">docker exec dockovpn ./listconfigs.sh</code></td>\n</tr>\n<tr>\n<td align=\"center\"><code class=\"notranslate\">./getconfig.sh</code></td>\n<td align=\"center\">Return previously generated config by client ID</td>\n<td align=\"center\">Client Id, i.e <code class=\"notranslate\">vFOoQ3Hngz4H790IpRo6JgKR6cMR3YAp</code></td>\n<td align=\"center\"><code class=\"notranslate\">docker exec dockovpn./getconfig.sh vFOoQ3Hngz4H790IpRo6JgKR6cMR3YAp</code></td>\n</tr>\n</tbody>\n</table></markdown-accessiblity-table>\n<p dir=\"auto\"><strong><g-emoji class=\"g-emoji\" alias=\"warning\">⚠️</g-emoji> Note:</strong> If you generated a new client configuration with custom name e.g <code class=\"notranslate\">dockovpn exec ./genclient.sh n customname</code> and then chose to remove this config using <code class=\"notranslate\">dockovpn exec ./rmclient.sh customname</code>, the client certificate is revoked permanently in this server, therefore, you cannot create client configuration with the same name again. Doing so will result in error <code class=\"notranslate\">Sat Oct 28 10:05:17 2023 Client with this id [customname] already exists</code>.</p>\n<h2 dir=\"auto\">📺 Video Guide</h2>\n<p align=\"center\" dir=\"auto\"><a href=\"https://youtu.be/y5Dwakc6hMs\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/4b0f498febb72c9803097ecde7f3bd717b55bf0eb22c7e7393f34ee1fbb0f1eb/68747470733a2f2f616c656b736c697476696e656e6b2e6769746875622e696f2f646f636b65722d6f70656e76706e2f6173736574732f696d672f766964656f2d636f7665722d706c61792e706e67\" data-canonical-src=\"https://alekslitvinenk.github.io/docker-openvpn/assets/img/video-cover-play.png\" style=\"max-width: 100%;\"></a></p><br>\n<h2 dir=\"auto\">🚀 Quick Start</h2>\n<h3 dir=\"auto\">Prerequisites</h3>\n<ol dir=\"auto\">\n<li>Any hardware or vps/vds server running Linux. You should have administrative rights on this machine.</li>\n<li>Docker installation on your server.</li>\n<li>Public ip address assigned to your server.</li>\n</ol>\n<h3 dir=\"auto\">1. Run dockovpn</h3>\n<p dir=\"auto\">Copy &amp; paste the following command to run docker-openvpn:<br></p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"docker run -it --rm --cap-add=NET_ADMIN \\\n-p 1194:1194/udp -p 80:8080/tcp \\\n--name dockovpn alekslitvinenk/openvpn\"><pre class=\"notranslate\">docker run -it --rm --cap-add=NET_ADMIN \\\n-p 1194:1194/udp -p 80:8080/tcp \\\n--name dockovpn alekslitvinenk/openvpn</pre></div>\n<p dir=\"auto\"><strong><g-emoji class=\"g-emoji\" alias=\"warning\">⚠️</g-emoji> Note:</strong> This snippet runs Dockovpn in attached mode, which means if you close your terminal window, container will be stopped.<br>\nTo prevent this from happening, you first need to detach container from ssh session. Type <code class=\"notranslate\">Ctrl+P Ctrl+Q</code>.</p>\n<p dir=\"auto\">If everything went well, you should be able to see the following output in your console:</p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"Sun Jun  9 08:56:11 2019 Initialization Sequence Completed\nSun Jun  9 08:56:12 2019 Client.ovpn file has been generated\nSun Jun  9 08:56:12 2019 Config server started, download your client.ovpn config at http://example.com:8080/\nSun Jun  9 08:56:12 2019 NOTE: After you download you client config, http server will be shut down!\"><pre class=\"notranslate\">Sun Jun  9 08:56:11 2019 Initialization Sequence Completed\nSun Jun  9 08:56:12 2019 Client.ovpn file has been generated\nSun Jun  9 08:56:12 2019 Config server started, download your client.ovpn config at http://example.com:8080/\nSun Jun  9 08:56:12 2019 NOTE: After you download you client config, http server will be shut down<span class=\"pl-k\">!</span></pre></div>\n<h3 dir=\"auto\">2. Get client configuration</h3>\n<p dir=\"auto\">Now, when your dockovpn is up and running you can go to <code class=\"notranslate\">&lt;your_host_public_ip&gt;:8080</code> on your device and download ovpn client configuration.<br>\nAs soon as you have your config file downloaded, you will see the following output in the console:<br></p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"Sun Jun  9 09:01:15 2019 Config http server has been shut down\"><pre class=\"notranslate\">Sun Jun  9 09:01:15 2019 Config http server has been shut down</pre></div>\n<p dir=\"auto\">Import <code class=\"notranslate\">client.ovpn</code> into your favourite openvpn client. In most cases it should be enough to just doubleclick or tap on that file.</p>\n<h3 dir=\"auto\">3. Connect to your docker-openvpn container</h3>\n<p dir=\"auto\">You should be able to see your newly added client configuration in the list of available configurations. Click on it, connection process should initiate and be established within few seconds.</p>\n<p dir=\"auto\">Congratulations, now you're all set and can safely browse the internet.</p>\n<h2 dir=\"auto\">Persisting configuration</h2>\n<p dir=\"auto\">There's a possibility to persist generated files in volume storage. Run docker with</p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"-v openvpn_conf:/opt/Dockovpn_data\"><pre class=\"notranslate\">-v openvpn_conf:/opt/Dockovpn_data</pre></div>\n<h2 dir=\"auto\">Alternative way. Run with docker-compose</h2>\n<p dir=\"auto\">Sometimes it is more convenient to use <a href=\"https://docs.docker.com/compose/\" rel=\"nofollow\">docker-compose</a>.</p>\n<p dir=\"auto\">To run dockvpn with docker-compose run:</p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"docker-compose up -d &amp;&amp; \\\ndocker-compose exec -d dockovpn wget -O /opt/Dockovpn/client.ovpn localhost:8080\"><pre class=\"notranslate\">docker-compose up -d <span class=\"pl-k\">&amp;&amp;</span> \\\ndocker-compose <span class=\"pl-c1\">exec</span> -d dockovpn wget -O /opt/Dockovpn/client.ovpn localhost:8080</pre></div>\n<p dir=\"auto\">After run this command you can find your <code class=\"notranslate\">client.ovpn</code> inside <code class=\"notranslate\">openvpn_conf</code> folder.</p>\n<h2 dir=\"auto\">Other resources</h2>\n<p dir=\"auto\"><a href=\"https://github.com/alekslitvinenk/docker-openvpn/blob/master/PRIVACY_POLICY.md\">Privacy Policy</a> <br>\n<a href=\"https://github.com/alekslitvinenk/docker-openvpn/blob/master/CONTRIBUTING.md\">Contrubition Guidelines</a> <br>\n<a href=\"https://github.com/alekslitvinenk/docker-openvpn/blob/master/CODE_OF_CONDUCT.md\">Code Of Conduct</a> <br>\n<a href=\"https://github.com/alekslitvinenk/docker-openvpn/blob/master/docs/RELEASE_GUIDELINE.md\">Release Guideline</a> <br>\n<a href=\"https://github.com/alekslitvinenk/docker-openvpn/blob/master/LICENSE\">License Agreement</a></p>","updatedAt":"2025-05-21T15:54:57Z","upvoteCount":null,"author":{"login":"eryajf","avatarUrl":"https://avatars.githubusercontent.com/u/33259379?u=e4a4090a38ac2473aaed4ef9945233636776c6c3&v=4","url":"https://github.com/eryajf"},"category":null,"labels":{"edges":[{"node":{"name":"更多","color":"25B472"}},{"node":{"name":"VPN","color":"da3863"}},{"node":{"name":"dockovpn","color":"6fd91f"}}]},"comments":{"edges":[]}}},"pageContext":{"number":124,"previous":{"title":"geek-fun/dockit: 一个用于连接管理 elasticsearch，opensearch 的客户端软件，支持 Mac，Windows，Linux 多平台。","number":123},"next":{"title":"docmost/docmost: 一款开源的协作 Wiki 和文档软件。它是 Confluence 和 Notion 的开源替代品。","number":125}}},
    "staticQueryHashes": ["151096407","2861350382"]}