注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

青新的博客

记录工作点滴 分享学习快乐 享受家庭温馨

 
 
 

日志

 
 

Openvpn流量统计脚本及php页面设计  

2008-08-31 12:30:30|  分类: Linux学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

公司的VPN服务器已经稳定运行一年多了,以前都是在系统里查看vpn连接的日志,这样查看既不方便也不明了,所以利用周末在家的时候写了两个脚本和一个php页面来管理openvpn的连接与流量信息,可即时显示流量。各位如果如有需求还可以在php中增按流量计费的功能。本文基于linux fc5环境,需要mysql 数据库的支持,表log结构如下图,文档中的图片分辩率较低,可至博客相册中的相关抓图分类中查看大图。

Openvpn流量统计脚本及php页面设计 - 青新 - 青新的博客 

 

一、我的openvpn服务器端配置如下,贴出来各位参考。

port 1194

proto udp

dev tap

ca ca.crt

cert server.crt

key server.key  # This file should be kept secret

dh dh1024.pem

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

push "route 192.168.8.0 255.255.255.0"

push "route 172.22.16.0 255.255.240.0"

push "route 172.22.80.0 255.255.240.0"

push "route 172.22.96.0 255.255.240.0"

client-config-dir ccd

push "dhcp-option DOMAIN xxx.com.sh"

push "dhcp-option DNS  192.168.8.1"

push "dhcp-option DNS  192.168.8.11"

push "dhcp-option WINS 192.168.8.12"

client-to-client

keepalive 10 120

tls-auth ta.key 0 # This file is secret

comp-lzo

user nobody

group nobody

persist-key

persist-tun

log /etc/openvpn/openvpn.log

log-append  openvpn.log

verb 2

mute 5

crl-verify crl.pem

client-connect ./connect.sh

client-disconnect ./disconnect.sh

 

二、客户端通过openvpn连入时执行脚本connect.sh代码如下:

#!/bin/sh

DB='openvpn'

DBADMIN='user'

PASSWD='xxxxxxx'

mysql -u $DBADMIN -p$PASSWD -e "INSERT into log (starting_time,trusted_ip,trusted_port,protocol,remote_ip,remote_netmask,common_name)values(now(),'$trusted_ip',$trusted_port,'$proto','$ifconfig_pool_remote_ip','$ifconfig_pool_netmask','$common_name')" $DB

 

三、客户端与openvpn服务器断开连接时执行脚本disconnect.sh代码如下:

#!/bin/sh

DB='openvpn'

DBADMIN='user'

PASSWD='xxxxxxx'

mysql -u$DBADMIN -p$PASSWD -e "UPDATE openvpn.log SET end_time=now(),bytes_received=$bytes_received,bytes_sent=$bytes_sent WHERE trusted_ip='$trusted_ip' and trusted_port=$trusted_port and remote_ip='$ifconfig_pool_remote_ip' and remote_netmask='$ifconfig_pool_netmask' and common_name='$common_name'" $DB

 

四、php网页用于显示数据库中的信息,代码如下:

<html>

<head>

<meta http-equiv="Content-Language" content="zh-tw">

<meta http-equiv="Content-Type" content="text/html; charset=big5">

<meta http-equiv="refresh" content="300">

<title>VPN狀態信息</title>

<style type="text/css">

                     <!--

                     .Content_style1 {

                         font-family: MingLiU;

                         font-size: 12px;

                         }

                     .Title_style2 {

                              font-family: MingLiU;

                              font-size: 15px;

                              font-weight: bold;

                         }

.style5 {color: #FF0000}

body {

       margin-top: 0px;

       margin-bottom: 0px;

 

                     -->

</style>

</head>

<body>

<?

  function sizeformat($bytesize)

             {

                     $i=0;

                     while(abs($bytesize) >= 1024)

                            {

                             $bytesize=$bytesize/1024;

                                  $i++;

                                 if($i==4) break;

                            }

 

                      $units = array("Bytes","KB","MB","GB","TB");

                      $newsize=round($bytesize,2);

                  return("$newsize $units[$i]");

       } 

  $mysql_server_name="localhost";

  $mysql_username    ="user";

  $mysql_password    =" xxxxxxx ";

  $mysql_database    ="openvpn";

 

  $conn=mysql_connect($mysql_server_name,$mysql_username,$mysql_password);

  $sql="SELECT * FROM log  ORDER BY starting_time desc";

  mysql_query("SET NAMES BIG5");

  $result=mysql_db_query($mysql_database,$sql,$conn);

  //$row=mysql_fetch_row($result);

  //printf($row);

?>   

  <div align="right"> 

    <table width="100%"  border="1" cellpadding="1" cellspacing="1">

      <tr class="Title_style2" bgcolor="#808080">

        <td width="12%"><div align="left"><a starting_time</a></div></td>

        <td width="12%"><div align="left"><a end_time</a></div></td>

        <td width="8%"><div align="left"><a trusted_ip</a></div></td>

        <td width="10%"><div align="left"><a trusted_port</a></div></td>

        <td width="8%"><div align="left"><a protocol</a></div></td>

        <td width="11%"><div align="left"><a remote_ip</a></div></td>

        <td width="11%"><div align="left"><a remote_netmask</a></div></td>

        <td width="8%"><div align="left"><a common_name</a></div></td>

        <td width="11%"><div align="left"><a bytes_received</a></div></td>

        <td width="11%"><div align="left"><a bytes_sent</a></div></td>

      </tr>

         <?

           while($row=mysql_fetch_row($result))

                {      

                //print_r ($row);

         ?>

       <tr bgcolor="#C0C0C0" class="Content_style1">

        <td><?=$row[0]?></td>

        <td><?=$row[1]?></td>

        <td><?=$row[2]?></td>

        <td><?=$row[3]?></td>

        <td><?=$row[4]?></td>

        <td><?=$row[5]?></td>

        <td><?=$row[6]?></td>

        <td><?=$row[7]?></td>

        <td><?=sizeformat($row[8])?></td>

        <td><?=sizeformat($row[9])?></td>

       </tr>

         <?                                                                       

                 }           

         ?>

    </table>

    <p align="center" class="Content_style1">本頁面每5分鐘刷新一次</p>

  </div>

 </body>

</html>

五、完成后显示效果如下图: 文档中的图片分辩率较低,可至博客相册中的相关抓图分类中查看大图。

Openvpn流量统计脚本及php页面设计 - 青新 - 青新的博客

Openvpn流量统计脚本及php页面设计 - 青新 - 青新的博客

  评论这张
 
阅读(4947)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017