ASPLinux 7.3 и GPRS USB + учет трафика

В статье рассказывается, как настроить GPRS-соединение с простой системой учета трафика на базе ASPLinux 7.3

[Руслан Попов]

ASPLinux 7.3 и GPRS USB + учет трафика

Автор: Руслан Попов

Введение

Данный материал создан на основе статьи на LinuxRSP (http://www.linuxrsp.ru/artic/gprs.html) с небольшими поправками и простой системой учёта трафика.

Настройка USB

При работе с USB устройствами необходимо убедиться, что в BIOS включена поддержка USB и разрешено выделение IRQ для USB. Это необходимо для автоматической подгрузки модулей ядра для USB устройств. Все необходимые модули для работы с USB кабелем Profilic 2303 (как раз для моего Siemens M50 подходит) в ASPLinux 7.3 уже есть.

По каким-то причинам, а может так и должно быть, у меня не появились устройства для работы с USB кабелем. Пришлось делать всё самому:

    cd /dev/usb
    mkdir tts
    cd tts
    mknod 0 c 188 0
    mknod 0 c 188 1
    chmod 666 *

Настройка PPPD

Переходим в каталог /etc/ppp/peers и создаём там файл с именем gprs со следующим текстом:

    /dev/usb/tts/0 57600 noauth defaultroute usepeerdns updetach persist \
    noipdefault lock connect '/usr/sbin/chat -v -f /etc/ppp/chat/gprs' \
    novjccomp nopcomp noaccomp noipdefault nodeflate novj nobsdcomp
Теперь перейдём в каталог /etc/ppp/chat и создадим там файл с именем gprs со следующим текстом:
    ABORT "ERROR"
    ABORT "NO ANSWER"
    "" 'ATE1'
    OK AT+CGDCONT=1,"IP","internet.mts.ru"
    OK ATDT*99***1#
    CONNECT c
Содержимое данного файла я уточню сегодня вечером, в оригинальной статье были глюки :)

В файл /etc/resolv.conf надо добавить строчки для MTS'овских DNS серверов:

    nameserver 213.87.0.1
    nameserver 213.87.1.1

Использование

Для активации соединения по GPRS надо отдать команду:

    /usr/sbin/pppd call gprs
Но так как пользоваться данной командой может только администратор (root), то её выполнение надо разрешить для пользователей.

Для этого надо выполнить несколько действий. В каталоге /usr/local/bin создадим файл gprs со следующим кодом:

    #!/bin/bash
    if [ -f /var/run/ppp0.pid ]; then
	kill `cat /var/run/ppp0.pid`
    else
	/usr/sbin/ppp0 call gprs
    fi
Данный скрипт, вызываемый через иконку на рабочем столе с командой sudo /usr/local/bin/gprs и установленной галочкой "Выполнять в терминале", позволяет пользователю активировать и деактивировать соединение по GPRS простым нажатием на иконку. Не забудьте прописать для каждого пользователя следующую строчку в файле /etc/sudoers:
    username        ALL=/usr/local/bin/gprs

Учёт трафика

База данных

Статистику по утилизации GPRS проще всего хранить в базе данных. Для этого заведём новую базу данных:

    CREATE DATABASE traffic;
И таблицу для статистики по утилизации:
    
   CREATE TABLE gprs (
      id smallint(5) unsigned NOT NULL auto_increment,
      user varchar(16) NOT NULL default '',
      download int(10) unsigned NOT NULL default '0',
      upload int(10) unsigned NOT NULL default '0',
      time datetime NOT NULL default '0000-00-00 00:00:00',
      PRIMARY KEY  (id)
    ) TYPE=MyISAM COMMENT='Трафик на GPRS';
Теперь дадим права на выборку и вставку записей:
    GRANT insert, select ON traffic.* TO gprs@localhost IDENTIFIED BY "topsecret";

Усовершенствуем скрипт

После внесения изменения скрипт будет выглядеть следующим образом:

    
   #!/bin/bash
    # (c) 2003 Ruslan Popov aka RaD
    # Скрипт для работы с GPRS
    if [ -f /var/run/mysqld/mysqld.pid ]; then
	if [ -f /var/run/ppp0.pid ]; then
    	    echo "Kill GPRS connection..."
            STR=`/sbin/ifconfig ppp0 | grep "RX bytes"`
	    DWN=`echo $STR | sed "s/.*RX bytes:\(.*\) (.*) *TX bytes:\(.*\) (.*/\1/"`
            UPL=`echo $STR | sed "s/.*RX bytes:\(.*\) (.*) *TX bytes:\(.*\) (.*/\2/"`
            echo "INSERT INTO traffic.gprs SET user='$SUDO_USER',download='$DWN',upload='$UPL',time=NOW()" | \
            mysql -u gprs -ptopsecret
            kill `cat /var/run/ppp0.pid`
	else
    	    echo "Open GPRS connection..."
            /usr/sbin/pppd call gprs
	    if [ `/sbin/route|grep "default.*ppp0"` == "" ]; then
    		echo "Sets the default route..."
        	/sbin/route add default gw 192.168.254.254
    	    fi
	fi
    fi
А теперь небольшие пояснения. Первым делом проверяется наличие работающего демона базы данных, после этого проверяется открыто соединение по ppp0 или нет. Если открыто, то выполняется фаза отключения соедининия. При этом снимается статистика по трафику с интерфейса и помещается в базу данных. Если соединения нет, то оно создаётся. Дополнительно создаётся маршрут по умолчанию. Думаю, всё очень просто.

Принимаются предложения по усовершенствованию...

Усовершенствование на базе /usr/sbin/tcpdump -q -p -nn -i eth0 -S -t -e

   0:c:6e:41:c7:7f 0:8:2:f9:4b:61 66: 192.168.10.157.50324 >
   192.168.10.84.8080: tcp 0 (DF)
   0:8:2:f9:4b:61 0:c:6e:41:c7:7f 1514: 192.168.10.84.8080 >
   192.168.10.157.50324: tcp 1448 (DF)
   0:8:2:f9:4b:61 0:c:6e:41:c7:7f 78: 192.168.10.84.8080 >
   192.168.10.157.50324: tcp 12 (DF)
   0:c:6e:41:c7:7f 0:8:2:f9:4b:61 66: 192.168.10.157.50324 >
   192.168.10.84.8080: tcp 0 (DF)

Статья взята с сайта OpenNet. Оригинал: http://ts.kmc.ru/articles.php4?a=71

[ опубликовано 29/12/2003 ]

Руслан Попов - ASPLinux 7.3 и GPRS USB + учет трафика   Версия для печати