Главная   »   Форум   »   Операционные системы   »   *NIX (BSD/Linux/etc)   »   Ubilling (Debian) Local NAS + Mikrotik NAS одновременно
Для полноценного использования сайта, рекомендуем Вам зарегистрироваться.

 Для полноценного использования сайта, рекомендуем зарегистрироваться.

Ubilling (Debian) Local NAS + Mikrotik NAS одновременно

Как на Debian с Ubilling + Stargazer запустить Local NAS и Mikrotik NAS одновременно.
Администратор
Sergio
Сообщений: 61
Киев
3 дня назад
Задача стояла в том, что бы уже в рабочей сети, в которой шлюзом доступа с Интернет выступал один сервер на котором работал Ubilling + Stargazer и Local NAS дополнительно запустить Mikrotik NAS.

Для того что бы Ubilling начал работать с Mikrotik NAS необходимо заменить стандартные скрипты OnConnect, OnDisconnect и т.д., и тут мы столкнулись с проблемой, после замены этих файлов Ubilling начинает работать с Mikrotik NAS, но перестаёт работать с Local NAS. Это связано с тем, что мы используем ОС Debian, а не FreeBSD под которую рассчитан Ubilling.

В этой теме я не буду описывать саму настройку Mikrotik и Ubilling, подробную инструкцию Вы можете посмотреть на Ubilling wiki, будем считать что мы всё сделали по инструкции и дальше я дам пример как заставить Ubilling работать с Mikrotik NAS и Local NAS на ОС Debian.

Первым делом отредактируем файл /etc/stargazer/system/executer/rscriptd.drv:


<?php if ( !defined('ENVIRONMENT') ) exit('Only STG can run script!' . " ");

class Executer {

// Recived data from `ubilling.cls`:
private $log;
private $config;
private $database;

// Constructor:
public function __construct($data) {
// Put all recived data to specified vars:
foreach ($data as $key => $value) {
$this->$key = $value;
}
// Write log message, that class is loaded:
$this->log->message(__CLASS__, "RScriptD driver loaded", 'debug');

// Run:
switch ( ENVIRONMENT ) {
case OnConnect:
case OnDisconnect:
$script = constant('ENVIRONMENT');
$this->$script();
break;
}
}

// 1. OnConnect:
public function OnConnect() {
// User's TX & RX:
$rate = $this->database->get_user_rate();


//Execute OnConnect script
shell_exec("/bin/bash /etc/stargazer/system/executer/OnConnect " . LOGIN . " " . IP . " " . CASH . " " . ID . " " . $rate['tx'] . " " . $rate['rx'] . " " . $this->database->get_user_mac());
// Write log message:
$this->log->message(__CLASS__, "/bin/bash OnConnect " . LOGIN . " " . IP . " " . CASH . " " . ID . " " . $rate['tx'] . " " . $rate['rx'] . " " . $this->database->get_user_mac(), 'debug');



// ARP:
//shell_exec($this->config['arpcmd'] . ' -S ' . IP . ' ' . $this->database->get_user_mac());
// Speed control:
//shell_exec($this->config['fwcmd'] . " pipe " . (ID + 101) . " config bw " . $rate['tx'] . $this->config['rate_val'] . " queue 32Kbytes");
//shell_exec($this->config['fwcmd'] . " pipe " . (ID + 8101) . " config bw " . $rate['rx'] . $this->config['rate_val'] . " queue 32Kbytes");
// Shaper:
//shell_exec($this->config['fwcmd'] . " table 3 add " . IP . " " . (ID + 101));
//shell_exec($this->config['fwcmd'] . " table 4 add " . IP . " " . (ID + 8101));
//shell_exec($this->config['fwcmd'] . " table 47 delete " . IP);
// Day/Night switcher:
//file_put_contents(BASEPATH . "dn/" . LOGIN, $rate['rx'] . ":" . (ID + 8101), LOCK_EX);
//shell_exec("/bin/chmod 777 " . BASEPATH . "dn/" . LOGIN);
$this->log->message(__CLASS__, "Creation of firewall rules done", 'success');
}

// 2. OnDisconnect:
public function OnDisconnect() {


// User's TX & RX:
$rate = $this->database->get_user_rate();


//Execute OnConnect script
shell_exec("/bin/bash /etc/stargazer/system/executer/OnDisconnect " . LOGIN . " " . IP . " " . CASH . " " . ID . " " . $rate['tx'] . " " . $rate['rx'] . " " . $this->database->get_user_mac());
// Write log message:
$this->log->message(__CLASS__, "/bin/bash OnDisconnect " . LOGIN . " " . IP . " " . CASH . " " . ID . " " . $rate['tx'] . " " . $rate['rx'] . " " . $this->database->get_user_mac(), 'debug');


// Delete old pipes:
//shell_exec($this->config['fwcmd'] . " pipe " . (ID + 101) . " delete");
//shell_exec($this->config['fwcmd'] . " pipe " . (ID + 8101) . " delete");
// Delete from shaper:
//shell_exec($this->config['fwcmd'] . " table 3 delete " . IP . " " . (ID + 101));
//shell_exec($this->config['fwcmd'] . " table 4 delete " . IP . " " . (ID + 8101));
//shell_exec($this->config['fwcmd'] . " table 47 add " . IP);
// Day/Night switcher:
//shell_exec("/bin/rm " . BASEPATH . "dn/" . LOGIN);
$this->log->message(__CLASS__, "Removing of firewall rules done", 'success');
}
}
?>


