{"id":3072,"date":"2025-12-18T16:57:39","date_gmt":"2025-12-18T08:57:39","guid":{"rendered":"https:\/\/linuxjk.cn\/?p=3072"},"modified":"2026-04-24T23:47:50","modified_gmt":"2026-04-24T15:47:50","slug":"openvpn%e5%95%86%e4%b8%9a%e7%89%88%e9%83%a8%e7%bd%b2","status":"publish","type":"post","link":"https:\/\/linuxjk.cn\/?p=3072","title":{"rendered":"openvpn\u5546\u4e1a\u7248\u90e8\u7f72+nps\u5185\u7f51\u7a7f\u900f"},"content":{"rendered":"\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_88 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u76ee\u5f55<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2%EF%BC%88%E4%BD%BF%E7%94%A8%E5%AE%98%E6%96%B9%E5%AE%89%E8%A3%85%E8%84%9A%E6%9C%AC%EF%BC%89\" >\u81ea\u52a8\u90e8\u7f72\uff08\u4f7f\u7528\u5b98\u65b9\u5b89\u88c5\u811a\u672c\uff09<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#docker%E9%83%A8%E7%BD%B2%EF%BC%88%E5%AE%98%E6%96%B9%E7%89%88%EF%BC%89\" >docker\u90e8\u7f72\uff08\u5b98\u65b9\u7248\uff09<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#docker%E9%83%A8%E7%BD%B2%EF%BC%88%E7%A0%B4%E8%A7%A3%E7%89%88%E2%80%93%E2%80%932048%E8%BF%9E%E6%8E%A5%E6%95%B0%EF%BC%89\" >docker\u90e8\u7f72\uff08\u7834\u89e3\u7248\u2013\u20132048\u8fde\u63a5\u6570\uff09<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E4%BD%BF%E7%94%A8%E6%B5%81%E7%A8%8B%EF%BC%9A\" >\u4f7f\u7528\u6d41\u7a0b\uff1a<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E7%99%BB%E5%BD%95initlog%E9%A1%B5%E9%9D%A2%E6%8F%90%E7%A4%BA%E7%9A%84%E5%9C%B0%E5%9D%80%EF%BC%9A\" >\u767b\u5f55init.log\u9875\u9762\u63d0\u793a\u7684\u5730\u5740\uff1a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E9%87%8D%E7%BD%AE%E7%AE%A1%E7%90%86%E5%91%98%E5%AF%86%E7%A0%81%EF%BC%9A\" >\u91cd\u7f6e\u7ba1\u7406\u5458\u5bc6\u7801\uff1a<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E9%A1%B5%E9%9D%A2%E6%93%8D%E4%BD%9C%EF%BC%9AUsers%E2%80%93%E2%80%93Edit_User%E2%80%93%E2%80%93Reset_Password\" >\u9875\u9762\u64cd\u4f5c\uff1aUsers\u2013\u2013Edit User\u2013\u2013Reset Password<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%93%8D%E4%BD%9C%EF%BC%9A\" >\u547d\u4ee4\u884c\u64cd\u4f5c\uff1a<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%F0%9F%8C%90_VPN_%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE\" >\ud83c\udf10 VPN \u670d\u52a1\u5668\u914d\u7f6e<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%AD%A5%E9%AA%A4_1_%E9%85%8D%E7%BD%AE%E7%BD%91%E7%BB%9C%E8%AE%BE%E7%BD%AE\" >\u6b65\u9aa4 1: \u914d\u7f6e\u7f51\u7edc\u8bbe\u7f6e<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#11_%E9%85%8D%E7%BD%AE%E4%B8%BB%E6%9C%BA%E5%90%8D%E5%92%8C_IP_%E5%9C%B0%E5%9D%80\" >1.1 \u914d\u7f6e\u4e3b\u673a\u540d\u548c IP \u5730\u5740<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#12_%E9%85%8D%E7%BD%AE_VPN_%E7%BD%91%E6%AE%B5\" >1.2 \u914d\u7f6e VPN \u7f51\u6bb5<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%AD%A5%E9%AA%A43%EF%BC%9A%E5%88%9B%E5%BB%BA_VPN_%E7%94%A8%E6%88%B7\" >\u6b65\u9aa43\uff1a\u521b\u5efa VPN \u7528\u6237<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%96%B9%E6%B3%95_1_Web_%E7%95%8C%E9%9D%A2%E5%88%9B%E5%BB%BA%E7%94%A8%E6%88%B7\" >\u65b9\u6cd5 1: Web \u754c\u9762\u521b\u5efa\u7528\u6237<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%AD%A5%E9%AA%A44%EF%BC%9A%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E9%85%8D%E7%BD%AE\" >\u6b65\u9aa44\uff1a\u8bbf\u95ee\u63a7\u5236\u914d\u7f6e<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%AD%A5%E9%AA%A45%EF%BC%9A%E9%85%8D%E7%BD%AEDNS\" >\u6b65\u9aa45\uff1a\u914d\u7f6eDNS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E7%A6%81%E7%94%A8%E7%94%A8%E6%88%B7%EF%BC%9A%E5%88%A0%E9%99%A4%E5%AF%B9%E5%BA%94%E8%AF%81%E4%B9%A6%E6%88%96%E8%80%85%E9%94%81%E5%AE%9A\" >\u7981\u7528\u7528\u6237\uff1a\u5220\u9664\u5bf9\u5e94\u8bc1\u4e66\u6216\u8005\u9501\u5b9a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%BF%9E%E6%8E%A5%EF%BC%9A%E8%BF%9B%E5%85%A5%E5%AE%A2%E6%88%B7%E7%AB%AFweb%E9%A1%B5%E9%9D%A2%E4%B8%8B%E8%BD%BD%E8%BF%9E%E6%8E%A5%E5%B7%A5%E5%85%B7%EF%BC%9A\" >\u5ba2\u6237\u7aef\u8fde\u63a5\uff1a\u8fdb\u5165\u5ba2\u6237\u7aefweb\u9875\u9762\u4e0b\u8f7d\u8fde\u63a5\u5de5\u5177\uff1a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E5%91%BD%E4%BB%A4%E8%A1%8C%E9%85%8D%E7%BD%AE%E7%94%A8%E6%88%B7%E6%9C%89%E6%95%88%E6%9C%9F\" >\u547d\u4ee4\u884c\u914d\u7f6e\u7528\u6237\u6709\u6548\u671f<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E9%85%8D%E7%BD%AE%E7%94%A8%E6%88%B7%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%9C%89%E6%95%88%E6%9C%9F%E8%84%9A%E6%9C%AC%EF%BC%9A\" >\u914d\u7f6e\u7528\u6237\u914d\u7f6e\u6587\u4ef6\u6709\u6548\u671f\u811a\u672c\uff1a<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E8%BF%9E%E6%8E%A5AD%E5%9F%9F\" >\u8fde\u63a5AD\u57df<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%AD%A5%E9%AA%A41%EF%BC%9A%E7%99%BB%E5%BD%95Web%E7%AE%A1%E7%90%86%E7%95%8C%E9%9D%A2\" >\u6b65\u9aa41\uff1a\u767b\u5f55Web\u7ba1\u7406\u754c\u9762<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%AD%A5%E9%AA%A42%EF%BC%9A%E5%AF%BC%E8%88%AA%E5%88%B0%E8%AE%A4%E8%AF%81%E9%85%8D%E7%BD%AE\" >\u6b65\u9aa42\uff1a\u5bfc\u822a\u5230\u8ba4\u8bc1\u914d\u7f6e<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%AD%A5%E9%AA%A43%EF%BC%9A%E5%90%AF%E7%94%A8LDAP%E8%AE%A4%E8%AF%81\" >\u6b65\u9aa43\uff1a\u542f\u7528LDAP\u8ba4\u8bc1<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%AD%A5%E9%AA%A44%EF%BC%9A%E9%85%8D%E7%BD%AELDAP%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%9E%E6%8E%A5\" >\u6b65\u9aa44\uff1a\u914d\u7f6eLDAP\u670d\u52a1\u5668\u8fde\u63a5<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%AD%A5%E9%AA%A45%EF%BC%9A%E9%85%8D%E7%BD%AE%E7%94%A8%E6%88%B7%E6%90%9C%E7%B4%A2%E5%8F%82%E6%95%B0\" >\u6b65\u9aa45\uff1a\u914d\u7f6e\u7528\u6237\u641c\u7d22\u53c2\u6570<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%AD%A5%E9%AA%A46%EF%BC%9A%E9%85%8D%E7%BD%AEAD%E5%9F%9F%E4%B8%AD%E7%94%A8%E6%88%B7%E7%9A%84%E6%90%9C%E7%B4%A2%E8%8C%83%E5%9B%B4%EF%BC%9A\" >\u6b65\u9aa46\uff1a\u914d\u7f6eAD\u57df\u4e2d\u7528\u6237\u7684\u641c\u7d22\u8303\u56f4\uff1a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%AD%A5%E9%AA%A47%EF%BC%9A%E9%85%8D%E7%BD%AE%E8%AE%A4%E8%AF%81%E9%BB%98%E8%AE%A4%E8%AE%BE%E7%BD%AE\" >\u6b65\u9aa47\uff1a\u914d\u7f6e\u8ba4\u8bc1\u9ed8\u8ba4\u8bbe\u7f6e<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%AD%A5%E9%AA%A48%EF%BC%9A%E9%85%8D%E7%BD%AE%E5%AF%86%E7%A0%81%E9%94%81%E5%AE%9A%E7%AD%96%E7%95%A5%EF%BC%88%E5%8F%AF%E9%80%89%EF%BC%89\" >\u6b65\u9aa48\uff1a\u914d\u7f6e\u5bc6\u7801\u9501\u5b9a\u7b56\u7565\uff08\u53ef\u9009\uff09<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%AD%A5%E9%AA%A49%EF%BC%9A%E5%BA%94%E7%94%A8%E9%85%8D%E7%BD%AE\" >\u6b65\u9aa49\uff1a\u5e94\u7528\u914d\u7f6e<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%AD%A5%E9%AA%A410%EF%BC%9A%E9%AA%8C%E8%AF%81%E9%85%8D%E7%BD%AE\" >\u6b65\u9aa410\uff1a\u9a8c\u8bc1\u914d\u7f6e<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#Web%E9%A1%B5%E9%9D%A2%E9%85%8D%E7%BD%AE%E4%B8%8E%E5%91%BD%E4%BB%A4%E8%A1%8C%E9%85%8D%E7%BD%AE%E7%9A%84%E5%AF%B9%E5%BA%94%E5%85%B3%E7%B3%BB\" >Web\u9875\u9762\u914d\u7f6e\u4e0e\u547d\u4ee4\u884c\u914d\u7f6e\u7684\u5bf9\u5e94\u5173\u7cfb<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#Web%E9%A1%B5%E9%9D%A2%E5%8F%AF%E8%83%BD%E7%BC%BA%E5%A4%B1%E7%9A%84%E9%85%8D%E7%BD%AE%E9%A1%B9\" >Web\u9875\u9762\u53ef\u80fd\u7f3a\u5931\u7684\u914d\u7f6e\u9879<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%95%85%E9%9A%9C%E6%8E%92%E9%99%A4\" >\u6545\u969c\u6392\u9664<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9\" >\u6ce8\u610f\u4e8b\u9879<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E9%85%8D%E7%BD%AE%E7%BB%84%E6%98%A0%E5%B0%84%EF%BC%8C%E5%B0%86AD%E4%B8%AD%E7%9A%84%E7%94%A8%E6%88%B7%E6%B7%BB%E5%8A%A0%E5%88%B0openvpn-as%E4%B8%AD%E5%B9%B6%E8%AE%BE%E7%BD%AE%E7%94%A8%E6%88%B7%E7%BB%84\" >\u914d\u7f6e\u7ec4\u6620\u5c04\uff0c\u5c06AD\u4e2d\u7684\u7528\u6237\u6dfb\u52a0\u5230openvpn-as\u4e2d\u5e76\u8bbe\u7f6e\u7528\u6237\u7ec4<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E4%B8%80%E3%80%81OpenVPN_AS_%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86%E6%9C%BA%E5%88%B6\" >\u4e00\u3001OpenVPN AS \u7528\u6237\u7ba1\u7406\u673a\u5236<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-38\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#1_%E7%94%A8%E6%88%B7%E8%87%AA%E5%8A%A8%E6%B7%BB%E5%8A%A0%E6%9C%BA%E5%88%B6\" >1. \u7528\u6237\u81ea\u52a8\u6dfb\u52a0\u673a\u5236<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-39\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#2_%E7%94%A8%E6%88%B7%E5%8F%AF%E8%A7%81%E6%80%A7\" >2. \u7528\u6237\u53ef\u89c1\u6027<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-40\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E4%B8%8D%E4%BD%BF%E7%94%A8%E7%BB%84%E6%98%A0%E5%B0%84%E5%8A%9F%E8%83%BD%EF%BC%8C%E6%A0%B9%E6%8D%AE%E7%94%A8%E6%88%B7%E5%B1%9E%E6%80%A7%E5%88%86%E9%85%8D%E7%BB%84%EF%BC%88%E5%BE%85%E5%AE%9A%EF%BC%89\" >\u4e0d\u4f7f\u7528\u7ec4\u6620\u5c04\u529f\u80fd\uff0c\u6839\u636e\u7528\u6237\u5c5e\u6027\u5206\u914d\u7ec4\uff08\u5f85\u5b9a\uff09<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-41\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E9%85%8D%E7%BD%AE%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E8%8E%B7%E5%8F%96%E5%85%AC%E7%BD%91ip%EF%BC%9ANPSNPC\" >\u914d\u7f6e\u5185\u7f51\u7a7f\u900f\u83b7\u53d6\u516c\u7f51ip\uff1aNPS\/NPC<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-42\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E5%85%AC%E7%BD%91%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9A%E5%AE%89%E8%A3%85NPS\" >\u516c\u7f51\u4e91\u670d\u52a1\u5668\uff1a\u5b89\u88c5NPS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-43\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%9C%AC%E5%9C%B0%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%85%8D%E7%BD%AE\" >\u672c\u5730\u5ba2\u6237\u7aef\u914d\u7f6e<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-44\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E5%85%AC%E7%BD%91%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9A%E5%AE%89%E8%A3%85NPS-2\" >\u516c\u7f51\u4e91\u670d\u52a1\u5668\uff1a\u5b89\u88c5NPS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-45\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E6%B5%8B%E8%AF%95%E6%88%90%E5%8A%9F%E5%90%8E%EF%BC%9A%E9%85%8D%E7%BD%AE%E4%B8%BA%E6%9C%8D%E5%8A%A1\" >\u6d4b\u8bd5\u6210\u529f\u540e\uff1a\u914d\u7f6e\u4e3a\u670d\u52a1<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-46\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%85%8D%E7%BD%AE%E5%92%8C%E4%BD%BF%E7%94%A8\" >\u5ba2\u6237\u7aef\u914d\u7f6e\u548c\u4f7f\u7528<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-47\" href=\"https:\/\/linuxjk.cn\/?p=3072\/#%E4%B8%80%E5%A5%97%E6%9C%80%E5%B0%8F%E9%AA%8C%E8%AF%81%E5%91%BD%E4%BB%A4\" >\u4e00\u5957\u6700\u5c0f\u9a8c\u8bc1\u547d\u4ee4<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2%EF%BC%88%E4%BD%BF%E7%94%A8%E5%AE%98%E6%96%B9%E5%AE%89%E8%A3%85%E8%84%9A%E6%9C%AC%EF%BC%89\"><\/span>\u81ea\u52a8\u90e8\u7f72\uff08\u4f7f\u7528\u5b98\u65b9\u5b89\u88c5\u811a\u672c\uff09<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>bash &lt;(curl -fsS https:\/\/packages.openvpn.net\/as\/install.sh) --yes<\/code><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20251218165316083.png\" alt=\"typora20251205132313168\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"docker%E9%83%A8%E7%BD%B2%EF%BC%88%E5%AE%98%E6%96%B9%E7%89%88%EF%BC%89\"><\/span>docker\u90e8\u7f72\uff08\u5b98\u65b9\u7248\uff09<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">docker run -d --name=openvpn-as \\<br>--restart=always \\<br>-v \/data\/openvpn-as\/config:\/config \\<br>-e INTERFACE=ens192 -e PGID=1001 -e PUID=1001 -e TZ=Asia\/Shanghai \\<br>-d -p 1194:1194\/udp -p 443:443\/tcp -p 943:943\/tcp \\<br>--net=host --privileged  \\<br>openvpn\/openvpn-as<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">-p 1194:1194\/udp -p 443:443\/tcp -p 943:943\/tcp\u8fd9\u90e8\u5206\u4e5f\u53ef\u4ee5\u4e0d\u52a0\u76f4\u63a5\u9ed8\u8ba4\u3002\u6267\u884c\u540e\u8981\u8fc7\u4e00\u4f1a\u9700\u8981\u4e0b\u8f7d\u955c\u50cf\u548c\u521d\u59cb\u5316\u670d\u52a1\u3002\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u770b\u65e5\u5fd7\u662f\u5426\u5b8c\u6210<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">docker logs -f openvpn-as<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b8c\u6210\u540e\u5c31\u53ef\u4ee5\u901a\u8fc7\uff1a<a href=\"https:\/\/ip:943(\/\">https:\/\/ip:943(<\/a><strong>\u8fd9\u91cc\u4f7f\u7528\u7684\u662fhttps\u5730\u5740<\/strong>)\u8fdb\u884c\u8bbf\u95ee\uff0c\u9ed8\u8ba4\u7528\u6237\u540d\u3001\u5bc6\u7801\uff1aadmin\/password\u3002\u8fdb\u5165\u540e\u5c31\u53ef\u4ee5\u4e0b\u8f7d\u5ba2\u6237\u7aef\u914d\u7f6e\u6587\u4ef6\u4e86\uff0c\u5c31\u53ef\u4ee5\u901a\u8fc7\u5ba2\u6237\u7aef\u8fdb\u884c\u8fde\u63a5\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"docker%E9%83%A8%E7%BD%B2%EF%BC%88%E7%A0%B4%E8%A7%A3%E7%89%88%E2%80%93%E2%80%932048%E8%BF%9E%E6%8E%A5%E6%95%B0%EF%BC%89\"><\/span>docker\u90e8\u7f72\uff08\u7834\u89e3\u7248\u2013\u20132048\u8fde\u63a5\u6570\uff09<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u53c2\u8003\u8d44\u6599\uff1a\u539f\u6587\uff1a<a href=\"https:\/\/oskr.cn\/archives\/openvpnaccessserver294po-jie-ren-shu-xian-zhi\">OpenVPN Access Server 2.13.1 \u7834\u89e3\u4eba\u6570\u9650\u5236(\u5df2\u66f4\u65b0\u5230\u6700\u65b0\u7248)-\u4e2a\u4eba\u8ba1\u7b97\u673a\u6280\u672f\u77e5\u8bc6\u8bb0\u5f55<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">github:<a href=\"https:\/\/github.com\/bigQY\/openvpn-as\">bigQY\/openvpn-as: OpenVPN-Access Server with 2048 licenses<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>docker-compose.yml<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">version: \"3.8\"<br>services:<br>  openvpn-as:<br> &nbsp;  build:<br> &nbsp; &nbsp;  context: .<br> &nbsp; &nbsp;  dockerfile: Dockerfile<br> &nbsp;  container_name: openvpn-as<br> &nbsp;  network_mode: host<br> &nbsp;  privileged: true<br> &nbsp;  devices:<br> &nbsp; &nbsp;  - \/dev\/net\/tun:\/dev\/net\/tun<br> &nbsp;  cap_add:<br> &nbsp; &nbsp;  - NET_ADMIN<br> &nbsp; &nbsp;  - MKNOD<br> &nbsp;  volumes:<br> &nbsp; &nbsp;  - .\/openvpn-data:\/openvpn<br> &nbsp;  environment:<br> &nbsp; &nbsp;  - INTERFACE=ens18<br> &nbsp;  restart: unless-stopped<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Dockerfile<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">FROM openvpn\/openvpn-as<br>\u200b<br>COPY uprop.py \/tmp\/uprop.py<br>COPY process_egg.sh \/tmp\/process_egg.sh<br>\u200b<br>RUN chmod +x \/tmp\/process_egg.sh &amp;&amp; \\<br> &nbsp;  \/tmp\/process_egg.sh &amp;&amp; \\<br> &nbsp; &nbsp;rm -rf \/tmp\/pyovpn \/tmp\/EGG-INFO \/tmp\/common \/tmp\/uprop.py \/tmp\/process_egg.sh<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u5bb9\u5668\u4e2d\u5904\u7406python\u6587\u4ef6\u7684shell\u811a\u672c<code>process_egg.sh<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#!\/bin\/bash<br>set -e<br>\u200b<br>echo \"\ud83d\udd27 \u5f00\u59cb\u5904\u7406 egg \u6587\u4ef6...\"<br>\u200b<br># \u590d\u5236egg\u6587\u4ef6\u5230\u4e34\u65f6\u76ee\u5f55<br>cp \/usr\/local\/openvpn_as\/lib\/python\/pyovpn-2.0-py3.12.egg \/tmp\/<br>cd \/tmp<br>\u200b<br># \u89e3\u538b<br>python3 -m zipfile -e pyovpn-2.0-py3.12.egg .<br>\u200b<br># \u5907\u4efd\u539f\u6587\u4ef6<br>mv pyovpn\/lic\/uprop.pyc pyovpn\/lic\/uprop2.pyc<br>\u200b<br># \u590d\u5236\u65b0\u6587\u4ef6<br>cp \/tmp\/uprop.py pyovpn\/lic\/<br>\u200b<br># \u7f16\u8bd1<br>python3 -O -m compileall pyovpn\/lic\/uprop.py<br>mv pyovpn\/lic\/__pycache__\/uprop.*.pyc pyovpn\/lic\/uprop.pyc<br>\u200b<br># \u91cd\u65b0\u6253\u5305<br>python3 -m zipfile -c pyovpn-2.0-py3.12.egg pyovpn EGG-INFO common<br>\u200b<br># \u79fb\u52a8\u56de\u539f\u4f4d\u7f6e<br>mv pyovpn-2.0-py3.12.egg \/usr\/local\/openvpn_as\/lib\/python\/<br>\u200b<br>echo \"\u2705 \u5904\u7406\u5b8c\u6210!\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u7834\u89e3\u5173\u952e\uff1a<code>uprop.py<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">from pyovpn.lic import uprop2<br>old_figure = None<br> <br>def new_figure(self, licdict):<br> &nbsp; &nbsp; &nbsp;ret = old_figure(self, licdict)<br> &nbsp; &nbsp; &nbsp;ret['concurrent_connections'] = 2048<br> &nbsp; &nbsp; &nbsp;return ret<br> <br>for x in dir(uprop2):<br> &nbsp; &nbsp; &nbsp;if x[:2] == '__':<br> &nbsp; &nbsp; &nbsp; &nbsp; continue<br> &nbsp; &nbsp; &nbsp;if x == 'UsageProperties':<br> &nbsp; &nbsp; &nbsp; &nbsp; exec('old_figure = uprop2.UsageProperties.figure')<br> &nbsp; &nbsp; &nbsp; &nbsp; exec('uprop2.UsageProperties.figure = new_figure')<br> &nbsp; &nbsp; &nbsp;exec('%s = uprop2.%s' % (x, x))<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">#!\/bin\/bash<br># \ud83d\udd27 \u5b8c\u6574\u7684OpenVPN-AS\u914d\u7f6e\u811a\u672c<br>\u200b<br>docker exec -it openvpn-as bash -c \"<br># ========== \u57fa\u7840\u7f51\u7edc\u914d\u7f6e ==========<br>echo '=== \u914d\u7f6e\u7f51\u7edc\u5730\u5740\u6c60 ==='<br>\u200b<br># \u52a8\u6001\u5ba2\u6237\u7aef\u5730\u5740\u6c60<br>\/usr\/local\/openvpn_as\/scripts\/sacli --key 'vpn.daemon.0.client.network' --value '10.8.1.0' ConfigPut<br>\/usr\/local\/openvpn_as\/scripts\/sacli --key 'vpn.daemon.0.client.netmask_bits' --value '24' ConfigPut<br>\u200b<br># \u9759\u6001IP\u5730\u5740\u6c60<br>\/usr\/local\/openvpn_as\/scripts\/sacli --key 'vpn.server.static.0.network' --value '10.8.2.0' ConfigPut<br>\/usr\/local\/openvpn_as\/scripts\/sacli --key 'vpn.server.static.0.netmask_bits' --value '24' ConfigPut<br>\u200b<br># \u9ed8\u8ba4\u7ec4\u5730\u5740\u6c60<br>\/usr\/local\/openvpn_as\/scripts\/sacli --key 'vpn.server.group_pool.0' --value '10.8.3.0\/24' ConfigPut<br>\u200b<br># ========== \u7aef\u53e3\u914d\u7f6e ==========<br>echo '=== \u914d\u7f6e\u76d1\u542c\u7aef\u53e3 ==='<br>\u200b<br># Web\u754c\u9762\u7aef\u53e3<br>\/usr\/local\/openvpn_as\/scripts\/sacli --key 'cs.https.port' --value '443' ConfigPut<br>\/usr\/local\/openvpn_as\/scripts\/sacli --key 'admin_ui.https.port' --value '943' ConfigPut<br>\u200b<br># VPN\u76d1\u542c\u7aef\u53e3\u914d\u7f6e\uff08\u4e3b\u8981\u7684\uff09<br>\/usr\/local\/openvpn_as\/scripts\/sacli --key 'vpn.daemon.0.listen.port' --value '1194' ConfigPut<br>\/usr\/local\/openvpn_as\/scripts\/sacli --key 'vpn.daemon.0.listen.ip_address' --value 'all' ConfigPut<br>\u200b<br>\u200b<br># ========== \u8bbf\u95ee\u63a7\u5236\u914d\u7f6e ==========<br>echo '=== \u914d\u7f6e\u8bbf\u95ee\u63a7\u5236 ==='<br>\u200b<br># \u7981\u7528\u91cd\u8def\u7531\u7f51\u5173\uff08\u4e0d\u5f3a\u5236\u6240\u6709\u6d41\u91cf\u8d70VPN\uff09<br>\/usr\/local\/openvpn_as\/scripts\/sacli --key 'vpn.server.routing.reroute_gw' --value 'false' ConfigPut<br>\/usr\/local\/openvpn_as\/scripts\/sacli --key 'vpn.client.routing.reroute_gw' --value 'false' ConfigPut<br>\u200b<br># \ud83d\udd11 DNS\u914d\u7f6e\uff1a\u8bbe\u7f6eDNS\u670d\u52a1\u5668<br>\/usr\/local\/openvpn_as\/scripts\/sacli --key 'vpn.server.dhcp_option.dns.0' --value '192.168.99.254' ConfigPut<br>\u200b<br># \u8bbe\u7f6e\u9ed8\u8ba4\u62d2\u7edd\u79c1\u6709\u7f51\u7edc\u8bbf\u95ee<br>\/usr\/local\/openvpn_as\/scripts\/sacli --key 'vpn.server.routing.private_access' --value 'no' ConfigPut<br>\u200b<br># \u79fb\u9664\u5168\u5c40\u79c1\u6709\u7f51\u7edc\u8def\u7531<br>\/usr\/local\/openvpn_as\/scripts\/sacli --key 'vpn.server.routing.private_network.0' ConfigDel || true<br>\u200b<br>\u200b<br># ========== \u5e94\u7528\u914d\u7f6e ==========<br>echo '=== \u91cd\u542f\u670d\u52a1\u5e94\u7528\u914d\u7f6e ==='<br>\/usr\/local\/openvpn_as\/scripts\/sacli stop<br>sleep 10<br>\/usr\/local\/openvpn_as\/scripts\/sacli start<br>\u200b<br>echo '=== \u914d\u7f6e\u5b8c\u6210 ==='<br>\"<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"># \u9a8c\u8bc1\u9ed8\u8ba4\u62d2\u7edd\u914d\u7f6e<br>echo \"=== \u9a8c\u8bc1\u9ed8\u8ba4\u62d2\u7edd\u7b56\u7565\u914d\u7f6e ===\"<br>docker exec openvpn-as \/usr\/local\/openvpn_as\/scripts\/sacli ConfigQuery | grep -E \"(routing|dhcp|private_access)\"<br>\u200b<br># \u68c0\u67e5\u662f\u5426\u6210\u529f\u79fb\u9664\u5168\u5c40\u8def\u7531<br>echo -e \"\\n=== \u68c0\u67e5\u79c1\u6709\u7f51\u7edc\u8def\u7531\uff08\u5e94\u8be5\u4e3a\u7a7a\uff09 ===\"<br>docker exec openvpn-as \/usr\/local\/openvpn_as\/scripts\/sacli ConfigQuery | grep \"private_network\" || echo \"\u2705 \u5df2\u6210\u529f\u79fb\u9664\u5168\u5c40\u79c1\u6709\u7f51\u7edc\u8def\u7531\"<br>\u200b<br>\u200b<br>#\u9a8c\u8bc1\u9ed8\u8ba4\u8def\u7531\u7b56\u7565<br>docker exec openvpn-as bash -c \"<br>echo '=== \u8def\u7531\u5c42\u914d\u7f6e\u9a8c\u8bc1 ==='<br>echo '1. \u68c0\u67e5\u79c1\u6709\u7f51\u7edc\u8def\u7531\uff08\u5e94\u8be5\u4e3a\u7a7a\u6216\u65e099\u7f51\u6bb5\uff09:'<br>\/usr\/local\/openvpn_as\/scripts\/sacli ConfigQuery | grep -E 'vpn.server.routing.private_network' || echo '\u2705 \u65e0\u79c1\u6709\u7f51\u7edc\u8def\u7531\u914d\u7f6e'<br>\u200b<br>echo -e '\\n2. \u68c0\u67e5\u79c1\u6709\u7f51\u7edc\u8bbf\u95ee\u6743\u9650:'<br>\/usr\/local\/openvpn_as\/scripts\/sacli ConfigQuery | grep -E 'private_access|gateway_access'<br>\u200b<br>echo -e '\\n3. \u68c0\u67e5\u91cd\u8def\u7531\u914d\u7f6e:(\u5e94\u8be5\u4e3a\u4e24\u4e2afalse)'<br>\/usr\/local\/openvpn_as\/scripts\/sacli ConfigQuery | grep 'reroute_gw'<br>\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0a\u811a\u672c\u7684\u7aef\u53e3\u65b9\u6848\u4e3a\uff1a943\u4f5c\u4e3aweb\u9875\u9762\u7ba1\u7406\u7aef\u53e3\uff1b443\u4f5c\u4e3a\u5ba2\u6237\u7aef\u8bbf\u95ee\u7684\u9875\u9762\uff1b1194\u4f5c\u4e3avpn\u8fde\u63a5\u7aef\u53e3\uff0c\u4f46\u662fopenvpn-as\u670d\u52a1\u7aef\u4e0d\u76d1\u542c\u8fd9\u4e2a\u7aef\u53e3\uff0c\u56e0\u4e3a\u6709\u5185\u7f6e\u7684\u7aef\u53e3\u8f6c\u53d1\uff0c\u5c061194\u7aef\u53e3\u6d41\u91cf\u8f6c\u53d1\u5230914\u8fdb\u884c\u5904\u7406\u8fde\u63a5<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u4e92\u8054\u7f51<br> &nbsp;  \u2193<br>\u516c\u7f51\u670d\u52a1\u5668 (NPS Server)<br> &nbsp;  \u251c\u2500 443\/TCP  \u2192 \u5185\u7f51\u5bb9\u5668:443  (Web\u754c\u9762)<br> &nbsp;  \u251c\u2500 943\/TCP  \u2192 \u5185\u7f51\u5bb9\u5668:943  (Admin\u754c\u9762) &nbsp;<br> &nbsp;  \u251c\u2500 1194\/TCP \u2192 \u5185\u7f51\u5bb9\u5668:914  (VPN TCP)<br> &nbsp;  \u251c\u2500 1194\/UDP \u2192 \u5185\u7f51\u5bb9\u5668:916  (VPN UDP - \u4e3b\u8981)<br> &nbsp;  \u2514\u2500 1195\/UDP \u2192 \u5185\u7f51\u5bb9\u5668:917  (VPN UDP - \u5907\u7528)<br> &nbsp;  \u2193 NPS\u96a7\u9053<br>\u5185\u7f51OpenVPN\u5bb9\u5668<br> &nbsp;  \u251c\u2500 443: Web\u670d\u52a1 (python3)<br> &nbsp;  \u251c\u2500 943: Admin\u754c\u9762 (python3)<br> &nbsp;  \u251c\u2500 914: OpenVPN TCP<br> &nbsp;  \u251c\u2500 915: OpenVPN TCP\u5907\u7528<br> &nbsp;  \u251c\u2500 916: OpenVPN UDP &nbsp;<br> &nbsp;  \u2514\u2500 917: OpenVPN UDP\u5907\u7528<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E4%BD%BF%E7%94%A8%E6%B5%81%E7%A8%8B%EF%BC%9A\"><\/span>\u4f7f\u7528\u6d41\u7a0b\uff1a<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u811a\u672c\u8dd1\u5b8c\u540e\u81ea\u52a8\u5b89\u88c5\u542f\u52a8\u670d\u52a1\uff0c\u9875\u9762\u663e\u793aSuccess\uff0cweb\u7ba1\u7406\u9875\u9762\u7684\u5730\u5740\u548c\u5bc6\u7801\u5728\uff1a<code>\/usr\/local\/openvpn_as\/init.log<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6216\u8005\u76f4\u63a5\u547d\u4ee4\u884c\u91cd\u7f6e\u5bc6\u7801\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#docker\u90e8\u7f72\u9700\u8981\u8fdb\u5165\u5bb9\u5668<br>#docker compose exec -it openvpn-as bash<br>\/usr\/local\/openvpn_as\/scripts\/sacli --user openvpn --new_pass 'YourNewPassword123!' SetLocalPassword<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E7%99%BB%E5%BD%95initlog%E9%A1%B5%E9%9D%A2%E6%8F%90%E7%A4%BA%E7%9A%84%E5%9C%B0%E5%9D%80%EF%BC%9A\"><\/span>\u767b\u5f55init.log\u9875\u9762\u63d0\u793a\u7684\u5730\u5740\uff1a<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20251205132611746.png\" alt=\"image-20251205132611682\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E9%87%8D%E7%BD%AE%E7%AE%A1%E7%90%86%E5%91%98%E5%AF%86%E7%A0%81%EF%BC%9A\"><\/span>\u91cd\u7f6e\u7ba1\u7406\u5458\u5bc6\u7801\uff1a<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E9%A1%B5%E9%9D%A2%E6%93%8D%E4%BD%9C%EF%BC%9AUsers%E2%80%93%E2%80%93Edit_User%E2%80%93%E2%80%93Reset_Password\"><\/span><strong>\u9875\u9762\u64cd\u4f5c\uff1aUsers\u2013\u2013Edit User\u2013\u2013Reset Password<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20251205132741014.png\" alt=\"image-20251205132740949\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20251205132928659.png\" alt=\"image-20251205132928556\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20251205133009936.png\" alt=\"image-20251205133009899\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%93%8D%E4%BD%9C%EF%BC%9A\"><\/span>\u547d\u4ee4\u884c\u64cd\u4f5c\uff1a<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\"># \u4fee\u6539 openvpn \u7528\u6237\u5bc6\u7801<br> \/usr\/local\/openvpn_as\/scripts\/sacli --user openvpn --new_pass 'YourNewPassword123!' SetLocalPassword<br>\/usr\/local\/openvpn_as\/scripts\/sacli --user openvpn --new_pass 'Suit@2025' SetLocalPassword<br># \u9a8c\u8bc1\u5bc6\u7801\u4fee\u6539\u6210\u529f\uff08\u67e5\u770b\u7528\u6237\u5c5e\u6027\uff09<br> \/usr\/local\/openvpn_as\/scripts\/sacli --user openvpn UserPropGet<br># \u521b\u5efa\u7528\u6237\u5e76\u8bbe\u7f6e\u5bc6\u7801<br> \/usr\/local\/openvpn_as\/scripts\/sacli --user testuser --new_pass 'TestPassword123!' SetLocalPassword<br>\/usr\/local\/openvpn_as\/scripts\/sacli --user testuser1 --new_pass 'Suit@2025' SetLocalPassword<br># \u6388\u4e88 VPN \u8bbf\u95ee\u6743\u9650<br> \/usr\/local\/openvpn_as\/scripts\/sacli --user testuser --key \"prop_autologin\" --value \"true\" UserPropPut<br>\u200b<br># \u67e5\u770b\u7528\u6237\u5217\u8868<br> \/usr\/local\/openvpn_as\/scripts\/sacli UserPropGet<br># \u4fee\u6539\u7528\u6237\u5bc6\u7801<br> \/usr\/local\/openvpn_as\/scripts\/sacli --user testuser --new_pass 'NewPassword456!' SetLocalPassword<br># \u5220\u9664\u7528\u6237\u7684\u672c\u5730\u5bc6\u7801<br> \/usr\/local\/openvpn_as\/scripts\/sacli --user testuser RemoveLocalPassword<br>\u200b<br># \u5220\u9664\u6574\u4e2a\u7528\u6237\u914d\u7f6e<br> \/usr\/local\/openvpn_as\/scripts\/sacli --user testuser UserPropDelAll<br>\u200b<br>#\u5e38\u7528\u7684 sacli \u547d\u4ee4\u901f\u67e5<br># \u67e5\u770b\u6240\u6709\u7528\u6237<br> \/usr\/local\/openvpn_as\/scripts\/sacli UserPropGet<br># \u67e5\u770b\u7279\u5b9a\u7528\u6237\u4fe1\u606f<br> \/usr\/local\/openvpn_as\/scripts\/sacli --user openvpn UserPropGet<br># \u67e5\u770b\u5f53\u524d VPN \u8fde\u63a5\u72b6\u6001<br> \/usr\/local\/openvpn_as\/scripts\/sacli VPNStatus<br># \u67e5\u770b VPN \u6458\u8981\u4fe1\u606f<br> \/usr\/local\/openvpn_as\/scripts\/sacli VPNSummary<br># \u67e5\u770b\u670d\u52a1\u72b6\u6001<br> \/usr\/local\/openvpn_as\/scripts\/sacli Status<br># \u67e5\u770b\u7248\u672c\u4fe1\u606f<br> \/usr\/local\/openvpn_as\/scripts\/sacli Version<br># \u67e5\u770b\u914d\u7f6e\u4fe1\u606f<br> \/usr\/local\/openvpn_as\/scripts\/sacli ConfigQuery<br># \u91cd\u542f\u670d\u52a1<br> \/usr\/local\/openvpn_as\/scripts\/sacli Start<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20251205133542907.png\" alt=\"image-20251205133542870\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%F0%9F%8C%90_VPN_%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE\"><\/span>\ud83c\udf10 VPN \u670d\u52a1\u5668\u914d\u7f6e<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%AD%A5%E9%AA%A4_1_%E9%85%8D%E7%BD%AE%E7%BD%91%E7%BB%9C%E8%AE%BE%E7%BD%AE\"><\/span>\u6b65\u9aa4 1: \u914d\u7f6e\u7f51\u7edc\u8bbe\u7f6e<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u70b9\u51fb\u5de6\u4fa7\u83dc\u5355 <strong>VPN Server<\/strong> \u2192 <strong>Network Settings<\/strong><\/p>\n\n\n\n<h5 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"11_%E9%85%8D%E7%BD%AE%E4%B8%BB%E6%9C%BA%E5%90%8D%E5%92%8C_IP_%E5%9C%B0%E5%9D%80\"><\/span>1.1 \u914d\u7f6e\u4e3b\u673a\u540d\u548c IP \u5730\u5740<span class=\"ez-toc-section-end\"><\/span><\/h5>\n\n\n\n<pre class=\"wp-block-preformatted\">Hostname or IP Address:<br>- \u8f93\u5165: 114.55.148.180\uff08\u60a8\u7684\u670d\u52a1\u5668\u516c\u7f51 IP \u6216\u57df\u540d\uff09<br>- \u8fd9\u662f\u5ba2\u6237\u7aef\u8fde\u63a5\u65f6\u4f7f\u7528\u7684\u5730\u5740<br>\u200b<br>Interface and IP Address:<br>- Protocol: All interfaces (UDP, TCP)<br>- Port: 1194\uff08\u9ed8\u8ba4\uff09\u6216\u81ea\u5b9a\u4e49\u7aef\u53e3<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260206135043722.png\" alt=\"image-20260206135043573\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u9875\u9762\u63d0\u793a\uff1aPort 1194 also redirects to the admin and client web servers. You can configure this in the <a href=\"https:\/\/10.0.0.188:943\/admin\/web-services\/admin-web-server\">Web Services.<\/a>\uff1a<strong>\u8bf4\u660e\u7528\u4e8evpn\u8fde\u63a5\u7684\u5b88\u62a4\u8fdb\u7a0b\u76841194\u7aef\u53e3\u4e5f\u4f1a\u88ab\u91cd\u5b9a\u5411\u5230web\u9875\u9762<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260206135235636.png\" alt=\"image-20260206135235514\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5ba2\u6237\u7aefweb\u9875\u9762\u548c\u7ba1\u7406\u7aef\u4f7f\u7528\u4e0d\u540c\u7684\u7aef\u53e3\uff1a\u7ba1\u7406\u7aef943\uff0c\u5ba2\u6237\u7aef443<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260206135340523.png\" alt=\"image-20260206135340408\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260206135413071.png\" alt=\"image-20260206135412921\"\/><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"12_%E9%85%8D%E7%BD%AE_VPN_%E7%BD%91%E6%AE%B5\"><\/span>1.2 \u914d\u7f6e VPN \u7f51\u6bb5<span class=\"ez-toc-section-end\"><\/span><\/h5>\n\n\n\n<pre class=\"wp-block-preformatted\">Dynamic IP Address Network:<br>- \u8f93\u5165: 10.8.1.0\/24<br>- \u8fd9\u662f\u5206\u914d\u7ed9 VPN \u5ba2\u6237\u7aef\u7684 IP \u5730\u5740\u6c60<br>\u200b<br>Static IP Address Network:<br>- \u8f93\u5165: 10.8.2.0\/24<br>- \u7528\u4e8e\u9759\u6001 IP \u5206\u914d\uff08\u53ef\u9009\uff09<br>\u200b<br># \u9ed8\u8ba4\u7ec4\u5730\u5740\u6c60<br>- \u8f93\u5165: 10.8.3.0\/24<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260206131852192.png\" alt=\"image-20260206131845036\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%AD%A5%E9%AA%A43%EF%BC%9A%E5%88%9B%E5%BB%BA_VPN_%E7%94%A8%E6%88%B7\"><\/span>\u6b65\u9aa43\uff1a\u521b\u5efa VPN \u7528\u6237<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%96%B9%E6%B3%95_1_Web_%E7%95%8C%E9%9D%A2%E5%88%9B%E5%BB%BA%E7%94%A8%E6%88%B7\"><\/span>\u65b9\u6cd5 1: Web \u754c\u9762\u521b\u5efa\u7528\u6237<span class=\"ez-toc-section-end\"><\/span><\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u70b9\u51fb\u5de6\u4fa7 <strong>Users<\/strong> \u2192 <strong>Add New User<\/strong><\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20251205135221998.png\" alt=\"image-20251205135221931\"\/><\/figure>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u5728\u5e95\u90e8\u8f93\u5165\u7528\u6237\u540d\uff0c\u70b9\u51fb <strong>Save<\/strong><\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20251205135255101.png\" alt=\"image-20251205135255067\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20251205135135503.png\" alt=\"image-20251205135135405\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%AD%A5%E9%AA%A44%EF%BC%9A%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E9%85%8D%E7%BD%AE\"><\/span>\u6b65\u9aa44\uff1a\u8bbf\u95ee\u63a7\u5236\u914d\u7f6e<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20251205135455089.png\" alt=\"image-20251205135454994\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u914d\u7f6e\u5141\u8bb8\u7528\u6237\/\u7528\u6237\u7ec4\u8bbf\u95ee\u7684\u7f51\u6bb5<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260206131922214.png\" alt=\"image-20260206131922097\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%AD%A5%E9%AA%A45%EF%BC%9A%E9%85%8D%E7%BD%AEDNS\"><\/span>\u6b65\u9aa45\uff1a\u914d\u7f6eDNS<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260206150103925.png\" alt=\"image-20260206150103786\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E7%A6%81%E7%94%A8%E7%94%A8%E6%88%B7%EF%BC%9A%E5%88%A0%E9%99%A4%E5%AF%B9%E5%BA%94%E8%AF%81%E4%B9%A6%E6%88%96%E8%80%85%E9%94%81%E5%AE%9A\"><\/span>\u7981\u7528\u7528\u6237\uff1a\u5220\u9664\u5bf9\u5e94\u8bc1\u4e66\u6216\u8005\u9501\u5b9a<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260206152459844.png\" alt=\"image-20260206152459754\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260206152532823.png\" alt=\"image-20260206152532721\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%BF%9E%E6%8E%A5%EF%BC%9A%E8%BF%9B%E5%85%A5%E5%AE%A2%E6%88%B7%E7%AB%AFweb%E9%A1%B5%E9%9D%A2%E4%B8%8B%E8%BD%BD%E8%BF%9E%E6%8E%A5%E5%B7%A5%E5%85%B7%EF%BC%9A\"><\/span>\u5ba2\u6237\u7aef\u8fde\u63a5\uff1a\u8fdb\u5165\u5ba2\u6237\u7aefweb\u9875\u9762\u4e0b\u8f7d\u8fde\u63a5\u5de5\u5177\uff1a<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20251205141647091.png\" alt=\"image-20251205141647025\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u8fd0\u884c\u5ba2\u6237\u7aef\u5de5\u5177\u8f93\u5165\u5bc6\u7801\u5373\u53ef\u8fde\u63a5\uff1a<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20251231173046861.png\" alt=\"image-20251231173046814\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%91%BD%E4%BB%A4%E8%A1%8C%E9%85%8D%E7%BD%AE%E7%94%A8%E6%88%B7%E6%9C%89%E6%95%88%E6%9C%9F\"><\/span>\u547d\u4ee4\u884c\u914d\u7f6e\u7528\u6237\u6709\u6548\u671f<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">#\u914d\u7f6e\u5168\u5c40CA\u8bc1\u4e66\u6709\u6548\u671f10\u5e74\uff1a<br># \/usr\/local\/openvpn_as\/scripts\/sacli ShowCAs<br>                    Sn Type         Common Name          ClientCerts Valid from   Valid Until      KeyAlg Signing CA                    <br>            1770600802 Current CA   OpenVPN CA                     1 2026-02-08   2026-05-10      rsa2048 -                             <br># \/usr\/local\/openvpn_as\/scripts\/sacli --exp 3650 Init<br># \/usr\/local\/openvpn_as\/scripts\/sacli Reset<br># \/usr\/local\/openvpn_as\/scripts\/sacli ShowCAs<br>                    Sn Type         Common Name          ClientCerts Valid from   Valid Until      KeyAlg Signing CA                    <br>            1770600956 Current CA   OpenVPN CA                     0 2026-02-08   2036-02-07      rsa2048 -                     <br>#\u6b65\u9aa41:\u8bbe\u7f6e\u5168\u5c40\u8bc1\u4e66\u6709\u6548\u671f\u4e3a90\u5929\uff08web\u9875\u9762\u751f\u6210\u7684\u8bc1\u4e66\u6709\u6548\u671f90\u5929\uff09<br>\/usr\/local\/openvpn_as\/scripts\/sa --client_certificate_lifetime=90 setpkiconfig<br>#\u68c0\u67e5\u8bbe\u7f6e<br>\/usr\/local\/openvpn_as\/scripts\/sa showpkiconfig<br><br>#\u8bbe\u7f6e\u5355\u72ec\u7528\u6237\u914d\u7f6e\u6587\u4ef6\u6709\u6548\u671f\uff1a<br>\/usr\/local\/openvpn_as\/scripts\/sacli --user testuser3 --exp 180 GetUserlogin<br>#\u4e3a\u4e86\u8fbe\u5230\u771f\u6b63\u7684\u9650\u5236\u6548\u679c\u8fd8\u9700\u8981\u4ee5\u4e0b\u64cd\u4f5c\uff1a<br>#\u7981\u6b62\u7528\u6237\u81ea\u5df1\u751f\u6210\u65b0\u7684\u914d\u7f6e\u6587\u4ef6<br>.\/sacli --user testuser3 --key \"prop_autogenerate\" --value \"false\" UserPropPut<br>\/usr\/local\/openvpn_as\/scripts\/sacli start<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E9%85%8D%E7%BD%AE%E7%94%A8%E6%88%B7%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%9C%89%E6%95%88%E6%9C%9F%E8%84%9A%E6%9C%AC%EF%BC%9A\"><\/span>\u914d\u7f6e\u7528\u6237\u914d\u7f6e\u6587\u4ef6\u6709\u6548\u671f\u811a\u672c\uff1a<span class=\"ez-toc-section-end\"><\/span><\/h5>\n\n\n\n<pre class=\"wp-block-preformatted\">#!\/bin\/bash<br><br># OpenVPN AS \u7528\u6237\u8bc1\u4e66\u7ba1\u7406\u811a\u672c<br><br># \u989c\u8272\u5b9a\u4e49<br>RED='\\033[0;31m'<br>GREEN='\\033[0;32m'<br>YELLOW='\\033[1;33m'<br>NC='\\033[0m'<br><br># \u914d\u7f6e\u53d8\u91cf<br>CONTAINER_NAME=\"\"<br>SCRIPT_DIR=\"\/usr\/local\/openvpn_as\/scripts\"<br>CERT_OUTPUT_DIR=\".\/usercerts\"<br>TEMP_CERT_DIR=\"\/tmp\"<br><br>print_success() {<br>    echo -e \"${GREEN}\u2713 $1${NC}\"<br>}<br><br>print_warning() {<br>    echo -e \"${YELLOW}\u26a0 $1${NC}\"<br>}<br><br>print_error() {<br>    echo -e \"${RED}\u2717 $1${NC}\"<br>    exit 1<br>}<br><br>detect_container() {<br>    if [ -z \"$CONTAINER_NAME\" ]; then<br>        echo -e \"\\n${YELLOW}\u6b63\u5728\u68c0\u6d4b OpenVPN AS \u5bb9\u5668...${NC}\"<br>        CONTAINER_NAME=$(docker ps --format \"{{.Names}}\" | grep -i \"openvpn\\|ovpn\" | head -1)<br><br>        if [ -z \"$CONTAINER_NAME\" ]; then<br>            print_error \"\u672a\u627e\u5230 OpenVPN AS \u5bb9\u5668,\u8bf7\u624b\u52a8\u6307\u5b9a\u5bb9\u5668\u540d\u79f0\"<br>        fi<br><br>        print_success \"\u68c0\u6d4b\u5230\u5bb9\u5668: $CONTAINER_NAME\"<br>        read -p \"\u662f\u5426\u4f7f\u7528\u6b64\u5bb9\u5668? (y\/n): \" confirm<br>        if [[ ! \"$confirm\" =~ ^[Yy]$ ]]; then<br>            print_error \"\u64cd\u4f5c\u5df2\u53d6\u6d88\"<br>        fi<br>    fi<br>}<br><br>check_output_dir() {<br>    if [ ! -d \"$CERT_OUTPUT_DIR\" ]; then<br>        mkdir -p \"$CERT_OUTPUT_DIR\"<br>    fi<br>}<br><br>exec_container() {<br>    docker exec \"$CONTAINER_NAME\" \"$@\"<br>}<br><br>set_global_cert_lifetime() {<br>    echo -e \"\\n${YELLOW}===== \u5168\u5c40\u8bc1\u4e66\u6709\u6548\u671f\u914d\u7f6e =====${NC}\"<br>    echo \"\u5f53\u524d\u914d\u7f6e:\"<br>    exec_container $SCRIPT_DIR\/sa showpkiconfig<br><br>    local current_days=$(exec_container $SCRIPT_DIR\/sa showpkiconfig 2&gt;&amp;1 | grep \"client_certificate_lifetime\" | awk '{print $2}')<br><br>    echo \"\"<br>    read -p \"\u662f\u5426\u9700\u8981\u4fee\u6539\u5168\u5c40\u8bc1\u4e66\u6709\u6548\u671f? (\u5f53\u524d: ${current_days}\u5929) [y\/n]: \" modify_choice<br><br>    if [[ \"$modify_choice\" =~ ^[Yy]$ ]]; then<br>        read -p \"\u8bf7\u8f93\u5165\u65b0\u7684\u6709\u6548\u671f(\u5929\u6570): \" new_days<br><br>        if [[ -z \"$new_days\" ]] || ! [[ \"$new_days\" =~ ^[0-9]+$ ]]; then<br>            echo \"\u8f93\u5165\u65e0\u6548,\u4fdd\u6301\u5f53\u524d\u914d\u7f6e\"<br>        else<br>            exec_container $SCRIPT_DIR\/sa --client_certificate_lifetime=$new_days setpkiconfig<br>            echo \"\u2713 \u5168\u5c40\u8bc1\u4e66\u6709\u6548\u671f\u5df2\u8bbe\u7f6e\u4e3a ${new_days} \u5929\"<br>            exec_container $SCRIPT_DIR\/sa showpkiconfig<br>        fi<br>    else<br>        echo \"\u4fdd\u6301\u5f53\u524d\u914d\u7f6e: ${current_days} \u5929\"<br>    fi<br>}<br><br># \u51fd\u6570: \u83b7\u53d6\u7528\u6237\u8f93\u5165<br>get_user_input() {<br>    echo -e \"\\n${YELLOW}===== \u8f93\u5165\u7528\u6237\u4fe1\u606f =====${NC}\"<br>    read -p \"\u8bf7\u8f93\u5165\u7528\u6237\u540d: \" USERNAME<br>    if [ -z \"$USERNAME\" ]; then<br>        print_error \"\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a\"<br>    fi<br>}<br><br># \u51fd\u6570: \u9009\u62e9\u8bc1\u4e66\u6709\u6548\u671f<br>select_cert_lifetime() {<br>    echo -e \"\\n${YELLOW}===== \u9009\u62e9\u8bc1\u4e66\u6709\u6548\u671f =====${NC}\"<br>    echo \"1) 90\u5929 (3\u4e2a\u6708)\"<br>    echo \"2) 180\u5929 (6\u4e2a\u6708)\"<br>    echo \"3) 365\u5929 (1\u5e74)\"<br>    echo \"4) \u81ea\u5b9a\u4e49\u5929\u6570\"<br><br>    read -p \"\u8bf7\u9009\u62e9 [1-4]: \" choice<br><br>    case $choice in<br>        1) CERT_DAYS=90; CERT_DESC=\"90\u5929\" ;;<br>        2) CERT_DAYS=180; CERT_DESC=\"180\u5929\" ;;<br>        3) CERT_DAYS=365; CERT_DESC=\"365\u5929\" ;;<br>        4)<br>            read -p \"\u8bf7\u8f93\u5165\u81ea\u5b9a\u4e49\u5929\u6570: \" CERT_DAYS<br>            CERT_DESC=\"${CERT_DAYS}\u5929\"<br>            ;;<br>    esac<br>    echo \"\u2713 \u5df2\u9009\u62e9\u8bc1\u4e66\u6709\u6548\u671f: $CERT_DESC\"<br>}<br><br># \u51fd\u6570: \u4ece\u6587\u4ef6\u6279\u91cf\u5904\u7406\u7528\u6237<br>batch_process_users() {<br>    local batch_file=\"$1\"<br><br>    if [ \"$batch_file\" = \".\" ]; then<br>        batch_file=\".\/batch_users_example.txt\"<br>    fi<br><br>    echo -e \"\\n${YELLOW}===== \u6279\u91cf\u5904\u7406\u6a21\u5f0f =====${NC}\"<br>    echo \"\u4ece\u6587\u4ef6\u8bfb\u53d6\u7528\u6237\u5217\u8868: $batch_file\"<br>    echo \"\"<br><br>    local total_users=0<br>    local success_users=0<br><br>    while IFS=' ' read -r username days || [ -n \"$username\" ]; do<br>        # \u8df3\u8fc7\u7a7a\u884c\u548c\u6ce8\u91ca<br>        if [[ -z \"$username\" ]] || [[ \"$username\" =~ ^#.* ]]; then<br>            continue<br>        fi<br><br>        username=$(echo \"$username\" | xargs)<br>        days=$(echo \"$days\" | xargs)<br><br>        # \u9a8c\u8bc1\u683c\u5f0f<br>        if [[ -z \"$username\" ]] || [[ -z \"$days\" ]] || ! [[ \"$days\" =~ ^[0-9]+$ ]]; then<br>            continue<br>        fi<br><br>        ((total_users++))<br>        echo -e \"\\n\u5904\u7406\u7528\u6237 [$total_users]: $username (${days}\u5929)\"<br><br>        USERNAME=\"$username\"<br>        CERT_DAYS=\"$days\"<br>        CERT_DESC=\"${days}\u5929\"<br><br>        if create_user_if_not_exists &amp;&amp; generate_user_cert; then<br>            ((success_users++))<br>            echo \"\u2713 \u7528\u6237 $username \u5904\u7406\u5b8c\u6210\"<br>        else<br>            echo \"\u2717 \u7528\u6237 $username \u5904\u7406\u5931\u8d25\"<br>        fi<br>    done &lt; \"$batch_file\"<br><br>    echo -e \"\\n===== \u6279\u91cf\u5904\u7406\u5b8c\u6210 =====\"<br>    echo \"\u603b\u7528\u6237\u6570: $total_users\"<br>    echo \"\u6210\u529f: $success_users\"<br>    echo \"\"<br>}<br><br># \u51fd\u6570: \u521b\u5efa\u7528\u6237(\u5982\u679c\u4e0d\u5b58\u5728)<br>create_user_if_not_exists() {<br>    local user_exists=$(exec_container $SCRIPT_DIR\/sacli --pfilt \"$USERNAME\" UserPropGet 2&gt;&amp;1 | grep \"\\\"$USERNAME\\\"\")<br><br>    if [ -z \"$user_exists\" ]; then<br>        echo \"\u521b\u5efa\u65b0\u7528\u6237: $USERNAME\"<br>        exec_container $SCRIPT_DIR\/sacli --user \"$USERNAME\" --key \"type\" --value \"user_connect\" UserPropPut &gt; \/dev\/null 2&gt;&amp;1<br>    fi<br>    return 0<br>}<br><br># \u51fd\u6570: \u751f\u6210\u7528\u6237\u8bc1\u4e66<br>generate_user_cert() {<br>    echo -e \"\\n${YELLOW}===== \u751f\u6210\u7528\u6237\u8bc1\u4e66 =====${NC}\"<br><br>    local expiry_date=$(date -d \"+${CERT_DAYS} days\" +%Y-%m-%d)<br>    echo \"\u6b63\u5728\u4e3a\u7528\u6237 $USERNAME \u751f\u6210 ${CERT_DESC} \u6709\u6548\u671f\u7684\u8bc1\u4e66...\"<br>    echo \"\u8fc7\u671f\u65e5\u671f: $expiry_date\"<br><br>    # \u68c0\u67e5\u5e76\u4e34\u65f6\u5f00\u542f prop_autogenerate<br>    local current_autogen=$(exec_container $SCRIPT_DIR\/sacli --pfilt \"$USERNAME\" UserPropGet 2&gt;&amp;1 | grep \"prop_autogenerate\" | awk -F'\"' '{print $4}')<br>    local need_restore=false<br><br>    if [ \"$current_autogen\" = \"false\" ]; then<br>        echo \"\u4e34\u65f6\u5f00\u542f\u81ea\u52a8\u751f\u6210\u6743\u9650...\"<br>        exec_container $SCRIPT_DIR\/sacli --user \"$USERNAME\" --key \"prop_autogenerate\" --value \"true\" UserPropPut &gt; \/dev\/null 2&gt;&amp;1<br>        need_restore=true<br>    fi<br><br>    # \u751f\u6210\u8bc1\u4e66<br>    exec_container mkdir -p \"$TEMP_CERT_DIR\/$USERNAME\"<br>    local output=$(exec_container $SCRIPT_DIR\/sacli --user \"$USERNAME\" --exp \"$CERT_DAYS\" GetUserlogin 2&gt;&amp;1)<br><br>    # \u4fdd\u5b58\u5230\u4e34\u65f6\u6587\u4ef6<br>    exec_container bash -c \"cat &gt; $TEMP_CERT_DIR\/$USERNAME\/$USERNAME-$expiry_date.ovpn &lt;&lt; 'EOF'<br>$output<br>EOF\"<br><br>    # \u590d\u5236\u5230\u5bbf\u4e3b\u673a<br>    mkdir -p \"$CERT_OUTPUT_DIR\/$USERNAME\"<br>    docker cp \"$CONTAINER_NAME:$TEMP_CERT_DIR\/$USERNAME\/$USERNAME-$expiry_date.ovpn\" \"$CERT_OUTPUT_DIR\/$USERNAME\/\"<br>    exec_container rm -rf \"$TEMP_CERT_DIR\/$USERNAME\"<br><br>    # \u6062\u590d prop_autogenerate \u4e3a false<br>    if [ \"$need_restore\" = true ]; then<br>        echo \"\u6062\u590d\u7981\u6b62\u81ea\u52a8\u751f\u6210\u914d\u7f6e...\"<br>        exec_container $SCRIPT_DIR\/sacli --user \"$USERNAME\" --key \"prop_autogenerate\" --value \"false\" UserPropPut &gt; \/dev\/null 2&gt;&amp;1<br>    fi<br><br>    echo \"\u2713 \u8bc1\u4e66\u5df2\u4fdd\u5b58\u5230: $CERT_OUTPUT_DIR\/$USERNAME\/$USERNAME-$expiry_date.ovpn\"<br>    return 0<br>}<br><br># \u51fd\u6570: \u91cd\u542f\u670d\u52a1<br>restart_service() {<br>    echo -e \"\\n${YELLOW}===== \u91cd\u542f OpenVPN AS \u670d\u52a1 =====${NC}\"<br>    exec_container $SCRIPT_DIR\/sacli start<br>    echo \"\u2713 \u670d\u52a1\u91cd\u542f\u5b8c\u6210\"<br>}<br><br># \u51fd\u6570: \u663e\u793a\u7528\u6237\u6700\u7ec8\u914d\u7f6e<br>show_user_config() {<br>    echo -e \"\\n${YELLOW}===== \u7528\u6237\u914d\u7f6e\u4fe1\u606f =====${NC}\"<br>    exec_container $SCRIPT_DIR\/sacli --pfilt \"$USERNAME\" UserPropGet<br>}<br><br># \u4e3b\u51fd\u6570<br>main() {<br>    echo -e \"${GREEN}\"<br>    echo \"========================================\"<br>    echo \"  OpenVPN AS \u7528\u6237\u8bc1\u4e66\u7ba1\u7406\u5de5\u5177\"<br>    echo \"========================================\"<br>    echo -e \"${NC}\"<br><br>    detect_container<br>    check_output_dir<br>    set_global_cert_lifetime<br><br>    echo -e \"\\n${YELLOW}===== \u9009\u62e9\u5904\u7406\u6a21\u5f0f =====${NC}\"<br>    echo \"1) \u5355\u4e2a\u7528\u6237\u5904\u7406\"<br>    echo \"2) \u6279\u91cf\u5904\u7406(\u4ece\u6587\u4ef6\u8bfb\u53d6)\"<br>    read -p \"\u8bf7\u9009\u62e9 [1-2]: \" mode_choice<br><br>    case $mode_choice in<br>        1)<br>            get_user_input<br>            select_cert_lifetime<br>            create_user_if_not_exists<br>            generate_user_cert<br>            restart_service<br>            show_user_config<br><br>            echo -e \"\\n${GREEN}========================================${NC}\"<br>            echo -e \"${GREEN}  \u64cd\u4f5c\u5b8c\u6210!${NC}\"<br>            echo -e \"${GREEN}========================================${NC}\"<br>            echo \"\"<br>            echo \"\u7528\u6237\u540d: $USERNAME\"<br>            echo \"\u8bc1\u4e66\u6709\u6548\u671f: $CERT_DESC\"<br>            echo \"\u8bc1\u4e66\u4fdd\u5b58\u4f4d\u7f6e: $CERT_OUTPUT_DIR\/$USERNAME\/\"<br>            echo \"\"<br>            ;;<br>        2)<br>            read -p \"\u8bf7\u8f93\u5165\u6279\u91cf\u6587\u4ef6\u8def\u5f84 (\u76f4\u63a5\u56de\u8f66\u4f7f\u7528 .\/batch_users_example.txt): \" batch_file<br>            if [ -z \"$batch_file\" ]; then<br>                batch_file=\".\/batch_users_example.txt\"<br>            fi<br><br>            batch_process_users \"$batch_file\"<br>            restart_service<br>            echo \"\u2713 \u6240\u6709\u7528\u6237\u8bc1\u4e66\u5df2\u751f\u6210\u5b8c\u6210\"<br>            echo \"\u8bc1\u4e66\u4fdd\u5b58\u4f4d\u7f6e: $CERT_OUTPUT_DIR\/\"<br>            ;;<br>    esac<br>}<br><br>main<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E8%BF%9E%E6%8E%A5AD%E5%9F%9F\"><\/span>\u8fde\u63a5AD\u57df<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%AD%A5%E9%AA%A41%EF%BC%9A%E7%99%BB%E5%BD%95Web%E7%AE%A1%E7%90%86%E7%95%8C%E9%9D%A2\"><\/span>\u6b65\u9aa41\uff1a\u767b\u5f55Web\u7ba1\u7406\u754c\u9762<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u8bbf\u95ee\uff1a<code>https:\/\/192.168.99.119:943\/admin<\/code><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260106143520346.png\" alt=\"image-20260106143513221\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%AD%A5%E9%AA%A42%EF%BC%9A%E5%AF%BC%E8%88%AA%E5%88%B0%E8%AE%A4%E8%AF%81%E9%85%8D%E7%BD%AE\"><\/span>\u6b65\u9aa42\uff1a\u5bfc\u822a\u5230\u8ba4\u8bc1\u914d\u7f6e<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u70b9\u51fb\u5de6\u4fa7\u83dc\u5355\u7684 <strong>\u201cAuthentication\u201d<\/strong><\/li>\n\n\n\n<li>\u9009\u62e9 <strong>\u201cLDAP\u201d<\/strong> \u9009\u9879\u5361<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%AD%A5%E9%AA%A43%EF%BC%9A%E5%90%AF%E7%94%A8LDAP%E8%AE%A4%E8%AF%81\"><\/span>\u6b65\u9aa43\uff1a\u542f\u7528LDAP\u8ba4\u8bc1<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fdb\u5165AD\u57df\u670d\u52a1\u5668192.168.99.211\uff0c\u5173\u95ed\u4ee5\u4e0b\u7684\u5b89\u5168\u9009\u9879\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u8fd0\u884c gpedit.msc \u5bfc\u822a\u5230\uff1a\u8ba1\u7b97\u673a\u914d\u7f6e \u2192 Windows\u8bbe\u7f6e \u2192 \u5b89\u5168\u8bbe\u7f6e \u2192 \u672c\u5730\u7b56\u7565 \u2192 \u5b89\u5168\u9009\u9879 \u627e\u5230\u5e76\u4fee\u6539\uff1a \u7f51\u7edc\u5b89\u5168: LDAP \u5ba2\u6237\u7aef\u7b7e\u540d\u8981\u6c42 \u2192 \u8bbe\u4e3a \u65e0 \u57df\u63a7\u5236\u5668: LDAP \u670d\u52a1\u5668\u7b7e\u540d\u8981\u6c42\u5f3a\u5236 \u2192 \u8bbe\u4e3a \u65e0<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260106172328800.png\" alt=\"image-20260106172328715\"\/><\/figure>\n\n\n\n<pre class=\"wp-block-preformatted\">openvpn-as web\u9875\u9762\uff1a<br>\u25a1 Enable LDAP authentication \u2192 \u2611 Enable LDAP authentication<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260106144305047.png\" alt=\"image-20260106144304959\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260106144325245.png\" alt=\"image-20260106144325162\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%AD%A5%E9%AA%A44%EF%BC%9A%E9%85%8D%E7%BD%AELDAP%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%9E%E6%8E%A5\"><\/span>\u6b65\u9aa44\uff1a\u914d\u7f6eLDAP\u670d\u52a1\u5668\u8fde\u63a5<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260106165247402.png\" alt=\"image-20260106165247312\"\/><\/figure>\n\n\n\n<pre class=\"wp-block-preformatted\">Primary server: 192.168.99.211<br><br>\u25a1 Connect to LDAP servers with SSL \u2192 \u9009\u62e9 \"Off\"\uff08\u91cd\u8981\uff01\uff09<br><br>\u25a1 Authenticate with username\/password for initial bind \u2192 \u2611 \u542f\u7528<br>Bind DN (username): Administrator@linuxjk.cn<br>Password: \u8f93\u5165\u5bc6\u7801\uff08Suit@2025\uff09<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%AD%A5%E9%AA%A45%EF%BC%9A%E9%85%8D%E7%BD%AE%E7%94%A8%E6%88%B7%E6%90%9C%E7%B4%A2%E5%8F%82%E6%95%B0\"><\/span>\u6b65\u9aa45\uff1a\u914d\u7f6e\u7528\u6237\u641c\u7d22\u53c2\u6570<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">Base DN for user entries: DC=linuxjk,DC=cn<br><br>Username attribute: sAMAccountName<br><br>LDAP filter: (&amp;(sAMAccountName=%u)(objectClass=user)(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">#\u8fc7\u6ee4\u5668\u914d\u7f6e\uff1a\u5728AD\u4e2d\u7981\u7528\u7684\u8d26\u6237\u65e0\u6cd5\u767b\u5f55<br>\u4f5c\u7528\u5206\u89e3\uff1a<br>&amp; - AND\u64cd\u4f5c\uff0c\u6240\u6709\u6761\u4ef6\u90fd\u5fc5\u987b\u6ee1\u8db3<br>(objectClass=user) - \u5bf9\u8c61\u7c7b\u522b\u4e3a\u7528\u6237<br>(objectCategory=person) - \u5bf9\u8c61\u7c7b\u522b\u4e3a\u4eba<br>(!(userAccountControl:1.2.840.113556.1.4.803:=2)) - \u8d26\u6237\u672a\u7981\u7528<br>userAccountControl \u662fAD\u8d26\u6237\u63a7\u5236\u5c5e\u6027<br>:1.2.840.113556.1.4.803: \u662fLDAP\u5339\u914d\u89c4\u5219\uff0c\u8868\u793a\u6309\u4f4d\u4e0e<br>=2 \u8868\u793a\u8d26\u6237\u88ab\u7981\u7528\u7684\u6807\u5fd7\u4f4d<br>! \u8868\u793a\"\u975e\"\uff0c\u6240\u4ee5\u6574\u4e2a\u6761\u4ef6\u662f\"\u8d26\u6237\u672a\u7981\u7528\"<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%AD%A5%E9%AA%A46%EF%BC%9A%E9%85%8D%E7%BD%AEAD%E5%9F%9F%E4%B8%AD%E7%94%A8%E6%88%B7%E7%9A%84%E6%90%9C%E7%B4%A2%E8%8C%83%E5%9B%B4%EF%BC%9A\"><\/span>\u6b65\u9aa46\uff1a\u914d\u7f6eAD\u57df\u4e2d\u7528\u6237\u7684\u641c\u7d22\u8303\u56f4\uff1a<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"># 1. \u786e\u8ba4\u5f53\u524d\u914d\u7f6e<br>echo \"\u5f53\u524d\u641c\u7d22\u8303\u56f4\u914d\u7f6e:\"<br>.\/sacli ConfigQuery | grep \"users_search_scope\"<br><br># 2. \u5982\u679c\u914d\u7f6e\u4e0d\u6b63\u786e\uff0c\u4fee\u6b63\u5b83<br>.\/sacli --key \"auth.ldap.0.users_search_scope\" --value \"subtree\" ConfigPut<br><br># 3. \u91cd\u542f\u670d\u52a1\u4f7f\u914d\u7f6e\u751f\u6548<br>.\/sacli Stop<br>.\/sacli Start<br><br># 4. \u9a8c\u8bc1\u914d\u7f6e\u5df2\u5e94\u7528<br>.\/sacli ConfigQuery | grep \"users_search_scope\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8bf4\u660e\uff1a\u4e3a\u4ec0\u4e48\u9700\u8981\u547d\u4ee4\u884c\u914d\u7f6e\u641c\u7d22\u8303\u56f4\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u57fa\u7840DN<\/strong>\uff1a<code>DC=linuxjk,DC=cn<\/code>\uff08\u6574\u4e2a\u57df\uff09<\/li>\n\n\n\n<li><strong>\u7528\u6237\u5206\u5e03<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li><code>test1<\/code> \u5728 <code>OU=\u57ce\u5efa\u4fe1\u606f,DC=linuxjk,DC=cn<\/code><\/li>\n\n\n\n<li><code>zhangpeng<\/code> \u53ef\u80fd\u5728 <code>CN=Users,DC=linuxjk,DC=cn<\/code> \u6216\u5176\u4ed6OU<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u4e0d\u540c\u641c\u7d22\u8303\u56f4\u7684\u6548\u679c\uff1a<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">\u641c\u7d22\u8303\u56f4<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u80fd\u5426\u627e\u5230test1<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u80fd\u5426\u627e\u5230zhangpeng<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u8bf4\u660e<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Base<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u274c \u4e0d\u80fd<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u274c \u4e0d\u80fd<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u53ea\u641c\u7d22<code>DC=linuxjk,DC=cn<\/code>\u672c\u8eab\uff08\u8fd9\u662f\u5bb9\u5668\u5bf9\u8c61\uff0c\u4e0d\u662f\u7528\u6237\uff09<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>One<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u274c \u4e0d\u80fd<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u274c \u4e0d\u80fd<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u53ea\u641c\u7d22<code>DC=linuxjk,DC=cn<\/code>\u7684\u76f4\u63a5\u5b50\u7ea7\uff08\u53ef\u80fd\u662fUsers\u5bb9\u5668\u548c\u57ce\u5efa\u4fe1\u606fOU\uff0c\u4f46\u4e0d\u641c\u7d22\u5b83\u4eec\u5185\u90e8\uff09<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Subtree<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u2705 \u80fd<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u2705 \u80fd<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u641c\u7d22\u6574\u4e2a\u57df\u6811\uff0c\u5305\u62ec\u6240\u6709\u5b50OU\u548c\u5d4c\u5957OU<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%AD%A5%E9%AA%A47%EF%BC%9A%E9%85%8D%E7%BD%AE%E8%AE%A4%E8%AF%81%E9%BB%98%E8%AE%A4%E8%AE%BE%E7%BD%AE\"><\/span>\u6b65\u9aa47\uff1a\u914d\u7f6e\u8ba4\u8bc1\u9ed8\u8ba4\u8bbe\u7f6e<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd4\u56de\u6216\u70b9\u51fb <strong>\u201cGeneral Settings\u201d<\/strong> \u9009\u9879\u5361\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Default authentication system: LDAP<br><br>\u5176\u4ed6\u9009\u9879\u4fdd\u6301\u9ed8\u8ba4\u6216\u6839\u636e\u9700\u6c42\u914d\u7f6e\uff1a<br>- Require local user accounts with external authentication systems: Off<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260106173107552.png\" alt=\"image-20260106144325162\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%AD%A5%E9%AA%A48%EF%BC%9A%E9%85%8D%E7%BD%AE%E5%AF%86%E7%A0%81%E9%94%81%E5%AE%9A%E7%AD%96%E7%95%A5%EF%BC%88%E5%8F%AF%E9%80%89%EF%BC%89\"><\/span>\u6b65\u9aa48\uff1a\u914d\u7f6e\u5bc6\u7801\u9501\u5b9a\u7b56\u7565\uff08\u53ef\u9009\uff09<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728 <strong>\u201cAuthentication\u201d<\/strong> \u90e8\u5206\u4e0b\u7684 <strong>\u201cPassword lockout policy\u201d<\/strong>\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Failed attempts until lockout occurs: \u5931\u8d25\u6b21\u6570\u9501\u5b9a\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2a\u503c\uff08\u59825\uff09\uff0c\u6216\u7559\u7a7a\u7981\u7528<br>\u200b<br>Lockout release timeout in seconds: \u9501\u5b9a\u65f6\u95f4\uff08s\uff09\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2a\u503c\uff08\u598210\uff09\uff0c\u6216\u7559\u7a7a\u7981\u7528<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%AD%A5%E9%AA%A49%EF%BC%9A%E5%BA%94%E7%94%A8%E9%85%8D%E7%BD%AE\"><\/span>\u6b65\u9aa49\uff1a\u5e94\u7528\u914d\u7f6e<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 <strong>\u201cSave\u201c<\/strong> \u6309\u94ae<\/li>\n\n\n\n<li>\u63d0\u793a\u91cd\u542f\u670d\u52a1\uff0c\u786e\u8ba4\u91cd\u542f<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260107094012546.png\" alt=\"image-20260107094012428\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%AD%A5%E9%AA%A410%EF%BC%9A%E9%AA%8C%E8%AF%81%E9%85%8D%E7%BD%AE\"><\/span>\u6b65\u9aa410\uff1a\u9a8c\u8bc1\u914d\u7f6e<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u65b9\u5f0f\u9a8c\u8bc1\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u67e5\u770b\u5f53\u524d\u914d\u7f6e<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li>\u5728\u547d\u4ee4\u884c\u4e2d\u6267\u884c\uff1a<code>\/usr\/local\/openvpn-as\/scripts\/sacli ConfigQuery | grep -E \"auth.ldap\"<\/code><\/li>\n\n\n\n<li>root@e9dcd3f8c7ee:\/# \/usr\/local\/openvpn_as\/scripts\/sacli ConfigQuery | grep -E &#8220;auth.ldap&#8221;<br>\u00a0&#8220;auth.ldap.0.bind_dn&#8221;: &#8220;Administrator@linuxjk.cn&#8221;,<br>\u00a0&#8220;auth.ldap.0.bind_pw&#8221;: &#8220;Suit@2025&#8221;,<br>\u00a0&#8220;auth.ldap.0.debug&#8221;: &#8220;true&#8221;,<br>\u00a0&#8220;auth.ldap.0.enable&#8221;: &#8220;true&#8221;,<br>\u00a0&#8220;auth.ldap.0.fallback_local&#8221;: &#8220;true&#8221;,<br>\u00a0&#8220;auth.ldap.0.server.0.host&#8221;: &#8220;192.168.99.211&#8221;,<br>\u00a0&#8220;auth.ldap.0.server.0.port&#8221;: &#8220;389&#8221;,<br>\u00a0&#8220;auth.ldap.0.timeout&#8221;: &#8220;15&#8221;,<br>\u00a0&#8220;auth.ldap.0.uname_attr&#8221;: &#8220;sAMAccountName&#8221;,<br>\u00a0&#8220;auth.ldap.0.use_ssl&#8221;: &#8220;never&#8221;,<br>\u00a0&#8220;auth.ldap.0.use_start_tls&#8221;: &#8220;never&#8221;,<br>\u00a0&#8220;auth.ldap.0.user_search_filter&#8221;: &#8220;(&amp;(sAMAccountName=%u)(objectClass=user)(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))&#8221;,<br>\u00a0&#8220;auth.ldap.0.users_base_dn&#8221;: &#8220;DC=linuxjk,DC=cn&#8221;,<br>\u00a0&#8220;auth.ldap.0.users_search_scope&#8221;: &#8220;subtree&#8221;,<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u6d4b\u8bd5\u767b\u5f55<\/strong>\uff1a\uff08\u4e0a\u4e00\u6b65\u5982\u679c\u663e\u793aauth.ldap.0.add_req\u4e0d\u4e3a\u7a7a\u9700\u8981\u8fdb\u884c\u4e0b\u9762\u7684\u64cd\u4f5c\uff09\n<ul class=\"wp-block-list\">\n<li>\u6253\u5f00\u7528\u6237\u767b\u5f55\u9875\u9762\uff1a<code>https:\/\/192.168.99.119:943<\/code><\/li>\n\n\n\n<li>\u4f7f\u7528AD\u57df\u7528\u6237\uff08\u5982test1\u3001zhangpeng\uff09\u5c1d\u8bd5\u767b\u5f55<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Web%E9%A1%B5%E9%9D%A2%E9%85%8D%E7%BD%AE%E4%B8%8E%E5%91%BD%E4%BB%A4%E8%A1%8C%E9%85%8D%E7%BD%AE%E7%9A%84%E5%AF%B9%E5%BA%94%E5%85%B3%E7%B3%BB\"><\/span>Web\u9875\u9762\u914d\u7f6e\u4e0e\u547d\u4ee4\u884c\u914d\u7f6e\u7684\u5bf9\u5e94\u5173\u7cfb<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Web\u9875\u9762\u9009\u9879<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u5bf9\u5e94\u547d\u4ee4\u884c\u914d\u7f6e<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u5907\u6ce8<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\">Enable LDAP authentication<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>auth.ldap.0.enable: true<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u542f\u7528LDAP<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Primary server<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>auth.ldap.0.server.0.host<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">AD\u670d\u52a1\u5668\u5730\u5740<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Connect to LDAP servers with SSL<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>auth.ldap.0.use_ssl: never<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5fc5\u987b\u9009\u62e9\u201cOff\u201d<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Bind DN<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>auth.ldap.0.bind_dn<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u7ba1\u7406\u5458\u8d26\u6237<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Password<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>auth.ldap.0.bind_pw<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u7ba1\u7406\u5458\u5bc6\u7801<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Base DN for user entries<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>auth.ldap.0.users_base_dn<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8bbe\u4e3a\u201cDC=linuxjk,DC=cn\u201d<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Username attribute<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>auth.ldap.0.uname_attr<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8bbe\u4e3a\u201csAMAccountName\u201d<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">LDAP filter<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>auth.ldap.0.user_search_filter<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u7b80\u5316\u8fc7\u6ee4\u5668<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Default authentication system<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>auth.module.type: ldap<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5728General\u4e2d\u8bbe\u7f6e<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Web%E9%A1%B5%E9%9D%A2%E5%8F%AF%E8%83%BD%E7%BC%BA%E5%A4%B1%E7%9A%84%E9%85%8D%E7%BD%AE%E9%A1%B9\"><\/span>Web\u9875\u9762\u53ef\u80fd\u7f3a\u5931\u7684\u914d\u7f6e\u9879<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6ce8\u610f\uff1aWeb\u9875\u9762\u53ef\u80fd\u6ca1\u6709\u76f4\u63a5\u63d0\u4f9b\u4ee5\u4e0b\u914d\u7f6e\u9879\uff0c\u9700\u8981\u901a\u8fc7\u547d\u4ee4\u884c\u8865\u5145\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><code>auth.ldap.0.add_req<\/code><\/strong> &#8211; \u989d\u5916\u7684\u7528\u6237\u6dfb\u52a0\u9a8c\u8bc1\u8fc7\u6ee4\u5668<\/li>\n\n\n\n<li><strong><code>auth.ldap.0.use_start_tls<\/code><\/strong> &#8211; StartTLS\u8bbe\u7f6e\uff08\u9ed8\u8ba4\u4e3anever\uff09<\/li>\n\n\n\n<li><strong><code>auth.ldap.0.fallback_local<\/code><\/strong> &#8211; \u672c\u5730\u8ba4\u8bc1\u56de\u9000<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u9700\u8981\u8fd9\u4e9b\u914d\u7f6e\uff0c\u53ef\u4ee5\u5728Web\u9875\u9762\u914d\u7f6e\u540e\uff0c\u901a\u8fc7\u547d\u4ee4\u884c\u8865\u5145\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/usr\/local\/openvpn_as\/scripts<br><br># \u786e\u4fddssl\u88ab\u7981\u7528<br>.\/sacli --key \"auth.ldap.0.use_ssl\" --value \"never\" ConfigPut<br># \u786e\u4fddStartTLS\u88ab\u7981\u7528<br>.\/sacli --key \"auth.ldap.0.use_start_tls\" --value \"never\" ConfigPut<br><br># \u5220\u9664add_req\u914d\u7f6e<br>.\/sacli --key \"auth.ldap.0.add_req\" ConfigDel<br><br># \u91cd\u542f\u670d\u52a1\u4f7f\u914d\u7f6e\u751f\u6548<br>.\/sacli Stop<br>.\/sacli Start<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%95%85%E9%9A%9C%E6%8E%92%E9%99%A4\"><\/span>\u6545\u969c\u6392\u9664<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679cWeb\u9875\u9762\u914d\u7f6e\u540e\u65e0\u6cd5\u767b\u5f55\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u68c0\u67e5\u914d\u7f6e\u8bed\u6cd5<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li>\u786e\u4fdd\u8fc7\u6ee4\u5668\u8bed\u6cd5\u6b63\u786e<\/li>\n\n\n\n<li>\u786e\u4fdd\u57fa\u7840DN\u6b63\u786e<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u6d4b\u8bd5LDAP\u8fde\u63a5<\/strong>\uff08\u5728\u5bb9\u5668\u5185\uff09\uff1aapt-get update &amp;&amp; apt-get install -y ldap-utils<br><br># \u6d4b\u8bd5\u7ed1\u5b9a<br>ldapwhoami -x -H ldap:\/\/192.168.99.211 -D &#8220;Administrator@linuxjk.cn&#8221; -w &#8220;Suit@2025&#8221;<br>ldapwhoami -x -H ldap:\/\/192.168.99.190 -D &#8220;Administrator@suitbim.com&#8221; -w &#8220;act1veP@ss&#8221;<br># \u6d4b\u8bd5\u641c\u7d22<br>ldapsearch -x -H ldap:\/\/192.168.99.211 -D &#8220;Administrator@linuxjk.cn&#8221; -w &#8220;Suit@2025&#8221; \\<br>-b &#8220;DC=linuxjk,DC=cn&#8221; \\<br>&#8220;(&amp;(sAMAccountName=test1)(objectClass=user)(objectCategory=person))&#8221; \\<br>sAMAccountName<br><br>ldapsearch -x -H ldap:\/\/192.168.99.190 -D &#8220;Administrator@suitbim.com&#8221; -w &#8220;act1veP@ss&#8221; \\<br>-b &#8220;DC=suitbim,DC=com&#8221; \\<br>&#8220;(&amp;(sAMAccountName=zhangpeng)(objectClass=user)(objectCategory=person))&#8221; \\<br>sAMAccountName<img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260107102233404.png\" alt=\"image-20260107102233336\"><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9\"><\/span>\u6ce8\u610f\u4e8b\u9879<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>SSL\u8bbe\u7f6e<\/strong>\uff1aWeb\u9875\u9762\u4e0a\u7684\u201cConnect to LDAP servers with SSL\u201d\u5fc5\u987b\u9009\u62e9\u201cOff\u201d\uff0c\u5426\u5219\u4f1a\u56e0\u8bc1\u4e66\u95ee\u9898\u65e0\u6cd5\u8fde\u63a5<\/li>\n\n\n\n<li><strong>\u8fc7\u6ee4\u5668\u8bed\u6cd5<\/strong>\uff1aWeb\u9875\u9762\u4e0a\u7684\u8fc7\u6ee4\u5668\u8f93\u5165\u6846\u53ef\u80fd\u8f83\u5c0f\uff0c\u6ce8\u610f\u62ec\u53f7\u5339\u914d<\/li>\n\n\n\n<li><strong>\u4fdd\u5b58\u540e\u91cd\u542f<\/strong>\uff1a\u90e8\u5206\u914d\u7f6e\u66f4\u6539\u9700\u8981\u91cd\u542fOpenVPN AS\u670d\u52a1\u624d\u80fd\u751f\u6548<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E9%85%8D%E7%BD%AE%E7%BB%84%E6%98%A0%E5%B0%84%EF%BC%8C%E5%B0%86AD%E4%B8%AD%E7%9A%84%E7%94%A8%E6%88%B7%E6%B7%BB%E5%8A%A0%E5%88%B0openvpn-as%E4%B8%AD%E5%B9%B6%E8%AE%BE%E7%BD%AE%E7%94%A8%E6%88%B7%E7%BB%84\"><\/span>\u914d\u7f6e\u7ec4\u6620\u5c04\uff0c\u5c06AD\u4e2d\u7684\u7528\u6237\u6dfb\u52a0\u5230openvpn-as\u4e2d\u5e76\u8bbe\u7f6e\u7528\u6237\u7ec4<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E4%B8%80%E3%80%81OpenVPN_AS_%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86%E6%9C%BA%E5%88%B6\"><\/span>\u4e00\u3001OpenVPN AS \u7528\u6237\u7ba1\u7406\u673a\u5236<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"1_%E7%94%A8%E6%88%B7%E8%87%AA%E5%8A%A8%E6%B7%BB%E5%8A%A0%E6%9C%BA%E5%88%B6\"><\/span>1. <strong>\u7528\u6237\u81ea\u52a8\u6dfb\u52a0\u673a\u5236<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u9ed8\u8ba4\u60c5\u51b5<\/strong>\uff1aAD\u57df\u7528\u6237<strong>\u9996\u6b21\u6210\u529f\u767b\u5f55<\/strong>\u540e\uff0c\u4f1a\u81ea\u52a8\u5728OpenVPN AS\u4e2d\u521b\u5efa\u8d26\u6237<\/li>\n\n\n\n<li><strong>\u65e0\u9700\u624b\u52a8\u6dfb\u52a0<\/strong>\uff1a\u7528\u6237\u901a\u8fc7LDAP\u8ba4\u8bc1\u6210\u529f\u540e\u81ea\u52a8\u51fa\u73b0\u5728\u7528\u6237\u5217\u8868<\/li>\n\n\n\n<li><strong>\u672c\u5730\u7f13\u5b58<\/strong>\uff1a\u767b\u5f55\u4fe1\u606f\u4f1a\u7f13\u5b58\u5728OpenVPN AS\u6570\u636e\u5e93\u4e2d<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2_%E7%94%A8%E6%88%B7%E5%8F%AF%E8%A7%81%E6%80%A7\"><\/span>2. <strong>\u7528\u6237\u53ef\u89c1\u6027<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u53ea\u6709\u767b\u5f55\u8fc7\u7684\u7528\u6237<\/strong>\u4f1a\u51fa\u73b0\u5728OpenVPN AS\u7528\u6237\u5217\u8868\u4e2d<\/li>\n\n\n\n<li><strong>\u4ece\u672a\u767b\u5f55\u7684\u7528\u6237<\/strong>\u4e0d\u4f1a\u663e\u793a<\/li>\n\n\n\n<li><strong>\u7528\u6237\u4fe1\u606f\u540c\u6b65<\/strong>\uff1a\u6bcf\u6b21\u767b\u5f55\u65f6\u4f1a\u4eceAD\u540c\u6b65\u6700\u65b0\u4fe1\u606f<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E4%B8%8D%E4%BD%BF%E7%94%A8%E7%BB%84%E6%98%A0%E5%B0%84%E5%8A%9F%E8%83%BD%EF%BC%8C%E6%A0%B9%E6%8D%AE%E7%94%A8%E6%88%B7%E5%B1%9E%E6%80%A7%E5%88%86%E9%85%8D%E7%BB%84%EF%BC%88%E5%BE%85%E5%AE%9A%EF%BC%89\"><\/span>\u4e0d\u4f7f\u7528\u7ec4\u6620\u5c04\u529f\u80fd\uff0c\u6839\u636e\u7528\u6237\u5c5e\u6027\u5206\u914d\u7ec4\uff08\u5f85\u5b9a\uff09<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u6e05\u9664\u7528\u6237\u5c5e\u6027\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">.\/sacli \u2013user test1 UserPropDelAll<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5c06\u7528\u6237\u5206\u914d\u5230\u67d0\u7ec4\u624b\u52a8\u811a\u672c\uff1a\u9700\u8981\u5728web\u9875\u9762\u4e0a\u5148\u521b\u5efa\u6d4b\u8bd5\u90e8\u95e81-4<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#!\/bin\/bash<br># manual_assign_group_cn.sh - \u624b\u52a8\u5206\u914d\u7528\u6237\u5230\u4e2d\u6587\u90e8\u95e8\u5bf9\u5e94\u7ec4<br>\u200b<br>USERNAME=\"$1\"<br>\u200b<br>if [ -z \"$USERNAME\" ]; then<br> &nbsp; &nbsp;echo \"\u7528\u6cd5: $0 &lt;\u7528\u6237\u540d&gt;\"<br> &nbsp; &nbsp;echo \"\u793a\u4f8b: $0 test1\"<br> &nbsp; &nbsp;exit 1<br>fi<br>\u200b<br>echo \"=== \u4e3a\u7528\u6237 $USERNAME \u624b\u52a8\u5206\u914d\u7ec4 ===\"<br>\u200b<br>echo \"\u8bf7\u9009\u62e9\u8981\u5206\u914d\u7684\u90e8\u95e8\u7ec4\uff1a\"<br>echo \"1) \u6d4b\u8bd5\u90e8\u95e81 (dept1)\"<br>echo \"2) \u6d4b\u8bd5\u90e8\u95e82 (dept2)\"<br>echo \"3) \u6d4b\u8bd5\u90e8\u95e83 (dept3)\"<br>echo \"4) \u6d4b\u8bd5\u90e8\u95e84 (dept4)\"<br>echo \"5) Default (\u9ed8\u8ba4\u7ec4)\"<br>read -p \"\u8bf7\u8f93\u5165\u9009\u62e9 [1-5]: \" CHOICE<br>\u200b<br>case \"$CHOICE\" in<br> &nbsp; &nbsp;1)<br> &nbsp; &nbsp; &nbsp; &nbsp;GROUP=\"\u6d4b\u8bd5\u90e8\u95e81\"<br> &nbsp; &nbsp; &nbsp;  ;;<br> &nbsp; &nbsp;2)<br> &nbsp; &nbsp; &nbsp; &nbsp;GROUP=\"\u6d4b\u8bd5\u90e8\u95e82\"<br> &nbsp; &nbsp; &nbsp;  ;;<br> &nbsp; &nbsp;3)<br> &nbsp; &nbsp; &nbsp; &nbsp;GROUP=\"\u6d4b\u8bd5\u90e8\u95e83\"<br> &nbsp; &nbsp; &nbsp;  ;;<br> &nbsp; &nbsp;4)<br> &nbsp; &nbsp; &nbsp; &nbsp;GROUP=\"\u6d4b\u8bd5\u90e8\u95e84\"<br> &nbsp; &nbsp; &nbsp;  ;;<br> &nbsp; &nbsp;5)<br> &nbsp; &nbsp; &nbsp; &nbsp;CN_DEPT=\"\u9ed8\u8ba4\u90e8\u95e8\"<br> &nbsp; &nbsp; &nbsp; &nbsp;GROUP=\"Default\"<br> &nbsp; &nbsp; &nbsp;  ;;<br> &nbsp;  *)<br> &nbsp; &nbsp; &nbsp; &nbsp;echo \"\u65e0\u6548\u9009\u62e9\"<br> &nbsp; &nbsp; &nbsp; &nbsp;exit 1<br> &nbsp; &nbsp; &nbsp;  ;;<br>esac<br>\u200b<br>echo \"\u6b63\u5728\u5c06\u7528\u6237 $USERNAME \u5206\u914d\u5230 $CN_DEPT ($GROUP) \u7ec4...\"<br>\u200b<br># \u5207\u6362\u5230sacli\u76ee\u5f55<br>cd \/usr\/local\/openvpn_as\/scripts<br>\u200b<br># \u6e05\u7406\u73b0\u6709\u7ec4\u5206\u914d<br>.\/sacli --user \"$USERNAME\" --key \"conn_group\" UserPropDel 2&gt;\/dev\/null<br>\u200b<br># \u5206\u914d\u65b0\u7ec4<br>.\/sacli --user \"$USERNAME\" --key \"conn_group\" --value \"$GROUP\" UserPropPut<br>\u200b<br>if [ $? -eq 0 ]; then<br> &nbsp; &nbsp;echo \"\u2713 \u5206\u914d\u6210\u529f\uff1a\u7528\u6237 $USERNAME \u5df2\u5206\u914d\u5230 $CN_DEPT ($GROUP) \u7ec4\"<br> &nbsp; &nbsp;<br> &nbsp; &nbsp;# \u9a8c\u8bc1\u5206\u914d<br> &nbsp; &nbsp;echo \"\u9a8c\u8bc1\u5206\u914d...\"<br> &nbsp;  .\/sacli --user \"$USERNAME\" UserPropGet | grep -o \"\\\"conn_group\\\": \\\"$GROUP\\\"\" &amp;&amp; echo \"\u2713 \u9a8c\u8bc1\u6210\u529f\"<br> &nbsp; &nbsp;<br> &nbsp; &nbsp;# \u91cd\u542f\u670d\u52a1<br> &nbsp;  read -p \"\u662f\u5426\u91cd\u542fOpenVPN AS\u670d\u52a1\u4f7f\u914d\u7f6e\u751f\u6548\uff1f(y\/N): \" RESTART<br> &nbsp; &nbsp;if [ \"$RESTART\" = \"y\" ] || [ \"$RESTART\" = \"Y\" ]; then<br> &nbsp; &nbsp; &nbsp; &nbsp;echo \"\u6b63\u5728\u91cd\u542f\u670d\u52a1...\"<br> &nbsp; &nbsp; &nbsp;  .\/sacli Stop<br> &nbsp; &nbsp; &nbsp; &nbsp;sleep 2<br> &nbsp; &nbsp; &nbsp;  .\/sacli Start<br> &nbsp; &nbsp; &nbsp; &nbsp;echo \"\u670d\u52a1\u5df2\u91cd\u542f\"<br> &nbsp; &nbsp;fi<br>else<br> &nbsp; &nbsp;echo \"\u2717 \u5206\u914d\u5931\u8d25\"<br> &nbsp; &nbsp;exit 1<br>fi<br>\u200b<br>echo \"\u5b8c\u6210\uff01\"<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u914d\u7f6e\u767b\u5f55\u94a9\u5b50\uff08\u81ea\u52a8\u6267\u884c\uff09<br>1. \u5b89\u88c5\u548c\u914d\u7f6e\u811a\u672c<br>bash<br># \u521b\u5efa\u811a\u672c\u76ee\u5f55<br>mkdir -p \/usr\/local\/openvpn_as\/login_hooks<br><br># \u4fdd\u5b58\u81ea\u52a8\u5206\u914d\u811a\u672c<br>cat &gt; \/usr\/local\/openvpn_as\/login_hooks\/auto_assign_cn_group.sh &lt;&lt; 'EOF'<br>#!\/bin\/bash<br># \u767b\u5f55\u94a9\u5b50\u811a\u672c - \u81ea\u52a8\u5206\u914d\u5230\u4e2d\u6587\u7ec4<br><br>USERNAME=\"$1\"<br><br># \u8bb0\u5f55\u767b\u5f55\u4e8b\u4ef6<br>echo \"$(date '+%Y-%m-%d %H:%M:%S') - \u7528\u6237 $USERNAME \u767b\u5f55\" &gt;&gt; \/var\/log\/openvpn_cn_login.log<br><br># \u6267\u884c\u81ea\u52a8\u5206\u914d<br>\/usr\/local\/openvpn_as\/scripts\/auto_assign_cn_group_login.sh \"$USERNAME\"<br><br># \u8fd4\u56de\u6210\u529f<br>exit 0<br>EOF<br><br>chmod +x \/usr\/local\/openvpn_as\/login_hooks\/auto_assign_cn_group.sh<br>2. \u914d\u7f6eOpenVPN AS\u4f7f\u7528\u767b\u5f55\u94a9\u5b50<br>bash<br>cd \/usr\/local\/openvpn_as\/scripts<br><br># \u505c\u6b62\u670d\u52a1<br>.\/sacli Stop<br><br># \u914d\u7f6e\u767b\u5f55\u94a9\u5b50\u811a\u672c<br>.\/sacli --key \"vpn.server.login_script\" --value \"\/usr\/local\/openvpn_as\/login_hooks\/auto_assign_cn_group.sh\" ConfigPut<br><br># \u914d\u7f6e\u767b\u5f55\u94a9\u5b50\u6267\u884c\u7528\u6237\uff08\u901a\u5e38\u662froot\u6216openvpn\u7528\u6237\uff09<br>.\/sacli --key \"vpn.server.login_script_user\" --value \"root\" ConfigPut<br><br># \u914d\u7f6e\u767b\u5f55\u94a9\u5b50\u6267\u884c\u7ec4<br>.\/sacli --key \"vpn.server.login_script_group\" --value \"root\" ConfigPut<br><br># \u542f\u52a8\u670d\u52a1<br>.\/sacli Start<br><br>echo \"\u767b\u5f55\u94a9\u5b50\u914d\u7f6e\u5b8c\u6210\uff01\"<br>\u4e94\u3001\u6279\u91cf\u521d\u59cb\u5316\u73b0\u6709\u7528\u6237<br>bash<br>#!\/bin\/bash<br># init_existing_users_cn.sh - \u521d\u59cb\u5316\u73b0\u6709\u7528\u6237\u7684\u4e2d\u6587\u7ec4\u5206\u914d<br><br>echo \"=== \u521d\u59cb\u5316\u73b0\u6709\u7528\u6237\u7684\u4e2d\u6587\u7ec4\u5206\u914d ===\"<br><br>cd \/usr\/local\/openvpn_as\/scripts<br><br># \u83b7\u53d6\u6240\u6709\u7528\u6237\u5217\u8868<br>USER_LIST=\"test1 test2 test3 test4 zhangpeng\"<br><br>echo \"\u627e\u5230\u7528\u6237: $USER_LIST\"<br><br># \u4e3a\u6bcf\u4e2a\u7528\u6237\u6267\u884c\u81ea\u52a8\u5206\u914d<br>for USER in $USER_LIST; do<br>    echo \"\u5904\u7406\u7528\u6237: $USER\"<br>    <br>    # \u4f7f\u7528\u81ea\u52a8\u5206\u914d\u811a\u672c<br>    .\/auto_assign_cn_group_login.sh \"$USER\" &gt; \/dev\/null 2&gt;&amp;1<br>    <br>    if [ $? -eq 0 ]; then<br>        echo \"  \u2713 $USER \u5904\u7406\u5b8c\u6210\"<br>    else<br>        echo \"  \u2717 $USER \u5904\u7406\u5931\u8d25\"<br>    fi<br>done<br><br>echo \"\u521d\u59cb\u5316\u5b8c\u6210\uff01\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u767b\u5f55\u94a9\u5b50\u7ba1\u7406\u547d\u4ee4\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># \u68c0\u67e5\u767b\u5f55\u94a9\u5b50\u914d\u7f6e<br>.\/sacli ConfigQuery | grep -i hook<br># \u5220\u9664\u5f53\u524d\u7684\u94a9\u5b50\u914d\u7f6e<br>.\/sacli --key \"vpn.server.login_script\" ConfigDel<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E9%85%8D%E7%BD%AE%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E8%8E%B7%E5%8F%96%E5%85%AC%E7%BD%91ip%EF%BC%9ANPSNPC\"><\/span>\u914d\u7f6e\u5185\u7f51\u7a7f\u900f\u83b7\u53d6\u516c\u7f51ip\uff1aNPS\/NPC<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%85%AC%E7%BD%91%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9A%E5%AE%89%E8%A3%85NPS\"><\/span>\u516c\u7f51\u4e91\u670d\u52a1\u5668\uff1a\u5b89\u88c5NPS<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"># \u5b89\u88c5nps\u670d\u52a1\u7aef<br>wget https:\/\/github.com\/ehang-io\/nps\/releases\/download\/v0.26.10\/linux_amd64_server.tar.gz<br>tar -xzf linux_amd64_server.tar.gz<br>cd nps<br>\u200b<br># \u5b89\u88c5<br>sudo .\/nps install<br>\u200b<br># \u542f\u52a8<br>nohup .\/nps &gt; nps.log 2&gt;&amp;1 &amp;<br>\u200b<br>\u200b<br># Web\u7ba1\u7406\u754c\u9762: http:\/\/VPS_IP:8080<br># \u9ed8\u8ba4\u7528\u6237\u540d: admin<br># \u9ed8\u8ba4\u5bc6\u7801: 123<br>\u200b<br># \u83b7\u53d6\u670d\u52a1\u5668\u516c\u7f51IP<br>curl -s ipinfo.io\/ip<br># \u6216\u8005<br>curl -s ifconfig.me<br># \u68c0\u67e5NPS\u8fdb\u7a0b<br>ps aux | grep nps<br># \u68c0\u67e5\u7aef\u53e3\u76d1\u542c<br>ss -lntup | grep -E \":8080|:8024\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>.\/conf\/nps.conf<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">appname = nps<br>runmode = dev<br>http_proxy_ip=0.0.0.0<br>http_proxy_port=8081<br>https_proxy_port=8443<br>https_just_proxy=true<br>https_default_cert_file=conf\/server.pem<br>https_default_key_file=conf\/server.key<br>bridge_type=tcp<br>bridge_port=8024<br>bridge_ip=0.0.0.0<br>public_vkey=123<br>log_level=7<br>web_host=a.o.com<br>web_username=admin<br>web_password=123<br>web_port = 8081<br>web_ip=0.0.0.0<br>web_base_url=<br>web_open_ssl=false<br>web_cert_file=conf\/server.pem<br>web_key_file=conf\/server.key<br>auth_crypt_key =1234567812345678<br>allow_user_login=false<br>allow_user_register=false<br>allow_user_change_username=false<br>allow_flow_limit=false<br>allow_rate_limit=false<br>allow_tunnel_num_limit=false<br>allow_local_proxy=false<br>allow_connection_num_limit=false<br>allow_multi_ip=false<br>system_info_display=false<br>http_cache=false<br>http_cache_length=100<br>http_add_origin_header=false<br>disconnect_timeout=60<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260206132700560.png\" alt=\"image-20260206132700466\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u6dfb\u52a0\u5ba2\u6237\u7aef\uff0c\u83b7\u53d6\u6b64\u9a8c\u8bc1\u5bc6\u94a5<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Web\u754c\u9762\u64cd\u4f5c\u6b65\u9aa4<br>1. \u521b\u5efa\u5ba2\u6237\u7aef<br>\u767b\u5f55\u540e\u70b9\u51fb\uff1a\u5ba2\u6237\u7aef -&gt; \u65b0\u589e<br>\u586b\u5199\u4fe1\u606f\uff1a<br>- \u5ba2\u6237\u7aef\u540d\u79f0: openvpn-client<br>- \u8fde\u63a5\u5bc6\u94a5: \u81ea\u52a8\u751f\u6210\u6216\u81ea\u5b9a\u4e49 (\u8bb0\u4f4f\u8fd9\u4e2a\u5bc6\u94a5!)<br>- \u662f\u5426\u538b\u7f29: \u9009\u62e9\"\u662f\"<br>- \u662f\u5426\u52a0\u5bc6: \u9009\u62e9\"\u662f\"<br>\u200b<br>2. \u6dfb\u52a0TCP\u96a7\u9053 (OpenVPN)<br>\u70b9\u51fb\uff1a\u96a7\u9053 -&gt; \u65b0\u589e<br>\u96a7\u9053\u7c7b\u578b: tcp<br>\u670d\u52a1\u7aef\u7aef\u53e3: 1194<br>\u76ee\u6807(\u5185\u7f51)\u5730\u5740: 127.0.0.1:914<br>\u5907\u6ce8: OpenVPN-TCP<br>2.5\u6dfb\u52a0TCP\u96a7\u9053 \uff08\u5907\u7528\uff09<br>\u670d\u52a1\u7aef\u7aef\u53e3: 1195<br>\u76ee\u6807(\u5185\u7f51)\u5730\u5740: 127.0.0.1:915<br>3. \u6dfb\u52a0UDP\u96a7\u9053 (OpenVPN)<br>\u70b9\u51fb\uff1a\u96a7\u9053 -&gt; \u65b0\u589e &nbsp;<br>\u96a7\u9053\u7c7b\u578b: udp<br>\u670d\u52a1\u7aef\u7aef\u53e3: 1194 &nbsp;<br>\u76ee\u6807(\u5185\u7f51)\u5730\u5740: 127.0.0.1:916<br>\u5907\u6ce8: OpenVPN-UDP<br>3.5\u6dfb\u52a0UDP\u96a7\u9053\uff08\u5907\u7528\uff09<br>\u670d\u52a1\u7aef\u7aef\u53e3: 1195<br>\u76ee\u6807(\u5185\u7f51)\u5730\u5740: 127.0.0.1:917<br>4. \u6dfb\u52a0\u7ba1\u7406\u754c\u9762\u96a7\u9053<br>\u70b9\u51fb\uff1a\u96a7\u9053 -&gt; \u65b0\u589e<br>\u96a7\u9053\u7c7b\u578b: tcp &nbsp;<br>\u670d\u52a1\u7aef\u7aef\u53e3: 943<br>\u76ee\u6807(\u5185\u7f51)\u5730\u5740: 127.0.0.1:943<br>\u5907\u6ce8: OpenVPN-Admin<br>4.5 \u6dfb\u52a0\u5ba2\u6237\u7aefwweb\u9875\u9762\u96a7\u9053<br>\u670d\u52a1\u7aef\u7aef\u53e3: 443<br>\u76ee\u6807(\u5185\u7f51)\u5730\u5740: 127.0.0.1:443<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260206132749110.png\" alt=\"image-20260206132749030\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/typora-zp.oss-cn-shanghai.aliyuncs.com\/typora20260206133159379.png\" alt=\"image-20260206133159289\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%9C%AC%E5%9C%B0%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%85%8D%E7%BD%AE\"><\/span>\u672c\u5730\u5ba2\u6237\u7aef\u914d\u7f6e<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"># \u4e0b\u8f7d\u5ba2\u6237\u7aef<br>wget https:\/\/github.com\/ehang-io\/nps\/releases\/download\/v0.26.10\/linux_amd64_client.tar.gz<br>tar -xzf linux_amd64_client.tar.gz<br>\u200b<br># \u4eceNPS web\u754c\u9762\u83b7\u53d6\u5ba2\u6237\u7aef\u8fde\u63a5\u547d\u4ee4<br># \u4f7f\u7528nohup\u786e\u4fddSSH\u65ad\u5f00\u540e\u8fdb\u7a0b\u7ee7\u7eed\u8fd0\u884c<br>nohup .\/npc -server=114.55.148.180:8024 -vkey=zqflfrgacrxc4sbk &gt; npc.log 2&gt;&amp;1 &amp;<br># \u67e5\u770b\u8fdb\u7a0b<br>ps aux | grep npc | grep -v grep<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%85%AC%E7%BD%91%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9A%E5%AE%89%E8%A3%85NPS-2\"><\/span>\u516c\u7f51\u4e91\u670d\u52a1\u5668\uff1a\u5b89\u88c5NPS<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"># \u5b89\u88c5nps\u670d\u52a1\u7aef<br>wget https:\/\/github.com\/ehang-io\/nps\/releases\/download\/v0.26.10\/linux_amd64_server.tar.gz<br>tar -xzf linux_amd64_server.tar.gz<br>cd nps<br>\u200b<br># \u5b89\u88c5<br>sudo .\/nps install<br>\u200b<br># \u542f\u52a8<br>nohup .\/nps &gt; nps.log 2&gt;&amp;1 &amp;<br>\u200b<br>\u200b<br># Web\u7ba1\u7406\u754c\u9762: http:\/\/VPS_IP:8080<br># \u9ed8\u8ba4\u7528\u6237\u540d: admin<br># \u9ed8\u8ba4\u5bc6\u7801: 123<br>\u200b<br># \u83b7\u53d6\u670d\u52a1\u5668\u516c\u7f51IP<br>curl -s ipinfo.io\/ip<br># \u6216\u8005<br>curl -s ifconfig.me<br># \u68c0\u67e5NPS\u8fdb\u7a0b<br>ps aux | grep nps<br># \u68c0\u67e5\u7aef\u53e3\u76d1\u542c<br>ss -lntup | grep -E \":8080|:8024\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>.\/conf\/nps.conf<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">appname = nps<br>runmode = dev<br>http_proxy_ip=0.0.0.0<br>http_proxy_port=8081<br>https_proxy_port=8443<br>https_just_proxy=true<br>https_default_cert_file=conf\/server.pem<br>https_default_key_file=conf\/server.key<br>bridge_type=tcp<br>bridge_port=8024<br>bridge_ip=0.0.0.0<br>public_vkey=123<br>log_level=7<br>web_host=a.o.com<br>web_username=admin<br>web_password=123<br>web_port = 8081<br>web_ip=0.0.0.0<br>web_base_url=<br>web_open_ssl=false<br>web_cert_file=conf\/server.pem<br>web_key_file=conf\/server.key<br>auth_crypt_key =1234567812345678<br>allow_user_login=false<br>allow_user_register=false<br>allow_user_change_username=false<br>allow_flow_limit=false<br>allow_rate_limit=false<br>allow_tunnel_num_limit=false<br>allow_local_proxy=false<br>allow_connection_num_limit=false<br>allow_multi_ip=false<br>system_info_display=false<br>http_cache=false<br>http_cache_length=100<br>http_add_origin_header=false<br>disconnect_timeout=60<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%B5%8B%E8%AF%95%E6%88%90%E5%8A%9F%E5%90%8E%EF%BC%9A%E9%85%8D%E7%BD%AE%E4%B8%BA%E6%9C%8D%E5%8A%A1\"><\/span>\u6d4b\u8bd5\u6210\u529f\u540e\uff1a\u914d\u7f6e\u4e3a\u670d\u52a1<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5148\u505c\u6389\u524d\u9762\u6d4b\u8bd5\u65f6\u7528 <code>nohup<\/code> \u62c9\u8d77\u6765\u7684 NPS\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># \u67e5\u8fdb\u7a0b<br>ps aux | grep nps<br>\u200b<br># \u505c\u6389\u6d4b\u8bd5\u8fdb\u7a0b<br>pkill -f '\/usr\/bin\/nps service'<br># \u5982\u679c\u4f60\u662f\u5f53\u524d\u76ee\u5f55\u76f4\u63a5 nohup .\/nps \u62c9\u8d77\u6765\u7684\uff0c\u4e5f\u53ef\u4ee5\u7528\uff1a<br>pkill -f '.\/nps'<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u521b\u5efa systemd \u670d\u52a1\u6587\u4ef6\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo tee \/etc\/systemd\/system\/nps.service &gt;\/dev\/null &lt;&lt;'UNIT'<br>[Unit]<br>Description=\u4e00\u6b3e\u8f7b\u91cf\u7ea7\u3001\u529f\u80fd\u5f3a\u5927\u7684\u5185\u7f51\u7a7f\u900f\u4ee3\u7406\u670d\u52a1\u5668\u3002\u652f\u6301tcp\u3001udp\u6d41\u91cf\u8f6c\u53d1\uff0c\u652f\u6301\u5185\u7f51http\u4ee3\u7406\u3001\u5185\u7f51socks5\u4ee3\u7406\uff0c\u540c\u65f6\u652f\u6301snappy\u538b\u7f29\u3001\u7ad9\u70b9\u4fdd\u62a4\u3001\u52a0\u5bc6\u4f20\u8f93\u3001\u591a\u8def\u590d\u7528\u3001header\u4fee\u6539\u7b49\u3002\u652f\u6301web\u56fe\u5f62\u5316\u7ba1\u7406\uff0c\u96c6\u6210\u591a\u7528\u6237\u6a21\u5f0f\u3002<br>After=network.target<br>\u200b<br>[Service]<br>Type=simple<br>ExecStart=\/usr\/bin\/nps service<br>Restart=always<br>RestartSec=3<br>\u200b<br>[Install]<br>WantedBy=multi-user.target<br>UNIT<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u91cd\u65b0\u52a0\u8f7d systemd \u5e76\u8bbe\u7f6e\u5f00\u673a\u81ea\u542f\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo systemctl daemon-reload<br>sudo systemctl enable nps<br>sudo systemctl start nps<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u68c0\u67e5\u670d\u52a1\u72b6\u6001\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo systemctl status nps --no-pager<br>systemctl is-enabled nps<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u68c0\u67e5\u7aef\u53e3\u662f\u5426\u6b63\u5e38\u76d1\u542c\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ss -lntup | grep -E ':8080|:8024|:8081|:8443'<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u67e5\u770b\u670d\u52a1\u65e5\u5fd7\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo journalctl -u nps -f<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%85%8D%E7%BD%AE%E5%92%8C%E4%BD%BF%E7%94%A8\"><\/span>\u5ba2\u6237\u7aef\u914d\u7f6e\u548c\u4f7f\u7528<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u670d\u52a1\u7aef\u8dd1\u8d77\u6765\u540e\uff0c\u8fdb\u5165 Web \u7ba1\u7406\u9875\u9762\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">http:\/\/VPS_IP:8080<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f7f\u7528\u9ed8\u8ba4\u8d26\u53f7\u767b\u5f55\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u7528\u6237\u540d\uff1aadmin<br>\u5bc6\u7801\uff1a123<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u7136\u540e\u6309\u8fd9\u4e2a\u987a\u5e8f\u64cd\u4f5c\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">1. \u5728 Web \u540e\u53f0\u521b\u5efa\u5ba2\u6237\u7aef client<br>2. \u590d\u5236\u670d\u52a1\u7aef\u751f\u6210\u7684\u5ba2\u6237\u7aef\u542f\u52a8\u547d\u4ee4<br>3. \u5230\u5185\u7f51\u673a\u5668\u4e0b\u8f7d\u5bf9\u5e94\u5e73\u53f0\u7684 npc<br>4. \u6267\u884c Web \u540e\u53f0\u7ed9\u51fa\u7684 npc \u542f\u52a8\u547d\u4ee4<br>5. \u56de\u5230 Web \u540e\u53f0\u786e\u8ba4\u5ba2\u6237\u7aef\u5df2\u5728\u7ebf<br>6. \u65b0\u5efa\u4e00\u6761 TCP \/ HTTP \/ HTTPS \u8f6c\u53d1\u6d4b\u8bd5<br>7. \u4ece\u516c\u7f51\u8bbf\u95ee\u6620\u5c04\u5730\u5740\uff0c\u786e\u8ba4\u5df2\u7ecf\u6253\u901a<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E4%B8%80%E5%A5%97%E6%9C%80%E5%B0%8F%E9%AA%8C%E8%AF%81%E5%91%BD%E4%BB%A4\"><\/span>\u4e00\u5957\u6700\u5c0f\u9a8c\u8bc1\u547d\u4ee4<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"># \u670d\u52a1\u7aef\u8fdb\u7a0b<br>ps aux | grep nps<br>\u200b<br># \u670d\u52a1\u7aef\u72b6\u6001<br>sudo systemctl status nps --no-pager<br>\u200b<br># \u670d\u52a1\u7aef\u7aef\u53e3<br>ss -lntup | grep -E ':8080|:8024|:8081|:8443'<br>\u200b<br># \u670d\u52a1\u7aef\u65e5\u5fd7<br>sudo journalctl -u nps -n 50 --no-pager<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u81ea\u52a8\u90e8\u7f72\uff08\u4f7f\u7528\u5b98\u65b9\u5b89\u88c5\u811a\u672c\uff09 bash &lt;(curl -fsS https:\/\/packages.ope [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3072","post","type-post","status-publish","format-standard","hentry","category-vxhs888p"],"_links":{"self":[{"href":"https:\/\/linuxjk.cn\/index.php?rest_route=\/wp\/v2\/posts\/3072","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linuxjk.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linuxjk.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linuxjk.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linuxjk.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3072"}],"version-history":[{"count":5,"href":"https:\/\/linuxjk.cn\/index.php?rest_route=\/wp\/v2\/posts\/3072\/revisions"}],"predecessor-version":[{"id":3189,"href":"https:\/\/linuxjk.cn\/index.php?rest_route=\/wp\/v2\/posts\/3072\/revisions\/3189"}],"wp:attachment":[{"href":"https:\/\/linuxjk.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3072"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linuxjk.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3072"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linuxjk.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3072"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}