Работа белых ip из админки для hotspot Mikrotik
Скрипт находит всех абонентов в базе с учетки с белыми IP и с NAS hotspot и заливает их на mikrotik по крону.
В итоге создаются правила на mikrotik src-nat для каждого абонента с реальником. Каждый раз при перезаливке правила пересоздаются.
Создаем скрипт real_ip_hotspot.sh
Желательно в каталоге /var/www/mikbill/admin/sys/scripts/
<?php
function ftp_upload($ftp_server,$ftp_user_name,$ftp_user_pass,$file_in,$file_out) {
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if ((!$conn_id) || (!$login_result)) {
echo "No connect with $ftp_server via $ftp_user_name!\n";
exit;
}
$upload = ftp_put($conn_id, $file_out, $file_in, FTP_BINARY);
if (!$upload) {
echo "Error upload!";
}
ftp_close($conn_id);
}
$db = mysql_connect("localhost","mikbill","PASSWORD");
mysql_select_db("mikbill" ,$db);
$sql = mysql_query("SELECT user, framed_ip, local_ip, numdogovor FROM `users` WHERE `real_ip` LIKE '1';" ,$db);
$file_content=array();
array_push ($file_content, "/ip firewall nat\n");
array_push ($file_content, "remove [find comment~\"realip_for_\"]\n");
while ($tablerows = mysql_fetch_row($sql)) {
array_push($file_content, "add action=src-nat chain=srcnat comment=\"realip_for_" .$tablerows[0]."\" out-interface=uplink src-address=".$tablerows[2]." to-addresses=".$tablerows[1]." place-before=1 \n");
array_push($file_content, "add action=netmap chain=dstnat comment=\"realip_for_" .$tablerows[0]."_____\" dst-address=".$tablerows[1]." to-addresses=".$tablerows[2]." place-before=1 \n");
}
mysql_close($db);
$db = mysql_connect("localhost","mikbill","PASSWORD");
mysql_select_db("mikbill" ,$db);
$sql = mysql_query("SELECT user, framed_ip, local_ip, numdogovor FROM `usersfreeze` WHERE `real_ip` LIKE '1';" ,$db);
array_push ($file_content, "/ip firewall nat\n");
while ($tablerows = mysql_fetch_row($sql)) {
array_push($file_content, "add action=src-nat chain=srcnat comment=\"realip_for_" .$tablerows[0]."\" out-interface=uplink src-address=".$tablerows[2]." to-addresses=".$tablerows[1]." place-before=1 \n");
array_push($file_content, "add action=netmap chain=dstnat comment=\"realip_for_" .$tablerows[0]."_____\" dst-address=".$tablerows[1]." to-addresses=".$tablerows[2]." place-before=1 \n");
}
mysql_close($db);
$file_name="./realip.rsc";
file_put_contents($file_name,$file_content);
$nas_ip='172.16.1.1';
$nas_login='bill';
$nas_pass='PASSMIKROTIK';
$file_in='realip.rsc';
$file_out='realip.rsc';
$file_exec=$file_out;
ftp_upload($nas_ip,$nas_login,$nas_pass,$file_in,$file_out);
$command='import '.$file_exec;
$ssh='/usr/bin/sudo /usr/bin/ssh bill@172.16.1.1';
exec('/usr/bin/sudo /usr/bin/ssh bill@172.16.1.1 "import realip.rsc" &>/dev/null 2>&1');
?>
Скрипт не совсем автоматизирован, надо будет подогнать под себя.
PASSWORD - поменять на пароль mysql учетки mikbill
uplink - интерфейс на mikrotik, с которого идет интернет и на который будем вешать белые IP
или убрать запись "out-interface=uplink" (больше нагрузка)
$nas_ip='172.16.1.1'; - поменять на IP Mikrotik
$nas_login='bill'; - логин учетки на Mikrotik
$nas_pass='PASSMIKROTIK'; - пароль учетки на Mikrotik
$ssh='/usr/bin/sudo /usr/bin/ssh bill@172.16.1.1'; - IP и логин учетки Mikrotik
exec('/usr/bin/sudo /usr/bin/ssh bill@172.16.1.1 - IP и логин учетки Mikrotik
Закрываем, даем права на скрипт
Сразу можно проверить как работает скрипт (выгрузки на mikrotik скорее всего еще не будет), запускать так:
Создастся файл realip.rsc
Настройка cron
0 23 * * * root /usr/bin/php /var/www/mikbill/admin/sys/scripts/real_ip_hotspot.sh
Настроить авторизацию по ключу между сервером и Mikrotik
Ключ на сервере лежит тут ~/.ssh/id_dsa.pub
Если нет, то создаем
На uplink интерфейс повесить все белые IP которые могут быть использованы.
В итоге создаются правила на mikrotik src-nat для каждого абонента с реальником. Каждый раз при перезаливке правила пересоздаются.
Создаем скрипт real_ip_hotspot.sh
Желательно в каталоге /var/www/mikbill/admin/sys/scripts/
- nano /var/www/mikbill/admin/sys/scripts/real_ip_hotspot.sh
<?php
function ftp_upload($ftp_server,$ftp_user_name,$ftp_user_pass,$file_in,$file_out) {
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if ((!$conn_id) || (!$login_result)) {
echo "No connect with $ftp_server via $ftp_user_name!\n";
exit;
}
$upload = ftp_put($conn_id, $file_out, $file_in, FTP_BINARY);
if (!$upload) {
echo "Error upload!";
}
ftp_close($conn_id);
}
$db = mysql_connect("localhost","mikbill","PASSWORD");
mysql_select_db("mikbill" ,$db);
$sql = mysql_query("SELECT user, framed_ip, local_ip, numdogovor FROM `users` WHERE `real_ip` LIKE '1';" ,$db);
$file_content=array();
array_push ($file_content, "/ip firewall nat\n");
array_push ($file_content, "remove [find comment~\"realip_for_\"]\n");
while ($tablerows = mysql_fetch_row($sql)) {
array_push($file_content, "add action=src-nat chain=srcnat comment=\"realip_for_" .$tablerows[0]."\" out-interface=uplink src-address=".$tablerows[2]." to-addresses=".$tablerows[1]." place-before=1 \n");
array_push($file_content, "add action=netmap chain=dstnat comment=\"realip_for_" .$tablerows[0]."_____\" dst-address=".$tablerows[1]." to-addresses=".$tablerows[2]." place-before=1 \n");
}
mysql_close($db);
$db = mysql_connect("localhost","mikbill","PASSWORD");
mysql_select_db("mikbill" ,$db);
$sql = mysql_query("SELECT user, framed_ip, local_ip, numdogovor FROM `usersfreeze` WHERE `real_ip` LIKE '1';" ,$db);
array_push ($file_content, "/ip firewall nat\n");
while ($tablerows = mysql_fetch_row($sql)) {
array_push($file_content, "add action=src-nat chain=srcnat comment=\"realip_for_" .$tablerows[0]."\" out-interface=uplink src-address=".$tablerows[2]." to-addresses=".$tablerows[1]." place-before=1 \n");
array_push($file_content, "add action=netmap chain=dstnat comment=\"realip_for_" .$tablerows[0]."_____\" dst-address=".$tablerows[1]." to-addresses=".$tablerows[2]." place-before=1 \n");
}
mysql_close($db);
$file_name="./realip.rsc";
file_put_contents($file_name,$file_content);
$nas_ip='172.16.1.1';
$nas_login='bill';
$nas_pass='PASSMIKROTIK';
$file_in='realip.rsc';
$file_out='realip.rsc';
$file_exec=$file_out;
ftp_upload($nas_ip,$nas_login,$nas_pass,$file_in,$file_out);
$command='import '.$file_exec;
$ssh='/usr/bin/sudo /usr/bin/ssh bill@172.16.1.1';
exec('/usr/bin/sudo /usr/bin/ssh bill@172.16.1.1 "import realip.rsc" &>/dev/null 2>&1');
?>
Скрипт не совсем автоматизирован, надо будет подогнать под себя.
PASSWORD - поменять на пароль mysql учетки mikbill
uplink - интерфейс на mikrotik, с которого идет интернет и на который будем вешать белые IP
или убрать запись "out-interface=uplink" (больше нагрузка)
$nas_ip='172.16.1.1'; - поменять на IP Mikrotik
$nas_login='bill'; - логин учетки на Mikrotik
$nas_pass='PASSMIKROTIK'; - пароль учетки на Mikrotik
$ssh='/usr/bin/sudo /usr/bin/ssh bill@172.16.1.1'; - IP и логин учетки Mikrotik
exec('/usr/bin/sudo /usr/bin/ssh bill@172.16.1.1 - IP и логин учетки Mikrotik
Закрываем, даем права на скрипт
- chmod +x /var/www/mikbill/admin/sys/scripts/real_ip_hotspot.sh
Сразу можно проверить как работает скрипт (выгрузки на mikrotik скорее всего еще не будет), запускать так:
- /usr/bin/php /var/www/mikbill/admin/sys/scripts/real_ip_hotspot.sh
Создастся файл realip.rsc
Настройка cron
- mcedit /etc/crond
# Real IP Hotspot
0 23 * * * root /usr/bin/php /var/www/mikbill/admin/sys/scripts/real_ip_hotspot.sh
Настроить авторизацию по ключу между сервером и Mikrotik
Ключ на сервере лежит тут ~/.ssh/id_dsa.pub
Если нет, то создаем
- ssh-keygen -t dsa
Переносим его на Mikrotik и подключаем:
Настройка Mikrotik
В IP - Services проверить, что mikrotik доступен с сервера по ssh 22 порт и ftp 21 порт.На uplink интерфейс повесить все белые IP которые могут быть использованы.
Комментарии
Отправить комментарий