Для большей наглядности что именно мы изменили в этом файле, старый код я не удалял с файла, а закомментировал знаком "//".

Далее в папке /etc/stargazer/system/executer/ создадим файлы OnConnect и OnDisconnect и напишем в них следующий код:

Файл OnConnect:
Код PHP:
  1. #!/bin/bash
  2. #OnConnect
  3.  
  4. IFUP="eth0"
  5. IFDOWN="eth1"
  6. LOGIN=$1
  7. IP=$2
  8. CASH=$3
  9. ID=$4
  10. SPEED=$5
  11. UPSPEED=$6
  12. MAC=$7
  13. SCOUNT="Kbit"
  14.  
  15. IPT="/sbin/iptables"
  16. tc="/sbin/tc"
  17. arpcmd="/usr/sbin/arp"
  18. cur_date=`date +%Y.%m.%d`
  19. cur_time=`date +%H:%M:%S`
  20.  
  21. # DELETE RULEZ
  22. ######################################################################
  23. $IPT -t filter -D INPUT -s $IP -j ACCEPT
  24. while [ $? -eq 0 ]
  25. do
  26. $IPT -t filter -D INPUT -s $IP -j ACCEPT
  27. done
  28.  
  29. $IPT -t filter -D FORWARD -s $IP -j ACCEPT
  30. while [ $? -eq 0 ]
  31. do
  32. $IPT -t filter -D FORWARD -s $IP -j ACCEPT
  33. done
  34.  
  35. $IPT -t filter -D FORWARD -d $IP -j ACCEPT
  36. while [ $? -eq 0 ]
  37. do
  38. $IPT -t filter -D FORWARD -d $IP -j ACCEPT
  39. done
  40.  
  41. $IPT -t filter -D OUTPUT -d $IP -j ACCEPT
  42. while [ $? -eq 0 ]
  43. do
  44. $IPT -t filter -D OUTPUT -d $IP -j ACCEPT
  45. done
  46. #######################################################################
  47.  
  48. # ADD RULEZ
  49. #######################################################################
  50. $IPT -t filter -A INPUT -s $IP -j ACCEPT
  51. $IPT -t filter -A FORWARD -s $IP -j ACCEPT
  52. $IPT -t filter -A FORWARD -d $IP -j ACCEPT
  53. $IPT -t filter -A OUTPUT -d $IP -j ACCEPT
  54.  
  55. ############################
  56.  
  57. # fix user mac to ip
  58. $arpcmd -d $IP $MAC
  59. while [ $? -eq 0 ]
  60. do
  61. $arpcmd -d $IP $MAC
  62. done
  63. $arpcmd -s $IP $MAC
  64.  
  65. ############################
  66.  
  67. declare -i mark=$ID+101
  68. declare -i mark1=$ID+4101
  69. $IPT -t mangle -A FORWARD -d $IP -j MARK --set-mark $mark
  70. $IPT -t mangle -A FORWARD -s $IP -j MARK --set-mark $mark1
  71.  
  72. #Download
  73. $tc class add dev $IFDOWN parent 1:1 classid 1:$mark htb rate $SPEED$SCOUNT
  74. $tc filter add dev $IFDOWN parent 1: protocol ip prio 3 handle $mark fw classid 1:$mark
  75.  
  76. #Upload
  77. $tc class add dev $IFUP parent 1:1 classid 1:$mark1 htb rate $UPSPEED$SCOUNT
  78. $tc filter add dev $IFUP parent 1: protocol ip prio 3 handle $mark1 fw classid 1:$mark1
  79. ###########################################################################################
  80.  
  81. # DAY/NIGHT switcher
  82. /bin/echo $SPEED:`expr $ID + 4101` > /etc/stargazer/dn/$LOGIN
  83.  
  84.  
  85. # ADD TO LOG
  86. echo "$cur_date $cur_time CONNECT: ID-$ID;LOGIN-$LOGIN;IP-$IP;CASH-$CASH;SPEED-$SPEED;UPSPEED-$UPSPEED,MAC-$MAC" >> /var/log/stargazer/allconnect.log
