Привязка IP-MAC на удаленных маршрутизаторах.

Вопросы по UTM 3.0 и UTM 4.0 (поддержка прекращена)
Закрыто
sdnf
Сообщения: 2
Зарегистрирован: Вт фев 08, 2005 14:15

Привязка IP-MAC на удаленных маршрутизаторах.

Сообщение sdnf »

Народ, а как привязать IP-MAC на удаленном маршрутизаторе?
В интерфейсе UTM4 такой вещи явно не предусмотренно.
Как сделать, кроме как руками?

Skylord
Сообщения: 263
Зарегистрирован: Пт фев 04, 2005 11:33

Re: Привязка IP-MAC на удаленных маршрутизаторах.

Сообщение Skylord »

sdnf писал(а):Народ, а как привязать IP-MAC на удаленном маршрутизаторе?
В интерфейсе UTM4 такой вещи явно не предусмотренно.
Как сделать, кроме как руками?
Гм. А чем вообще еще такие вещи делаются, как не руками??? И как такую функциональность вообще можно реализовать в биллинге, не трогая и не настраивая удаленного компа?
А делается просто - пишешь скрипты на добавление, изменение, удаление пользователя, которые делают все, что надо - логинятся на маршрутизатор, вписывают MAC в таблицу...
Как более упрощенный и притимивный вариант: через систему удаленных файлволлов в УТМ. Просто вместо задания правил, делаешь прописывание МАКа в статической таблице (эту переменную можно передать - см. доки и форум). Удаленный маршрутизатор настраиваешь по доке УТМа...

Аватара пользователя
Mike
Сообщения: 45
Зарегистрирован: Чт фев 03, 2005 19:14
Откуда: Московская обл., г. Фрязино
Контактная информация:

Сообщение Mike »

У меня тоже есть проблема по этой теме.

Есть группа 10025

создаю правило
usersgroup10025 и оно применяется ко всем группам.
К 1000, 10055, 10005 и т. д.

dios
Сообщения: 42
Зарегистрирован: Сб мар 12, 2005 08:38

Сообщение dios »

Код: Выделить всё

#!/usr/bin/perl
$|++;
use IO::Socket::INET;
use DBI;

$hostname = ""; #или хост, где крутится mysql
$username = ""; #логин в mysql с правами доступа SELECT к UTM
$password = ""; #пароль
$dbname = "UTM";

$arpfile = "/etc/arp.tbl";

open STDOUT,"> $arpfile";
open($old_stderr,'>&STDERR');
open STDERR,"> /dev/null";

#в данном случае привязка к трём сегментам
arpproof("192.168.203.");
arpproof("192.168.208.");
arpproof("192.168.211.");

open(STDERR,'>&',$old_stderr);
$arp_prepare="arp -f ".$arpfile;
system($arp_prepare);

