centos pptp+l2tp+radius+mysql+tc限速,安装配置

 
1、PPTP安装
软件包
    dkms
    kernel_ppp_mppe
    ppp
    pptpd
下载地址
    kernel_ppp_mppe  
    http://poptop.sourceforge.net/yu ... .2-3dkms.noarch.rpm  
    pptpd  
    http://poptop.sourceforge.net/yu ... -1.rhel5.1.i386.rpm
安装
    # yum install dkms
    # rpm -ivh kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm
    # yum install ppp
    # rpm -ivh pptpd-1.3.4-1.rhel5.1.i386.rpm

配置/etc/ppp/pptpd.conf
内容以下:
    option /etc/ppp/options.pptpd
    localip 192.168.1.1
    remoteip 192.168.1.2-200
    说明:localip 为***接口IP,remoteip 为***客户端配置IP
配置/etc/ppp/options.pptpd
内容以下:    name pptpd   
    refuse-pap   
    refuse-chap   
    refuse-mschap   
    require-mschap-v2   
    require-mppe-128   
    ms-dns 8.8.8.8
    proxyarp
    lock
说明:
    name pptpd : pptpd server 的名称。
    refuse-pap : 拒绝 pap 身份验证模式。
    refuse-chap : 拒绝 chap 身份验证模式。
    refuse-mschap : 拒绝 mschap 身份验证模式。
    require-mschap-v2 : 在端点进行链接握手时须要使用微软的 mschap-v2 进行自身验证。
    require-mppe-128 : MPPE 模块使用 128 位加密。
    ms-dns 8.8.8.8 DNS服务器IP
    proxyarp : 创建 ARP 代理键值。
    debug : 开启调试模式,相关信息一样记录在 /var/logs/message 中。
    lock : 锁定客户端 PTY 设备文件。
配置***帐号和密码
/etc/ppp/chap-secrets
内容以下:
    client    server    secret    IP addresses
    "test"   pptpd    "pass"   *
说明:pptpd 名必须与/etc/ppp/pptpd-pptpd 文件中的相同

2、IPSEC+L2TPD安装配置
软件包
openswan    #IPSEC
rp-l2tp        #L2TP
xl2tpd         #L2TP
安装
   # yum install openswan
配置/etc/ipsec.conf
内容以下:
version 2.0
config setup
        nat_traversal=yes
        virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
        oe=off
        protostack=netkey

conn L2TP-PSK-NAT
        rightsubnet=vhost:%priv
        also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
        authby=secret
        pfs=no
        auto=add
        keyingtries=3
        rekey=no
        ikelifetime=8h
        keylife=1h
        type=transport
        left=22.22.22.22
        leftprotoport=17/1701
        right=%any
        rightprotoport=17/%any
说明:22.22.22.22为×××服务器外网IP
配置 PSK /etc/ipsec.secrets
内容以下:
    22.22.22.22 %any: PSK "pass"
