212012
 

VPN的流量自己用不完,就想分给同学们用。又怕流量超了,起码得弄个流量的统计吧。老规矩,网上Google一下,果然已经有人做好了。本文的主要参考了这篇文章,首先对原作者表示感谢。

主机为CentOS 5.x,已经安装好了OpenVPN 2.1.1,MySQL 5.1.60,还缺少关键部件libpam-mysql。

1. 先来安装它:

wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
tar zxvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1
./configure && make && make install

2. 配置MySQL:

     先用MySQL管理员账号登陆数据库,添加用于VPN操作的账号和记录用的数据库、数据表。

mysql -uroot -p
-- 创建数据库
CREATE DATABASE openvpn;
 
-- 切换数据库
USE openvpn;
 
-- 创建用户,用户名openvpn,密码openvpn(可自行设定)
GRANT ALL ON openvpn.* TO 'openvpn'@'localhost' IDENTIFIED BY 'openvpn';
 
-- 创建用户数据表
CREATE TABLE IF NOT EXISTS `user` (
  `username` char(32) COLLATE utf8_unicode_ci NOT NULL,
  `password` char(128) COLLATE utf8_unicode_ci DEFAULT NULL,
  `active` int(10) NOT NULL DEFAULT '1',
  `creation` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `name` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `email` char(128) COLLATE utf8_unicode_ci DEFAULT NULL,
  `note` text COLLATE utf8_unicode_ci,
  `quota_cycle` int(10) NOT NULL DEFAULT '30',
  `quota_bytes` bigint(20) NOT NULL DEFAULT '10737418240',
  `enabled` int(10) NOT NULL DEFAULT '1',
  PRIMARY KEY (`username`),
  KEY `idx_active` (`active`),
  KEY `idx_enabled` (`enabled`)
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
 
-- 创建日志数据表
CREATE TABLE IF NOT EXISTS `log` (
  `username` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `end_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `trusted_ip` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
  `trusted_port` int(10) DEFAULT NULL,
  `protocol` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL,
  `remote_ip` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
  `remote_netmask` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
  `bytes_received` bigint(20) DEFAULT '0',
  `bytes_sent` bigint(20) DEFAULT '0',
  `status` int(10) NOT NULL DEFAULT '1',
  KEY `idx_username` (`username`),
  KEY `idx_start_time` (`start_time`),
  KEY `idx_end_time` (`end_time`)
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

3. 配置PAM for MySQL:

vim /etc/pam.d/openvpn

        进入输入模式,输入以下配置并保存。

Continue reading »

142012
 

原创文章,转载请注明来自Sean的技术博客

    自从买到了VPS,除了放置网站,就是玩一玩VPN了。早就听说过这种神奇的东西,用的还是不多,充满了好奇。放狗搜索了一下,发现最多的教程就是使用PPTPD搭建的,有的讲了配置,有的是用一键安装包。但是我的需求是一个能够支持IPv6的VPN,这样在校园网的环境下就可以免费的上网了,比较爽。以前一直用的是GoAgent来做代理,但是只是个普通的HTTP代理而已,还有单次返回数据500KB的限制,更是无法用任何的客户端。这些都使得这种方式并不能完全替代付费校园网IPv4的使用。

    后来发现大家表示OpenVPN是有支持IPv6的补丁包的,只要打好了补丁,就可以支持Server和Client之间的IPv6连接了。于是开始动手,以RedHat系列为例:

第一步,安装编译工具和OpenSSL。
      yum install gcc gcc-c++ kernel-devel openssl-devel

第二步,安装LZO压缩模块,后面OpenVPN用它来压缩。
      wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.04.tar.gz
   tar解压,进入目录./configure && make && make install

第三步,下载OpenVPN并打上IPv6的Patch,安装之。
   wget http://openvpn.net/release/openvpn-2.1.1.tar.gz
   wget https://github.com/downloads/jjo/openvpn-ipv6/openvpn-2.1.1-ipv6-0.4.11.patch.gz
   tar解压第一个,gunzip第二个,然后 patch –p0 < openvpn-2.1.1-ipv6-0.4.11.patch
   进入openvpn-2.1.1,./configure && make && make install
Continue reading »

072011
 

第五部分 高级Shell编程技巧

二十五、<< 的更多用法

使用:
    cat >> newfile << TAG
    Hello, everyone! 
    It's rainy outside.
    TAG
可以快速的将一段话放入新建立的一个文件,本例中为newfile。

如果一个脚本,按次序依次接收一些参数,那么可以用<<实现自动化输入:
    /usr/bin/my-own.sh << MAYDAY
    1
    3
    2
    MAYDAY

二十六、Shell工具与trap信号

日期时间函数date,date +%格式" "%格式。。。
    %d Day
    %m Month
    %y 两位数年份
    %Y 四位数年份
    %A 星期几
    %R 12:01
    %T 12:01:49

信号
    1    SIGHUP    挂起或父进程被杀死    Ctrl+D或exit命令
    2    SIGINT    键盘中断   Ctrl+C
    3    SIGQUIT   从键盘退出
    9    SIGKILL   无条件中止
    11   SIGSEGV   段(内存)冲突
    15   SIGTERM   软件终止(缺省杀进程)
可以使用kill -信号号码 pid 杀进程
    或者kill -s SIGKILL pid

使用trap捕捉信号
    trap "command" SIG1 SIG2 …
    其中command是捕捉到信号后要执行的函数名称,SIG1是指要捕捉的信号数字。
        特例,只捕捉不处理:trap "" 2 3
        特例,取消信号捕捉:trap 2 3

Continue reading »

062011
 

第四部分 基础Shell编程

十六、Shell脚本介绍

增加脚本执行权限,用 chmod u+x name.sh

执行脚本,使用 ./name.sh

十七、条件测试

测试一些条件,返回结果储存在 $? 中。测试条件,来实现一些分支判断。

使用test命令,或者[空格 命令 空格]来执行测试
    文件测试的选项有:
        -d 文件夹
        -f 普通文件
        -L 链接文件
        -r 可读
        -w 可写
        -x 可执行
        -s 非空文件
        例如$ [ -w myfirstc.c ]
                $ echo $?
                0
    逻辑连接两个测试:
        -a 与运算,如[ -w file1 -a -w file2 ]
        -o 或运算,如[ -r file1 -o -r file2 ]
        !  非运算,如[ ! -w myfirstc.c ]

Continue reading »

032011
 

第三部分 登录环境

十三、基本登录环境

用户和登录信息保存在/etc/passwd文件中,现代的Unix系统,密码常以MD5形式储存在/etc/shadow中。
    /etc/passwd的格式
    登录名 密码 用户id 组id   用户全名  主目录      使用的Shell
    sean  :x  :1000  :1000 :seanluo :/home/sean :/bin/bash

配置文件 /etc/profile 保存的是全局或局部环境变量、PATH信息、终端设置、安全命令如umask和其他信息。

配置文件 $HOME/.profile 保存的是用户配置信息,PS1和PS2可以设置提示符的信息。

stty用于设置终端特性,使用stty -a可以查看当前终端配置。

十四、环境信息和Shell变量

定义变量
    最基础的可以使用 VAR_NAME="value" 的形式,注意等号两端不能有空格,否则将被shell理解为命令。
    扩展的检测和定义变量的方式有:
         ${var_name:=value}    如果未设置变量,则设置其值为value。
                 注意与下面var_name:-value的区别。
         
${var_name:+value}    如果设置了变量,则重设其值。如没有设置,则返回空串。
         ${var_name:-value}    如果未设置变量,则在表达式中出现变量时使用value,
              但是并不改变var_name的未设置的状况。注意,仅仅是临时使用value这个值而已。 
         ${var_name:?info}    如果未设置变量,则显示用户自定义的出错信息。

Continue reading »

022011
 

十、sed命令的使用

sed是stream editor的缩写,它是一个非交互式的流文件编辑器。一般适用于按行操作文本的情况。
它的用法是
    sed [选项] '[基本命令]模式[基本命令]' 输入文件

sed 的一些选项
    -n 只打印匹配行,如不指定,则默认打印所有行。
    -f 从一个sed脚本文件获得指令
    -e 使用多个命令,如
        sed -n -e '/music/p' -e '/music/=' a.txt 其中第一个命令打印匹配行,第二个打印行号。

sed的模式
    和一般模式相比,sed多了关于行号的匹配方式,数字即代表了行号,$代表最后一行。
        所以'1,$p'表示打印第一至最后一行;'3p'表示打印第三行。
    要匹配一般的模式,要用斜线括起来,'/never/p'
    混用行号和模式的情况
        x                 x为一行号,如1

Continue reading »

012011
 

第二部分 文本过滤

七、Unix下的正则表达式

Unix下的正则表达式居然并不统一,这让我感到很困惑,似乎不同的命令中正则表达式的格式还不相同,或许是我接触的还是太少吧,这个问题以后再考略一下。这里先简单写写。

^               只匹配开头
$               只匹配结尾,特殊的:^$匹配空行
*               该字符前的模式重复0到多次
+               该字符前的模式重复1到多次
?               该字符前的模式重复0或1次
[]              表范围,如[a-zA-Z]或[1-5]等
[^pattern]      表不匹配该模式,如[^a-zA-Z]匹配非字母型字符
\               转义字符
.               表单个任意字符
pattern\{n\}    该模式重复恰好n次,加反斜线是为了{}的正常使用
pattern\{n,\}   该模式重复至少n次
pattern\{n,m\}  该模式重复n到m次

Continue reading »

292011
 

为了浮云,关于ARM9的学习先暂停一下。其实课程还在继续,只是最近有了新的目标。

第一部分 Shell

一、文件和权限

文件类型
  -  普通文件
  l  链接文件
  d  目录文件
  p  管道文件
  s  套接字文件
  b  块设备文件
  c  字符设备文件

文件权限
  -rwxrwxrwx    文件类型,文件属主权限,文件属主缺省组权限,其他用户权限
  权限:r 读(04)  w  写(02)  x  执行(01) s 表示粘滞,通常意味着文件放在swap分区
  chmod  更改文件权限,chmod u+x g-w o-r filename 属主增加执行权限,组去除写权限,其他用户去除读权限
  也可用上面的八进制数代替,rwx 为7,rw- 为6,r– 为4,r-x 为5
  目录的权限优先于文件的权限,可以使用 chmod -R 递归操作目录
  chown  更改文件属主
  chgrp  更改文件属组
  umask  权限掩码命令 umask 0022 意味着拿走缺省组和其他用户的w权限 Continue reading »