sub arpproof()
{
    my $network=$_[0];
    $ban="00:00:00:00:00:00";
    $x=0;
    $DSN = "dbi:mysql:$dbname:$hostname";
    $dbh = DBI->connect($DSN,$username,$password) or die "$DBI::errstr\n";
    $query = "SELECT ip,mac FROM users where ip like '%$network%'";
    $sth =$dbh->prepare($query)or die "$DBI::errstr\n";
    $sth->execute() or die "$DBI::errstr\n";

    for &#40;$i=2;$i<255;$i++&#41;
    &#123;
        $iparray&#91;$i&#93;=$ban;
    &#125;
    while &#40;$aref = $sth->fetchrow_arrayref&#41;
    &#123;
        my $ip=$aref->&#91;0&#93;;
        my $mac=$aref->&#91;1&#93;;
        if &#40;$ip!=''&#41;
            &#123;
                my $ip_s=split&#40;' ',$ip&#41;;
                @ip_s_a=@_;
                if &#40;$ip_s==1&#41;
                &#123;
                    my $mac_s=split&#40;' ',$mac&#41;;
                    if &#40;$mac_s==1&#41;
                    &#123;
                        $mac_ok=$mac;
                        $mac_ok=~ s/^\s+//; #убираем пробелы и проч. в начале текста
                        $mac_ok=~ s/\s+$//;#убираем пробелы и проч. в конце текста
                    &#125;
                    else
                    &#123;
                        $mac_ok=$_&#91;0&#93;;
                        $mac_ok=~ s/^\s+//; 
                        $mac_ok=~ s/\s+$//;
                    &#125;
                    $ip_ok=$ip;
                    $ip_ok=~ s/^\s+//; 
                    $ip_ok=~ s/\s+$//;
                    my $ippos=split&#40;'\.',$ip_ok&#41;;
                    $iparray&#91;$_&#91;3&#93;&#93;=$mac_ok;
                &#125;
                else
                &#123;
                    for &#40;$x=0;$x<$ip_s;$x++&#41;
                    &#123;
                        $ip_ok=$ip_s_a&#91;$x&#93;;
                        $ip_ok=~ s/^\s+//;
                        $ip_ok=~ s/\s+$//;
                        if &#40;$ip_ok=~ /$network/&#41;
                        &#123;
                            $mac_s=split&#40;' ',$mac&#41;;
                            $mac_ok=$_&#91;$x&#93;;
                            $mac_ok=~ s/^\s+//;
                            $mac_ok=~ s/\s+$//;
                            $ippos=split&#40;'\.',$ip_ok&#41;;
                            $iparray&#91;$_&#91;3&#93;&#93;=$mac_ok;
                        &#125;
                    &#125;
                &#125;
            &#125;
    &#125;

    my $c=0;
    for &#40;$CURIP=11;$CURIP<=254;$CURIP++&#41;
    &#123;
        $fullip= $network.$CURIP." ";
        $query="select ip from users where ip like '%$fullip%'";
        $sth =$dbh->prepare&#40;$query&#41;or die "$DBI&#58;&#58;errstr\n";
        $sth->execute&#40;&#41; or die "$DBI&#58;&#58;errstr\n";
        if &#40;$sth->rows!=0&#41;&#123; next &#125;;

        $fullip= $network.$CURIP;
        $query="select ip from reserved_ip where ip like '%$fullip%'";
        $sth =$dbh->prepare&#40;$query&#41;or die "$DBI&#58;&#58;errstr\n";
        $sth->execute&#40;&#41; or die "$DBI&#58;&#58;errstr\n";
        if &#40;$sth->rows!=0&#41; &#123;next&#125;;

        #print $fullip."\n";
        $ippos=split&#40;'\.',$fullip&#41;;
        $iparray&#91;$_&#91;3&#93;&#93;="FREE_IP";
        $c++;
        $exec_prepare="arp -d ".$fullip;
        #print $exec_prepare."\n";
        system&#40;$exec_prepare&#41;;
        if &#40;$c==9&#41; &#123;last&#125;;
    &#125;


    print "#==================== ".$network."0/24 ====================\n";
    for &#40;$i=2;$i<255;$i++&#41;
    &#123;
    $mac_ar=$iparray&#91;$i&#93;;
    $mac_ar=~ s/^\s+//; #убираем пробелы и проч. в начале текста
    $mac_ar=~ s/\s+$//;#убираем пробелы и проч. в конце текста
    if &#40;!$mac_ar&#41;
    &#123;
        #print "#".$network.$i." ".$mac_ar."\n";
        print "#".$network.$i." NO_MAC_FOR_USER\n";
        $fullip= $network.$i;
        $exec_prepare="arp -d ".$fullip;
        system&#40;$exec_prepare&#41;;
    &#125;
    else
    &#123;
        if &#40;$mac_ar eq "FREE_IP"&#41;
        &#123;
            print "#".$network.$i." ".$mac_ar."\n";
        &#125;
        else
        &#123;
            print $network.$i." ".$mac_ar."\n";
        &#125;
    &#125;

    &#125;
    print "\n";

&#125;
создаёт /etc/arp.tbl и делает привязку
даже если у пользователя несколько ИП - все проходит нормально
единственное что не делает это привязку для реальников
но тот ктопросёк фишку без проблем это реализует

пропишите его в крон на удалённом маршрутизаторе
к базе создайте польователя с правами на select
и незнайте проблем!!!

ДС FOREVER!!!

Закрыто