说明:PSK "pass" 为IPSEC 共享密钥
配置包转发
    for i in /proc/sys/net/ipv4/conf/*
    do
        echo 0 > $i/accept_redirects
        echo 0 > $i/send_redirects
   done
   echo 1 > /proc/sys/net/ipv4/ip_forward
测试IPSEC是否成功
   # /etc/init.d/ipsec start
   # ipsec verify
        Checking your system to see if IPsec got installed and started correctly:
        Version check and ipsec on-path                                 [OK]
        Linux Openswan U2.6.32/K2.6.18-194.8.1.el5 (netkey)
        Checking for IPsec support in kernel                            [OK]
        SAref kernel support                                           [N/A]
        NETKEY:  Testing for disabled ICMP send_redirects              [OK]
        NETKEY detected, testing for disabled ICMP accept_redirects     [OK]
        Checking that pluto is running                                  [OK]
        Pluto listening for IKE on udp 500                             [OK]
        Pluto listening for NAT-T on udp 4500                          [OK]
        Two or more interfaces found, checking IP forwarding            [OK]
        Checking NAT and MASQUERADEing                                  [OK]
        Checking for 'ip' command                                       [OK]
        Checking /bin/sh is not /bin/dash                               [OK]
        Checking for 'iptables' command                                 [OK]
        Opportunistic Encryption Support                                [DISABLED]
无FAIL,则配置成功
安装rp-l2tp和xl2tpd
  安装xl2tpd 依赖于libpcap-devel
    # yum install libpcap-devel
    # wget http://downloads.sourceforge.net ... /rp-l2tp-0.4.tar.gz
    # tar zxvf rp-l2tp-04.tar.gz
    # cd rp-l2tp-04
    # ./configure
    # make
    # cp handlers/l2tp-control /usr/local/sbin/
    # mkdir /var/run/xl2tpd/
    # ln -s /usr/local/sbin/l2tp-control /var/run/xl2tpd/l2tp-control
    # wget http://ywko.googlecode.com/files/xl2tpd-1.2.4.tar.gz
    # tar zxvf xl2tpd-1.2.4.tar.gz
    # cd xl2tpd-1.2.4
    # make && make install
修改配置文件 /etc/xl2tpd.conf
内容以下:
  [global]
  ipsec saref = yes

  [lns default]
  ip range = 192.168.1.2-200
  local ip = 192.168.1.1
  refuse chap = yes
  refuse pap = yes
  require authentication = yes
  ppp debug = yes
  pppoptfile = /etc/ppp/options.xl2tpd
  length bit = yes
  说明:192.168.1.2-200 为分配给客户端的IP地址范围
         192.168.1.1 为×××服务器l2tp接口地址

修改配置文件 /etc/ppp/options.xl2tpd
内容以下:
  name l2tpd
  ipcp-accept-local
  ipcp-accept-remote
  ms-dns 8.8.8.8
  noccp
  auth
  crtscts
  idle 1800
  mtu 1410
  mru 1410  
  nodefaultroute
  debug   
  lock
  proxyarp     
  connect-delay 5000

配置密码/etc/ppp/chap-secrets
内容以下:
  test pptpd testpass *
  test l2tpd testpass *
说明:pptpd为pptp类型用户,这里的名称应该与options.pptpd配置文件定义名称里相同
       l2tpd为l2tpd类型用户,这里的名称应该与options.xl2tpd配置文件定义名称里相同

3、REDIUS 配置
软件包
    freeradius-client
    freeradius-server

freeradius-client安装
    # wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-client-1.1.6.tar.gz
    # tar zxf freeradius-client-1.1.6.tar.gz
    # cd freeradius-client-1.1.6
    # make && make install

freeradius-server安装
    # wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.1.12.tar.gz
    # tar zxf freeradius-server-2.1.12.tar.gz
    # cd freeradius-server-2.1.12
    # make && make install

配置radius-client
将radiusclient目录复制到/etc目录下
    # cp -rf /usr/local/etc/radiusclient/ /etc/

添加radius认证
修改配置文件/etc/ppp/options.pptpd
添加以下内容:
    plugin /usr/lib/pppd/2.4.4/radius.so
说明:若是是l2tp,则修改/etc/ppp/options.xl2tpd文件

修改配置文件/etc/radiusclient/servers
添加以下内容:
    localhost          testing123
说明:localhost 为radiusd地址,testing123为密码

配置/etc/radiusclient/radiusclient.conf
    将   radius_deadtime      0    注释
    将   bindaddr                 *   注释
将radiusclient.conf文件中的/usr/local/etc/radiusclient路径替换为/etc/radiusclient
    # grep /usr/local radiusclient.conf | grep -v sbin | sed -i 's/\/usr\/local//g' radiusclient.conf

配置radius-server

添加radius用户
修改配置文件/usr/local/etc/raddb/users
添加以下内容:
    test   Cleartext-Password := "test",Simultaneous-Use:=1
         Service-Type = Framed-User,
         Framed-Protocol = PPP,
         Framed-IP-Address = 255.255.255.254,
         Framed-IP-Netmask = 255.255.255.0
说明:test为用户名,密码为test
      Simultaneous-Use 限制同一用户登陆数,这项设置要写在与用户名同一行,不然不生效。
      Framed-IP-Address = 255.255.255.254,表示IP地址分配交给radius客户端,pptpd或者l2tpd

添加windows客户端支持
    # wget -c http://small-script.googlecode.com/files/dictionary.microsoft
    # mv dictionary.microsoft /etc/radiusclient

修改配置文件/etc/radiusclient/dictionary
在文件后面添加以下内容:
    INCLUDE /etc/radiusclient/dictionary.microsoft
    INCLUDE /etc/radiusclient/dictionary.ascend
    INCLUDE /etc/radiusclient/dictionary.merit
    INCLUDE /etc/radiusclient/dictionary.compat
    INCLUDE /etc/radiusclient/dictionary.sip

测试radius用户
启动radiusd
    # cp /usr/local/sbin/rc.radiusd /etc/init.d/radiusd
    # /etc/init.d/radiusd start


如要调试
    # /etc/init.d/radiusd -X
/etc/init.d/radiusd -X 可显示radius用户登陆详细过程

    # radtest test test 127.0.0.1 1812  testing123
    Sending Access-Request of id 103 to 127.0.0.1 port 1812
        User-Name = "test"
        User-Password = "test"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 1812
        Message-Authenticator = 0x00000000000000000000000000000000
    rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=103, length=44
        Service-Type = Framed-User
        Framed-Protocol = PPP
        Framed-IP-Address = 255.255.255.254
        Framed-IP-Netmask = 255.255.255.0

如出现rad-recv:Access-Accept 下面几行,说明认证成功。


添加自启动脚本/etc/rc.local
    # *** server start
    /usr/sbin/pptpd
    /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    # xl2tpd start
    for i in /proc/sys/net/ipv4/conf/*
    do
        echo 0 > $i/accept_redirects
        echo 0 > $i/send_redirects
    done
    /etc/init.d/ipsec start
    /usr/local/sbin/xl2tpd
# radius start
    /usr/local/sbin/radiusd

4、RADIUS+MYSQL配置

建立radius数据库
    mysql> create database radius;
建立radius用户名和密码
    mysql> grant all on radius.* to 'radius'@'localhost'  identified by 'pass';
    mysql>flush privileges;
导入SQL
    # cd /usr/local/etc/raddb/sql/mysql/
    # mysql -uradius -ppass radius < ippool.sql
    # mysql -uradius -ppass radius < schema.sql
    # mysql -uradius -ppass radius < cui.sql
    # mysql -uradius -ppass radius < nas.sql
    # mysql -uradius -ppass radius < wimax.sql

导入web管理所需SQL
将freeradius-server解压目录下的dialup_admin文件及目录复制到/usr/local目录下。
    # cp -rf /soft/freeradius-server-2.1.12/dialup_admin/ /usr/local
说明:最好将dialup_admin复制到/usr/local目录下,不然web访问将报路径错误。

    # cd /usr/local/dialup_admin/sql/mysql
    # mysql -uradius -ppass radius < badusers.sql
    # mysql -uradius -ppass radius < mtotacct.sql
    # mysql -uradius -ppass radius < totacct.sql
    # mysql -uradius -ppass radius < userinfo.sql

启用MYSQL 认证

安装mysql-devel包
    # yum install mysql-devel
说明:如不安装mysql-devel软件包,后面的radius+mysql认证会报错,缺乏rlm_sql_mysql.so文件。


修改配置文件/usr/local/etc/raddb/radiusd.conf
    将$INCLUDE sql.conf 前面的#去掉

修改配置文件/usr/local/etc/raddb/sql.conf
    修改login用户名,password密码,这里的用户名密码应与上面建立radius用户名和密码相同。

修改配置文件/usr/local/etc/raddb/sites-enabled/default
    找到authorize {}模块     注释掉 files (170行)           去掉 sql前面#号 (177行)
    找到accounting {}模块   注释掉 radutmp (396行)    去掉 sql前面#号 (406行)
    找到session {}模块        注释掉 radutmp (450行)    去掉 sql前面#号 (454行)
    找到post-auth {}模块    注释掉 sql (563行)

修改配置文件/usr/local/etc/raddb/sites-enabled/inner-tunnel
    找到authorize {}模块,注释掉files(124行),去掉sql前的#号(131行)

修改配置文件/usr/local/etc/raddb/sql.conf
    去掉 readclients = yes 前的#号去掉 (100行)
说明:开启数据库nas支持,不然没法限制同一用户登陆数。

修改配置文件/usr/local/etc/raddb/sql/mysql/dialup.conf
    找到如下内容,将前面的#号去掉(279-282行)
        simul_count_query = "SELECT COUNT(*) \
                             FROM ${acct_table1} \
                             WHERE username = '%{SQL-User-Name}' \
                             AND acctstoptime IS NULL"
说明:开启在线人数查询支持

RADIUS 用户管理
添加用户test,密码为test
INSERT INTO radcheck (username,attribute,op,VALUE) VALUES ('test','Cleartext-Password',':=','test');

将用户test添加到group1组
INSERT INTO radusergroup (username,groupname) VALUES ('test','group1');
限制同一用户登陆数,限制group1组用户同时登陆数为10INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES ('group1','Simultaneous-Use',':=','10');

RADIUS用户也可以使用web界面管理

配置Apache
新增vhost虚拟主机配置radius.conf,内容以下:
    <VirtualHost *:80>
        DocumentRoot "/usr/local/dialup_admin"
        ServerName www.test.com
        DirectoryIndex index.html index.php
    </VirtualHost>
    <Directory "/usr/local/dialup_admin">
        Options Indexes
        AllowOverride None
        Order allow,deny
        Allow from all
   </Directory>

可经过 http://www.test.com/htdocs 地址管理RADIUS用户。

5、TC 限速

TC 无需安装,Linux 内核自带
例:将*** IP地址段192.168.1.0/24 上传下载限速为 5M
将如下内容添加到/etc/ppp/ip-up文件exit 0上面。

down=5Mbit
upload=5Mbit
#down
/sbin/tc qdisc add dev $1 root handle 2:0 htb
/sbin/tc class add dev $1 parent 2:1 classid 2:10 htb rate $down
/sbin/tc class add dev $1 parent 2:2 classid 2:11 htb rate 1024kbps
/sbin/tc qdisc add dev $1 parent 2:10 handle 1: sfq perturb 1
/sbin/tc filter add  dev $1 protocol ip parent 2:0  u32 match ip dst 192.168.1.0/24  flowid 2:10
#upload
/sbin/tc qdisc add dev $1 handle ffff: ingress
/sbin/tc filter add dev $1 parent ffff: protocol ip  u32 match ip dst \
   192.168.1.0/24 police  rate $upload burst 100k drop flowid 2:11

说明:$1为网络设备接口名称,如ppp0,ppp1......
       第4行创建qdisc队列
       第5行创建类,限速5M
       第7行为了避免使一个会话永占带宽,添加随机公平队列sfq
       第8行创建过滤器规则,对192.168.1.0/24下载限速为5M
       第10-12行限制192.168.1.0/24上传限速为5M

删除全部 TC 限速规则
    # tc qdisc del dev ppp0 root

显示qdisc队列状态
    # tc -s -d qdisc show dev ppp0

显示class类状态
    # tc -s -d class show dev ppp0
 
显示filter规则状态
    # tc -s -d filter show dev ppp0

参考文档
TC
http://www.php-oa.com/2009/06/23/linux_tc.html
 
相关文章
相关标签/搜索