{"id":1533,"date":"2012-09-14T14:22:15","date_gmt":"2012-09-14T06:22:15","guid":{"rendered":"http:\/\/blog.nuface.tw\/?p=1533"},"modified":"2018-05-11T16:24:01","modified_gmt":"2018-05-11T08:24:01","slug":"openvpn-%e5%bb%ba%e7%bd%ae%e7%ad%86%e8%a8%98%e7%ac%ac8%e9%9b%86","status":"publish","type":"post","link":"https:\/\/blog.nuface.tw\/?p=1533","title":{"rendered":"OpenVPN \u5efa\u7f6e\u7b46\u8a18(\u7b2c8\u96c6)"},"content":{"rendered":"<p>\u4e0a\u4e00\u96c6\u6700\u5f8c\u6709\u8ac7\u5230\uff0c\u5728\u5efa\u7acbVPN \u9023\u7dda\u6642\uff0c\u53ef\u4ee5\u518d\u52a0\u5165\u5e33\u865f\u5bc6\u78bc\u7684\u8a8d\u8b49\uff0c\u540c\u6642\u53ef\u4ee5\u505a\u4e00\u4e9bLog \u53ca\u7279\u5225\u7684\u7ba1\u5236\u3002<\/p>\n<p>\u4f8b\u5982\uff1a\u8a18\u9304\u5c0d\u65b9\u4ec0\u9ebc\u6642\u9593\u9ede\u767b\u5165\uff0c\u7531\u90a3\u500bIP\u767b\u5165\u9032\u4f86\uff0c\u4f7f\u7528\u4e86\u591a\u5c11\u6d41\u91cf\uff0c\u540c\u6642\u53ef\u4ee5\u9650\u5236User \u5e7e\u9ede\u53ef\u4ee5\u767b\u5165\uff0cUser\u53ef\u4ee5\u4f7f\u7528\u7684\u6d41\u91cf\u7b49\u7b49\uff0e\uff0e\uff0e<\/p>\n<p>\u9019\u4e00\u96c6\u4e3b\u8981\u4f86\u8ddf\u5927\u5bb6\u5206\u4eab\u9019\u4e9b\u529f\u80fd\u8981\u5982\u4f55\u5be6\u73fe\u3002<\/p>\n<p><!--more--><br \/>\n<img decoding=\"async\" src=\"\/\/blog.nuface.tw\/wp-content\/uploads\/2018\/05\/OpenVPN-Book.png\" alt=\"OpenVPN\" \/><br \/>\n<a href=\"https:\/\/www.packtpub.com\/openvpn\/book\/mid\/2405065clw5q\">OpenVPN: Building and Integrating Virtual Private Networks <\/a><\/p>\n<p>\u524d\u60c5\u63d0\u8981\uff1a<a href=\"\/\/blog.nuface.tw\/?p=1347\">OpenVPN \u5efa\u7f6e\u7b46\u8a18(\u7b2c7\u96c6)<\/a><\/p>\n<p>\u5c0f\u745e\u4f7f\u7528\u4e86\uff0c\u90e8\u4efd\u7684shell script + PHP + MySql \u4f86\u5be6\u4f5c\u9019\u4e9b\u529f\u80fd\u3002<\/p>\n<p>\u9996\u5148\u662f\u5728 server.conf \u589e\u52a0\u4e00\u4e9b\u8a2d\u5b9a\u3002<\/p>\n<blockquote><p>[root@vpnserver1 ~]# vi \/etc\/openvpn\/server.conf<br \/>\n\u5728\u6700\u5f8c\u52a0\u5165<\/p>\n<p>tmp-dir \/etc\/openvpn\/temp<\/p>\n<p>auth-user-pass-verify \/etc\/openvpn\/auth_sh.sh via-file<\/p>\n<p>client-connect \/etc\/openvpn\/client_connect.php<\/p>\n<p>client-disconnect \/etc\/openvpn\/client_disconnect.php<\/p><\/blockquote>\n<p>1. \u5efa\u7acb\u4e00\u500b temp \u76ee\u9304\uff0c\u5982\u679c\u4e0d\u6307\u5b9a\uff0c\u6703\u76f4\u63a5\u4f7f\u7528\u5230\/tmp \u76ee\u9304\u3002<br \/>\n2. \u6307\u5b9a auth-user-pass-verify \u8981\u8a8d\u8b49\u7684\u6307\u4ee4\u78bc\uff0c\u53ca\u4f7f\u7528\u4f55\u7a2e\u5e33\u5bc6\u50b3\u905e\u7684\u65b9\u5f0f\u3002<br \/>\n3. \u6307\u5b9a client-connect \u9023\u7dda\u5f8c\u8981\u57f7\u884c\u7684\u6307\u4ee4\u78bc\u3002<br \/>\n4. \u6307\u5b9a client-disconnect \u65b7\u7dda\u5f8c\u8981\u57f7\u884c\u7684\u6307\u4ee4\u78bc\u3002<\/p>\n<p>\u5728\u4f7f\u7528\u8005\u767b\u5165\u6642\uff0c\u7cfb\u7d71\u6703\u8a18\u9304\u4e00\u500b\u74b0\u5883\u8b8a\u6578\uff0c\u53eb\u505acommon_name\uff0c\u8a18\u9304\u4f7f\u7528\u8005\u767b\u5165\u7684\u5e33\u865f\uff0c\u57fa\u672c\u4e0a\u5c31\u662f\u4f7f\u7528\u9019\u500bUser\u6240\u5206\u914d\u6191\u8b49\u4e0a\u7684common name\u3002<br \/>\n\u5982\u679c\u4f60\u5b8c\u5168\u4e0d\u60f3\u7528\u4f7f\u7528\u8005\u6191\u8b49\uff0c\u53ea\u60f3\u4f7f\u7528\u81ea\u5efa\u7684\u5e33\u865f\u5bc6\u78bc\u7ba1\u7406\uff0c\u90a3\u5c31\u5728server.conf \u4e2d\u518d\u52a0\u5165\uff1a<\/p>\n<blockquote><p>client-cert-not-required<br \/>\nusername-as-common-name<\/p><\/blockquote>\n<p>\u52a0\u5165\u5f8c\uff0c\u5728\u5f8c\u9762\u7684\u6307\u4ee4\u78bc\uff0c\u53d6\u5f97common_name \u6642\uff0c\u5c31\u6703\u8b8a\u6210\u4f7f\u7528\u8005\u8f38\u5165\u7684\u5e33\u865f\u3002\u81f3\u65bc\u8981\u7528\u4ec0\u9ebc\u65b9\u5f0f\uff0c\u770b\u5404\u4f4d\u670b\u53cb\u60f3\u600e\u9ebc\u63a7\u5236\uff1f\u5c0f\u745e\u9084\u662f\u4f7f\u7528\u6191\u8b49\u4e0a\u7684common name\uff0c\u9032\u884c\u5f8c\u7e8c\u7684\u63a7\u5236\uff0c\u540c\u6642\u7ba1\u63a7\uff0c\u4e00\u500b\u6191\u8b49\u53ea\u53ef\u4ee5\u767b\u5165\u4e00\u6b21\u3002\u5728\u767b\u5165\u4e2d\uff0c\u5176\u5b83\u6709\u540c\u6a23\u6191\u8b49\u7684\u4eba\uff0c\u5c31\u4e0d\u53ef\u4ee5\u91cd\u8907\u767b\u5165\u3002<\/p>\n<p>\u5c0f\u745e\u5beb\u4e86\u5e7e\u652f\u63a7\u5236\u7684\u7a0b\u5f0f\u5982\u4e0b\uff0c\u8acb\u53c3\u8003\uff1a<\/p>\n<p><strong>\u8a8d\u8b49\u7684shell script<\/strong><\/p>\n<blockquote><p>[root@vpnserver1 ~]# vi \/etc\/openvpn\/auth_sh.sh<br \/>\n<code><br \/>\n#!\/bin\/bash<\/p>\n<p>for stat in `php \/etc\/openvpn\/auth_sql.php $1`<br \/>\ndo<br \/>\n  if [ \"$stat\" = \"1\" ]; then<br \/>\n        echo \"fall\"<br \/>\n        exit 1<br \/>\n  else<br \/>\n        echo \"ok\"<br \/>\n        exit 0<br \/>\n  fi<br \/>\ndone<br \/>\n<\/code>\n<\/p><\/blockquote>\n<p><strong>\u8a8d\u8b49\u7684php\u7a0b\u5f0f<\/strong><\/p>\n<blockquote><p>\n[root@vpnserver1 ~]# vi \/etc\/openvpn\/auth_sql.php<br \/>\n<code><br \/>\n#! \/usr\/bin\/php<br \/>\n\u300a\uff1fPHP<br \/>\ninclude 'connect.php';<br \/>\n$i_filename = $argv[1];<br \/>\n$i_fp = fopen($i_filename,'r');<br \/>\n$i_username = chop(fgets($i_fp,4096));<br \/>\n$i_passwd = chop(fgets($i_fp,4096));<br \/>\nfclose ($i_fp);<\/p>\n<p>\/\/ get user info<br \/>\n$v_sql = \"select userId,userPwd,timelimit,startTime,endTime from users where effective='Y' and userAcc='\".$i_username.\"' and currentLogId is NULL\";<br \/>\n$v_res = mysql_query($v_sql);<\/p>\n<p>\/\/ \u6c92\u6709\u9019\u500b\u5e33\u865f<br \/>\nif (mysql_num_rows($v_res)==0)<br \/>\n{<br \/>\n echo '1';<br \/>\n exit;<br \/>\n}<\/p>\n<p>\/\/ get user info<br \/>\nlist($userId,$userPwd,$timelimit,$startTime,$endTime)=mysql_fetch_row($v_res);<\/p>\n<p>\/\/ check passwd \u5bc6\u78bc\u932f\u8aa4<br \/>\nif ($userPwd != $i_passwd)<br \/>\n{<br \/>\n echo '2';<br \/>\n exit;<br \/>\n}<\/p>\n<p>\/\/ check time limit \u4e0d\u5728\u5141\u8a31\u7684\u6642\u9593\u5167\u767b\u5165<br \/>\nif ($timelimit == 'Y') {<br \/>\n if (($startTime>date('H')) or ($endTime \u300a date('H'))) {<br \/>\n  echo '3';<br \/>\n  exit;<br \/>\n }<br \/>\n}<br \/>\n\/\/ check pass \u904e\u95dc\u4e86<br \/>\necho '0';<br \/>\n<\/code>\n<\/p><\/blockquote>\n<p><strong>\u9023\u7dda\u5f8c\u8981\u57f7\u884c\u6307\u4ee4\u78bc\uff0dphp\u7a0b\u5f0f<\/strong><\/p>\n<blockquote><p>\n[root@vpnserver1 ~]# vi \/etc\/openvpn\/client_connect.php<br \/>\n<code><br \/>\n#! \/usr\/bin\/php<br \/>\n\u300a\uff1fPHP<br \/>\n\/\/\u8cc7\u6599\u5eab\u9023\u63a5<br \/>\ninclude 'connect.php';<\/p>\n<p>\/\/ get user common name  \u524d\u9762\u6709\u63d0\u5230\u7684\u74b0\u5883\u8b8a\u6578<br \/>\n$i_common_name = getenv(common_name);<br \/>\n$i_trusted_ip = getenv(trusted_ip);<\/p>\n<p>\/\/ get userId<br \/>\n$v_sql = \"select userId from users where userAcc='\".$i_common_name.\"'\";<br \/>\n$v_res = mysql_query($v_sql);<br \/>\nlist($userId)=mysql_fetch_row($v_res);<\/p>\n<p>\/\/ insert into logs \u5beb\u5165\u8a18\u9304\u6a94<br \/>\n$v_sql = \"insert into logs (userId,loginTime,loginIp) values('\".$userId.\"',now(),'\".$i_trusted_ip.\"')\";<br \/>\n$v_res = mysql_query($v_sql);<\/p>\n<p>\/\/ get logId<br \/>\n$logId = mysql_insert_id();<\/p>\n<p>\/\/ update users info \u628a\u76ee\u524d\u7684log id \u66f4\u65b0\u56deuser \u4e3b\u6a94<br \/>\n\/\/ \u5982\u679c\u6709\u5225\u7684\u96fb\u8166\u4f7f\u7528\u540c\u4e00\u500b\u5e33\u865f\u767b\u5165\uff0c\u9019\u500b log id \u5e33\u4e0d\u662f\u7a7a\u7684null ,<br \/>\n\/\/ \u8a8d\u8b49\u7a0b\u5f0f\u5c31\u6703\u8a8d\u8b49\u5931\u6557\uff0c\u53ef\u5be6\u73fe\u4e00\u500b\u5e33\u865f\u53ea\u53ef\u4ee5\u540c\u6642\u4e0a\u7dda\uff11\u6b21\uff0c\u9664\u975e\u767b\u51fa\uff0c<br \/>\n\/\/ \u624d\u53ef\u4ee5\u5728\u5225\u53f0\u96fb\u8166\u4e0a\u767b\u5165<br \/>\n$v_sql = \"update users set currentLogId='\".$logId.\"' where userId='\".$userId.\"'\";<br \/>\n$v_res = mysql_query($v_sql);<\/p>\n<p>\/\/ pass 0 to end<\/p>\n<p>echo '0';<\/p>\n<p>\uff1f\u300b<\/p>\n<p><\/code>\n<\/p><\/blockquote>\n<p><strong>\u65b7\u7dda\u5f8c\u8981\u57f7\u884c\u6307\u4ee4\u78bc\uff0dphp\u7a0b\u5f0f<\/strong><\/p>\n<blockquote><p>\n[root@vpnserver1 ~]# vi \/etc\/openvpn\/client_disconnect.php<br \/>\n<code><br \/>\n#! \/usr\/bin\/php<br \/>\n\u300a\uff1fPHP<br \/>\n\/\/\u8cc7\u6599\u5eab\u9023\u63a5<br \/>\ninclude 'connect.php';<\/p>\n<p>\/\/ get user common name  \u524d\u9762\u6709\u63d0\u5230\u7684\u74b0\u5883\u8b8a\u6578<br \/>\n$i_common_name = getenv(common_name);<br \/>\n\/\/ user \u7684\u50b3\u8f38\u8cc7\u6599\u91cf<br \/>\n$i_bytes_received = getenv(bytes_received);<br \/>\n$i_bytes_sent = getenv(bytes_sent);<\/p>\n<p>\/\/ get userId<br \/>\n$v_sql = \"select userId,currentLogId from users where userAcc='\".$i_common_name.\"'\";<br \/>\n$v_res = mysql_query($v_sql);<br \/>\nlist($userId,$currentLogId)=mysql_fetch_row($v_res);<\/p>\n<p>\/\/ update logs \u66f4\u65b0\u8a18\u9304\u6a94<br \/>\n$v_sql = \"update logs set logoutTime=now(), bytes_received='\".$i_bytes_received.\"', bytes_sent='\".$i_bytes_sent.\"' where logId = '\".$currentLogId.\"'\";<br \/>\n$v_res = mysql_query($v_sql);<\/p>\n<p>\/\/ update users info \u628alog id \u6e05\u7a7a\uff0c\u4ee5\u4fbf\u4e0b\u6b21user \u53ef\u4ee5\u901a\u904e\u8a8d\u8b49\uff0c\u767b\u5165\u7cfb\u7d71<br \/>\n$v_sql = \"update users set currentLogId = NULL where userAcc='\".$i_common_name.\"'\";<br \/>\n$v_res = mysql_query($v_sql);<\/p>\n<p>\/\/ pass 0 to end<\/p>\n<p>echo '0';<\/p>\n<p>\uff1f\u300b<\/p>\n<p><\/code>\n<\/p><\/blockquote>\n<p><strong>\u8cc7\u6599\u5eab\u9023\u63a5\u7a0b\u5f0f\uff0dphp\u7a0b\u5f0f<\/strong><\/p>\n<blockquote><p>\n[root@vpnserver1 ~]# vi \/etc\/openvpn\/connect.php<br \/>\n<code><br \/>\n\u300a\uff1fPHP<br \/>\n$hostname = 'localhost';<br \/>\n$dbname = 'vpn';<br \/>\n$username = 'vpn';<br \/>\n$passwd = 'vpn999';<\/p>\n<p>if (!($link=mysql_connect($hostname , $username ,$passwd ))) {<br \/>\nprintf(\"\u5167\u90e8\u932f\u8aa4%d:%s\\n\",mysql_errno(),mysql_error());<\/p>\n<p>exit();<\/p>\n<p>}<\/p>\n<p>if (!mysql_select_db($dbname,$link)) {<\/p>\n<p>printf(\"\u9078\u64c7%s\u8cc7\u6599\u5eab\u932f\u8aa4\",$dbname);<\/p>\n<p>printf(\"\u5167\u90e8\u932f\u8aa4%d:%s\\n\",mysql_errno(),mysql_error());<\/p>\n<p>exit();<\/p>\n<p>}<\/p>\n<p>\uff1f\u300b<\/p>\n<p><\/code>\n<\/p><\/blockquote>\n<p>\u5c07\u9019\u4e9b\u63a7\u5236\u7684\u7a0b\u5f0f\uff0c\u8a2d\u5b9a\u70ba\u53ef\u57f7\u884c\u6a94\u3002<\/p>\n<blockquote><p>\n[root@vpnserver1 ~]# chmod +x \/etc\/openvpn\/*.php<br \/>\n[root@vpnserver1 ~]# chmod +x \/etc\/openvpn\/*.sh\n<\/p><\/blockquote>\n<p>\u63a7\u5236\u7684\u7a0b\u5f0f\uff0c\u53ea\u6709\u9019\u4e9b\uff0c\u5404\u4f4d\u53ef\u4ee5\u6309\u81ea\u5df1\u7684\u72c0\u6cc1\u505a\u8abf\u6574\u3002 \u63a5\u8457\u9032\u5165mysql \u8cc7\u6599\u5eab\uff0c\u5efa\u7acb\u76f8\u95dc\u7684DB\u767b\u5165\u8cc7\u6599\uff0c\u53caVPN\u63a7\u5236\u7684Table \u53ca\u4f7f\u7528\u8005\u8cc7\u6599\u3002<\/p>\n<p><strong>\u8cc7\u6599\u5eab\u555f\u52d5\uff08\u5982\u679c\u6c92\u6709\u555f\u52d5\u7684\u8a71\uff09<\/strong><\/p>\n<blockquote><p>\n[root@vpnserver1 ~]# service mysqld start\n<\/p><\/blockquote>\n<p><strong>\u8cc7\u6599\u5eab\u5b89\u5168\u8a2d\u5b9a\uff08\u5982\u679c\u4e4b\u524d\u6c92\u6709\u8a2d\u5b9a\u904e\u7684\u8a71\uff09<\/strong><\/p>\n<blockquote><p>\n[root@vpnserver1 ~]# \/usr\/bin\/mysql_secure_installation\n<\/p><\/blockquote>\n<p><strong>\u767b\u5165mysql\uff08\u4e5f\u53ef\u4ee5\u4f7f\u7528phpMyAdmin\uff0c\u770b\u500b\u4eba\u7fd2\u6163\uff09<\/strong><\/p>\n<blockquote><p>\n[root@vpnserver1 ~]# mysql -u root -p\n<\/p><\/blockquote>\n<p><strong>\u5efa\u7acbVPN\u8cc7\u6599\u5eab<\/strong><\/p>\n<blockquote><p><code><br \/>\nmysql> CREATE DATABASE `vpn` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;<br \/>\n<\/code><\/p><\/blockquote>\n<p><strong>\u5efa\u7acbVPN\u8cc7\u6599\u5eab-\u4f7f\u7528\u8005<\/strong><\/p>\n<blockquote><p><code><br \/>\nmysql> CREATE USER 'vpn'@'localhost' IDENTIFIED BY 'vpn999';  (\u5bc6\u78bc\u81ea\u5df1\u66f4\u6539)<br \/>\n<\/code><\/p><\/blockquote>\n<p><strong>\u958b\u653evpn\u4f7f\u7528\u8005\u53ef\u4ee5\u4f7f\u7528VPN\u8cc7\u6599\u5eab\u6b0a\u9650<\/strong><\/p>\n<blockquote><p><code><\/p>\n<p>mysql> GRANT USAGE ON *.* TO 'vpn'@'localhost' IDENTIFIED BY 'vpn999' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;<\/p>\n<p>mysql> GRANT ALL PRIVILEGES ON `vpn` . * TO 'vpn'@'localhost' WITH GRANT OPTION ;<\/p>\n<p><\/code><\/p><\/blockquote>\n<p><strong>\u9078\u64c7\u4f7f\u7528VPN\u8cc7\u6599\u5eab<\/strong><\/p>\n<blockquote><p><code><\/p>\n<p>mysql> use vpn ;<\/p>\n<p><\/code><\/p><\/blockquote>\n<p><strong>\u5efa\u7acbVPN User \u8868\u683c<\/strong><\/p>\n<blockquote><p><code><\/p>\n<p>mysql> CREATE TABLE `users` (<br \/>\n  `userId` int(11) NOT NULL auto_increment,<br \/>\n  `userAcc` varchar(20) collate utf8_unicode_ci NOT NULL,<br \/>\n  `userPwd` varchar(255) collate utf8_unicode_ci NOT NULL,<br \/>\n  `userName` varchar(255) collate utf8_unicode_ci default NULL,<br \/>\n  `userEmail` varchar(255) collate utf8_unicode_ci default NULL,<br \/>\n  `desc` varchar(255) collate utf8_unicode_ci default NULL,<br \/>\n  `effective` enum('Y','N') collate utf8_unicode_ci NOT NULL default 'Y',<br \/>\n  `timelimit` enum('Y','N') collate utf8_unicode_ci NOT NULL default 'N',<br \/>\n  `startTime` int(11) default '8',<br \/>\n  `endTime` int(11) default '19',<br \/>\n  `adminAcc` enum('Y','N') collate utf8_unicode_ci NOT NULL default 'N',<br \/>\n  `currentLogId` int(11) default NULL,<br \/>\n  PRIMARY KEY  (`userId`),<br \/>\n  UNIQUE KEY `userAcc` (`userAcc`)<br \/>\n) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;<\/p>\n<p><\/code><\/p><\/blockquote>\n<p>\u7a0b\u5f0f\u78bc\u6709\u9ede\u4e82\uff0c\u770b\u4e00\u4e0b\u8cbc\u5716\uff0c\u6bd4\u8f03\u6e05\u695a\u3002<\/p>\n<p><img decoding=\"async\" src=\"\/\/blog.nuface.tw\/wp-content\/uploads\/2012\/09\/openvpn-auth-user-table-1.jpg\" alt=\"openvpn \u5e33\u865f\u8a8d\u8b49 \u4f7f\u7528\u8005 table\" \/><\/p>\n<p><strong>\u5efa\u7acb\u4f7f\u7528\u8005\u767b\u5165\u8a18\u9304\u6a94\u8868\u683c<\/strong><\/p>\n<blockquote><p><code><\/p>\n<p>mysql> CREATE TABLE `logs` (<br \/>\n  `logId` int(11) NOT NULL auto_increment,<br \/>\n  `userId` int(11) NOT NULL,<br \/>\n  `loginTime` datetime default NULL,<br \/>\n  `logoutTime` datetime default NULL,<br \/>\n  `loginIp` varchar(255) collate utf8_unicode_ci default NULL,<br \/>\n  `bytes_received` int(11) default NULL,<br \/>\n  `bytes_sent` int(11) default NULL,<br \/>\n  PRIMARY KEY  (`logId`)<br \/>\n) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;<\/p>\n<p><\/code><\/p><\/blockquote>\n<p>\u7a0b\u5f0f\u78bc\u6709\u9ede\u4e82\uff0c\u770b\u4e00\u4e0b\u8cbc\u5716\uff0c\u6bd4\u8f03\u6e05\u695a\u3002<\/p>\n<p><img decoding=\"async\" src=\"\/\/blog.nuface.tw\/wp-content\/uploads\/2012\/09\/openvpn-auth-log-table-1.jpg\" alt=\"openvpn \u5e33\u865f\u8a8d\u8b49 \u8a18\u9304\u6a94 table\" \/><\/p>\n<p><strong>\u65b0\u589e\u4f7f\u7528\u8005\u5e33\u865f\u53ca\u5bc6\u78bc<\/strong><\/p>\n<blockquote><p><code><\/p>\n<p>mysql> INSERT INTO `vpn`.`users` (`userId`, `userAcc`, `userPwd`, `userName`, `userEmail`, `desc`, `effective`, `timelimit`, `startTime`, `endTime`, `adminAcc`, `currentLogId`) VALUES (NULL, 'client1', 'client999', 'Rico', 'rico@nuface.tw', 'Test Account', 'Y', 'Y', '8', '19', 'N', NULL);<\/p>\n<p><\/code><\/p><\/blockquote>\n<p>\u7a0b\u5f0f\u78bc\u6709\u9ede\u4e82\uff0c\u770b\u4e00\u4e0b\u8cbc\u5716\uff0c\u6bd4\u8f03\u6e05\u695a\u3002<\/p>\n<p><img decoding=\"async\" src=\"\/\/blog.nuface.tw\/wp-content\/uploads\/2012\/09\/openvpn-auth-user-record.jpg\" alt=\"openvpn \u5e33\u865f\u8a8d\u8b49 \u5e33\u865f\u8cc7\u6599\" \/><\/p>\n<p>\u5230\u9019\u88cf\uff0cserver \u7aef\u7684\u5de5\u4f5c\u5c31\u5df1\u7d93\u5b8c\u6210\u4e86\uff0c\u63a5\u8457\u4fee\u6539 user \u7aef\u7684\u8a2d\u5b9a\u6a94\u3002<br \/>\n\u6253\u958bclient1.opvn \uff08\u8996\u5404\u4f4d\u81ea\u5df1\u7684\u72c0\u6cc1\uff09\uff0c\u5728\u6700\u5f8c\u52a0\u5165 \uff1a<\/p>\n<blockquote><p>\nauth-user-pass\n<\/p><\/blockquote>\n<p><img decoding=\"async\" src=\"\/\/blog.nuface.tw\/wp-content\/uploads\/2012\/09\/openvpn-client-config.jpg\" alt=\"Open VPN \u8a8d\u8b49 client \u8a2d\u5b9a\" \/><\/p>\n<p>\u5230\u9019\u500b\u6b65\u9a5f\uff0c\u4f7f\u7528\u8005\u5c31\u5fc5\u9808\u5728\u767b\u5165\u6642\u8f38\u5165\u5e33\u865f\u8ddf\u5bc6\u78bc\u4e86\u3002<\/p>\n<p><img decoding=\"async\" src=\"\/\/blog.nuface.tw\/wp-content\/uploads\/2012\/09\/openvpn-auth-1.jpg\" alt=\"Open VPN \u5e33\u865f\u8a8d\u8b49\" \/><\/p>\n<p>\u4e4b\u5f8c\u6240\u6709\u7684\u767b\u5165\u8cc7\u6599\uff0c\u90fd\u6703\u8a18\u9304\u5728\u8cc7\u6599\u5eab\u4e2d\u3002\u7ba1\u7406\u8005\u53ef\u4ee5\u77e5\u9053User \u4ec0\u9ebc\u6642\u5019\u767b\u5165\u7cfb\u7d71\uff1b\u4ec0\u9ebc\u6642\u5019\u767b\u51fa\u7cfb\u7d71\uff1b\u50b3\u8f38\u4e86\u591a\u5c11\u6d41\u91cf\uff1b\u7531\u90a3\u500bIP\u767b\u5165\u9032\u4f86\uff1b\u90fd\u53ef\u4ee5\u5728\u8cc7\u6599\u5eab\u4e2d\uff0c\u770b\u7684\u4e00\u76ee\u4e86\u7136\u4e86\u3002\u81f3\u65bc\u66f4\u9032\u968e\u7684\u63a7\u5236\uff0c\u5c0f\u745e\u5c31\u4e0d\u518d\u737b\u919c\uff0c\u7531\u5404\u4f4d\u540c\u597d\u81ea\u884c\u767c\u63ee\u56c9\uff01\u4ee5\u4e0a\u5e0c\u671b\u5c0d\u5927\u5bb6\u6709\u5e6b\u52a9\u3002<\/p>\n<p><img decoding=\"async\" src=\"\/\/blog.nuface.tw\/wp-content\/uploads\/2012\/09\/openvpn-auth-log-record-1.jpg\" alt=\"openvpn \u5e33\u865f\u8a8d\u8b49 \u8a18\u9304\u8cc7\u6599\" \/><\/p>\n<p>\u9084\u6709\u4ec0\u9ebc\u9084\u6c92\u6709\u5beb\u7684\u5462\uff1f\u5176\u5be6\u505a\u5230\u9019\u88cf\uff0c\u5305\u88b1\u5df1\u7d93\u6296\u7684\u5dee\u4e0d\u591a\u4e86\uff0c\u518d\u6296\u7684\u8a71\uff0c\u5167\u8863\u5167\u8932\u90fd\u5feb\u6389\u51fa\u4f86\u5566\uff0e\uff0e\uff0e\uff0e\u6703\u8b93\u5927\u5bb6\u898b\u7b11\u7684^_^<\/p>\n<p>\u4e0d\u904e\u5728VPN\u7684\u61c9\u7528\u4e0a\uff0c\u771f\u7684\u9084\u6709\u7d42\u6975\u7684\u4e00\u62db\uff0c\u4e5f\u662f\u5c0f\u745eOpenVPN\u5269\u4e0b\u7684\u6700\u5f8c\u4e00\u62db\u3002\u5c31\u662f site to site \u7684VPN\u5efa\u7f6e\uff0c\u7b49\u4e0b\u6b21\u6709\u6642\u9593\uff0c\u518d\u628a\u9019\u6700\u5f8c\u4e00\u62db\u8cbc\u51fa\u4f86\uff0c\u8ddf\u5927\u5bb6\u5206\u4eab\uff0c\u6211\u7684OpenVPN\u4e5f\u5c31\u7b97\u662f\u529f\u5fb7\u5713\u6eff\u4e86\u3002<\/p>\n<p>site to site open vpn&#8230;.\u5f85\u7e8c\uff01<\/p>\n<p><a href=\"\/\/blog.nuface.tw\/?p=1608\">OpenVPN \u5efa\u7f6e\u7b46\u8a18(\u7b2c9\u96c6)<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e0a\u4e00\u96c6\u6700\u5f8c\u6709\u8ac7\u5230\uff0c\u5728\u5efa\u7acbVPN \u9023\u7dda\u6642\uff0c\u53ef\u4ee5\u518d\u52a0\u5165\u5e33\u865f\u5bc6\u78bc\u7684\u8a8d\u8b49\uff0c\u540c\u6642\u53ef\u4ee5\u505a\u4e00\u4e9bLog \u53ca\u7279\u5225\u7684\u7ba1\u5236\u3002<\/p>\n<p>\u4f8b\u5982\uff1a\u8a18\u9304\u5c0d\u65b9\u4ec0\u9ebc\u6642\u9593\u9ede\u767b\u5165\uff0c\u7531\u90a3\u500bIP\u767b\u5165\u9032\u4f86\uff0c\u4f7f\u7528\u4e86\u591a\u5c11\u6d41\u91cf\uff0c\u540c\u6642\u53ef\u4ee5\u9650\u5236User \u5e7e\u9ede\u53ef\u4ee5\u767b\u5165\uff0cUser\u53ef\u4ee5\u4f7f\u7528\u7684\u6d41\u91cf\u7b49\u7b49\uff0e\uff0e\uff0e<\/p>\n<p>\u9019\u4e00\u96c6\u4e3b\u8981\u4f86\u8ddf\u5927\u5bb6\u5206\u4eab\u9019\u4e9b\u529f\u80fd\u8981\u5982\u4f55\u5be6\u73fe\u3002<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,24],"tags":[72,123,188,28],"class_list":["post-1533","post","type-post","status-publish","format-standard","hentry","category-mistech","category-mistech-net","tag-open-vpn","tag-openvpn","tag-openvpn-","tag-28"],"_links":{"self":[{"href":"https:\/\/blog.nuface.tw\/index.php?rest_route=\/wp\/v2\/posts\/1533","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.nuface.tw\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nuface.tw\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nuface.tw\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nuface.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1533"}],"version-history":[{"count":54,"href":"https:\/\/blog.nuface.tw\/index.php?rest_route=\/wp\/v2\/posts\/1533\/revisions"}],"predecessor-version":[{"id":1920,"href":"https:\/\/blog.nuface.tw\/index.php?rest_route=\/wp\/v2\/posts\/1533\/revisions\/1920"}],"wp:attachment":[{"href":"https:\/\/blog.nuface.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1533"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nuface.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1533"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nuface.tw\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}