Народ, а как привязать IP-MAC на удаленном маршрутизаторе?
В интерфейсе UTM4 такой вещи явно не предусмотренно.
Как сделать, кроме как руками?
Привязка IP-MAC на удаленных маршрутизаторах.
Re: Привязка IP-MAC на удаленных маршрутизаторах.
Гм. А чем вообще еще такие вещи делаются, как не руками??? И как такую функциональность вообще можно реализовать в биллинге, не трогая и не настраивая удаленного компа?sdnf писал(а):Народ, а как привязать IP-MAC на удаленном маршрутизаторе?
В интерфейсе UTM4 такой вещи явно не предусмотренно.
Как сделать, кроме как руками?
А делается просто - пишешь скрипты на добавление, изменение, удаление пользователя, которые делают все, что надо - логинятся на маршрутизатор, вписывают MAC в таблицу...
Как более упрощенный и притимивный вариант: через систему удаленных файлволлов в УТМ. Просто вместо задания правил, делаешь прописывание МАКа в статической таблице (эту переменную можно передать - см. доки и форум). Удаленный маршрутизатор настраиваешь по доке УТМа...
Код: Выделить всё
#!/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 ($i=2;$i<255;$i++)
{
$iparray[$i]=$ban;
}
while ($aref = $sth->fetchrow_arrayref)
{
my $ip=$aref->[0];
my $mac=$aref->[1];
if ($ip!='')
{
my $ip_s=split(' ',$ip);
@ip_s_a=@_;
if ($ip_s==1)
{
my $mac_s=split(' ',$mac);
if ($mac_s==1)
{
$mac_ok=$mac;
$mac_ok=~ s/^\s+//; #убираем пробелы и проч. в начале текста
$mac_ok=~ s/\s+$//;#убираем пробелы и проч. в конце текста
}
else
{
$mac_ok=$_[0];
$mac_ok=~ s/^\s+//;
$mac_ok=~ s/\s+$//;
}
$ip_ok=$ip;
$ip_ok=~ s/^\s+//;
$ip_ok=~ s/\s+$//;
my $ippos=split('\.',$ip_ok);
$iparray[$_[3]]=$mac_ok;
}
else
{
for ($x=0;$x<$ip_s;$x++)
{
$ip_ok=$ip_s_a[$x];
$ip_ok=~ s/^\s+//;
$ip_ok=~ s/\s+$//;
if ($ip_ok=~ /$network/)
{
$mac_s=split(' ',$mac);
$mac_ok=$_[$x];
$mac_ok=~ s/^\s+//;
$mac_ok=~ s/\s+$//;
$ippos=split('\.',$ip_ok);
$iparray[$_[3]]=$mac_ok;
}
}
}
}
}
my $c=0;
for ($CURIP=11;$CURIP<=254;$CURIP++)
{
$fullip= $network.$CURIP." ";
$query="select ip from users where ip like '%$fullip%'";
$sth =$dbh->prepare($query)or die "$DBI::errstr\n";
$sth->execute() or die "$DBI::errstr\n";
if ($sth->rows!=0){ next };
$fullip= $network.$CURIP;
$query="select ip from reserved_ip where ip like '%$fullip%'";
$sth =$dbh->prepare($query)or die "$DBI::errstr\n";
$sth->execute() or die "$DBI::errstr\n";
if ($sth->rows!=0) {next};
#print $fullip."\n";
$ippos=split('\.',$fullip);
$iparray[$_[3]]="FREE_IP";
$c++;
$exec_prepare="arp -d ".$fullip;
#print $exec_prepare."\n";
system($exec_prepare);
if ($c==9) {last};
}
print "#==================== ".$network."0/24 ====================\n";
for ($i=2;$i<255;$i++)
{
$mac_ar=$iparray[$i];
$mac_ar=~ s/^\s+//; #убираем пробелы и проч. в начале текста
$mac_ar=~ s/\s+$//;#убираем пробелы и проч. в конце текста
if (!$mac_ar)
{
#print "#".$network.$i." ".$mac_ar."\n";
print "#".$network.$i." NO_MAC_FOR_USER\n";
$fullip= $network.$i;
$exec_prepare="arp -d ".$fullip;
system($exec_prepare);
}
else
{
if ($mac_ar eq "FREE_IP")
{
print "#".$network.$i." ".$mac_ar."\n";
}
else
{
print $network.$i." ".$mac_ar."\n";
}
}
}
print "\n";
}
даже если у пользователя несколько ИП - все проходит нормально
единственное что не делает это привязку для реальников
но тот ктопросёк фишку без проблем это реализует
пропишите его в крон на удалённом маршрутизаторе
к базе создайте польователя с правами на select
и незнайте проблем!!!
ДС FOREVER!!!