Файл OnDisconnect:
Код PHP:
  1. #!/bin/bash
  2. # OnDisconnect
  3.  
  4. IFUP="eth0"
  5. IFDOWN="eth1"
  6. LOGIN=$1
  7. IP=$2
  8. CASH=$3
  9. ID=$4
  10. SPEED=$5
  11. UPSPEED=$6
  12. MAC=$7
  13. SCOUNT="Kbit"
  14.  
  15. IPT="/sbin/iptables"
  16. tc="/sbin/tc"
  17.  
  18.  
  19. # TIME FORMAT
  20. cur_date=`date +%Y.%m.%d`
  21. cur_time=`date +%H:%M:%S`
  22.  
  23. # DELETE RULEZ IPT
  24. ######################################################################
  25. $IPT -t filter -D INPUT -s $IP -j ACCEPT
  26. while [ $? -eq 0 ]
  27. do
  28. $IPT -t filter -D INPUT -s $IP -j ACCEPT
  29. done
  30.  
  31. $IPT -t filter -D FORWARD -s $IP -j ACCEPT
  32. while [ $? -eq 0 ]
  33. do
  34. $IPT -t filter -D FORWARD -s $IP -j ACCEPT
  35. done
  36.  
  37. $IPT -t filter -D FORWARD -d $IP -j ACCEPT
  38. while [ $? -eq 0 ]
  39. do
  40. $IPT -t filter -D FORWARD -d $IP -j ACCEPT
  41. done
  42.  
  43. $IPT -t filter -D OUTPUT -d $IP -j ACCEPT
  44. while [ $? -eq 0 ]
  45. do
  46. $IPT -t filter -D OUTPUT -d $IP -j ACCEPT
  47. done
  48.  
  49. #########################
  50.  
  51. declare -i mark=$ID+101
  52. declare -i mark1=$ID+4101
  53.  
  54. if [ -n "$mark" ]
  55. then
  56. $IPT -t mangle -D FORWARD -d $IP -j MARK --set-mark $mark
  57. while [ $? = 0 ]
  58. do
  59. $IPT -t mangle -D FORWARD -d $IP -j MARK --set-mark $mark
  60. done
  61. fi
  62.  
  63. if [ -n "$mark1" ]
  64. then
  65. $IPT -t mangle -D FORWARD -s $IP -j MARK --set-mark $mark1
  66. while [ $? = 0 ]
  67. do
  68. $IPT -t mangle -D FORWARD -s $IP -j MARK --set-mark $mark1
  69. done
  70. fi
  71.  
  72.  
  73. #Download
  74. $tc filter del dev $IFDOWN parent 1: protocol ip prio 3 handle $mark fw classid 1:$mark
  75. $tc class del dev $IFDOWN parent 1:1 classid 1:$mark htb rate $SPEED$SCOUNT
  76.  
  77. #Upload
  78. $tc filter del dev $IFUP parent 1: protocol ip prio 3 handle $mark1 fw classid 1:$mark1
  79. $tc class del dev $IFUP parent 1:1 classid 1:$mark1 htb rate $UPSPEED$SCOUNT
  80. ############################################################################
  81.  
  82.  
  83. # DAY/NIGHT switcher
  84. /bin/rm /etc/stargazer/dn/$LOGIN
  85.  
  86. echo "$cur_date $cur_time DISCONNECT: ID-$ID;LOGIN-$LOGIN;IP-$IP;CASH-$CASH;SPEED-$SPEED;UPSPEED-$UPSPEED,MAC-$MAC" >> /var/log/stargazer/allconnect.log
Пути логов отредактируйте под себя.

Теперь наш Ubilling на ОС Debian работает одновременно и с Mikrotik NAS и с Local NAS.
Редактировалось: 3 раза (Последний: 26 марта 2018 в 14:55)
Перейти на форум:
Быстрый ответ
У вас нет прав, чтобы писать на форуме.