Работа белых ip из админки для hotspot Mikrotik

Скрипт находит всех абонентов в базе с учетки с белыми IP и с NAS hotspot и заливает их на mikrotik по крону.


В итоге создаются правила на 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 которые могут быть использованы.




Комментарии

Популярные сообщения из этого блога

Accel-ppp команды

mikbill расшифровка завершений сессий

Zabbix agent установка и настройка