Биллинговая система Nodeny
24 Апреля 2024, 22:25:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2
  Печать  
Автор Тема: Mikrotok dhcp server  (Прочитано 7931 раз)
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« : 25 Июня 2015, 23:27:23 »

У одного из форумчан появилась идея посылать микротику связки мак-ip в dhcp-server lease микротика.

Делать мы это будем с помощью модуля make_config и ssh с авторизацией по ключу.

Код:
mkdir mikdhcp
cd mikdhcp/
ssh-keygen -t dsa -f ./id_dsa

На предложение ввода пароля нажимаем enter, т.е. без пароля. Загружаем на микротик публичный ключ (выполняем на микротике):

Код:
/user ssh-keys import user=admin public-key-file=id_dsa.pub

На сервере nodeny создаем /usr/local/nodeny/kernel/make_config_mikrotik.cfg

Код:
run     => 1,
period  => 60,
template  => {
            'mikrotik.tmpl' => {
                # куда будет записан сформированный конфиг
                file       => '/tmp/mikdhcp.sh',

                # системная команда, которая будет выполнена перед записью конфига, можно ''
                cmd_before => 'sh /tmp/mikdhcp.sh >/dev/null 2>/dev/null',

                # системная команда, которая будет выполнена после записи конфига, можно ''
                cmd_after  => '',

                # удалять пустые строки
                pretty => 1,
            },
},
subs    => {
            pretty_mac => sub {
                my $mac = shift;
                $mac =~ s/(..)/$1:/g;
                chop $mac;
                return $mac;
            },
},

И /usr/local/nodeny/kernel/make_config/mikrotik.tmpl

Код:
ssh -i /usr/local/nodeny/mikdhcp/id_dsa admin@адрес_микротика << EOF
/ip dhcp-server lease remove [find comment=nodeny]
{% for user in users %}
    {% eval i = 0 %}
    {% for ip in user.ips %}
        {% if user.mac.[i] %}
/ip dhcp-server lease add address={{ip.ipa}} mac-address={{user.mac.[i]|pretty_mac}} address-list=goodboys comment=nodeny
        {% eval i = i + 1 %}
        {% endif %}
    {% endfor %}
{% endfor %}
EOF

Проверяем:

Код:
perl nokernel.pl -m make_config -g=make_config_mikrotik -v

Если в биллинге изменить/добавить/удалить ip и/или мак у абонента(ов) - эти изменения должны пересылаться на микротик в течение 60 секунд.

Какая производительность всего этого - я не знаю. Проверял только саму заливку мак-ip в микротик. Если кто реализует эту схему - пожалуйста отпишитесь
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #1 : 25 Июня 2015, 23:31:57 »

cat /tmp/mikdhcp.sh

будет примерно такое:

Код:
ssh -i /usr/local/nodeny/mikdhcp/id_dsa admin@xx.xx.xx.xx << EOF
/ip dhcp-server lease remove [find comment=nodeny]
/ip dhcp-server lease add address=10.0.0.6 mac-address=00:11:00:11:00:22 address-list=goodboys comment=nodeny
/ip dhcp-server lease add address=1.2.3.4 mac-address=00:0c:db:ef:52:89 address-list=goodboys comment=nodeny
/ip dhcp-server lease add address=127.0.0.2 mac-address=00:11:22:33:44:77 address-list=goodboys comment=nodeny
EOF
Записан
k291
Старожил
****

Карма: -10
Offline Offline

Сообщений: 454


Просмотр профиля
« Ответ #2 : 26 Июня 2015, 00:51:43 »

Заметил следующее:
1) добавляются все IP+MAC которые были за все время жизни NoDeny.

2) если вручную удалить записи из dhcp_lease, то через 60 секунд они не появляются.
Только через каждые 60сек выдает в терминале:
SELECT * FROM users
Строк: 251. Время выполнения sql: 0.0006 сек

SELECT *, INET_NTOA(ip) AS ipa FROM ip_pool WHERE uid>0 ORDER BY ip
Строк: 88. Время выполнения sql: 0.0007 сек

SELECT * FROM data0
Строк: 251. Время выполнения sql: 0.0003 сек

SELECT * FROM users_trf
Строк: 251. Время выполнения sql: 0.0008 сек

SELECT mac, uid FROM mac_uid ORDER BY mac
Строк: 190. Время выполнения sql: 0.0010 сек

3) При добавлении IP+MAC не добавляется комментарий "nodeny"(хотя должен), необходимый для выполнения команды "/ip dhcp-server lease remove [find comment=nodeny]".

Сегодня через Mikrotik включу пару клиентов. По результату отпишусь.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #3 : 26 Июня 2015, 01:14:02 »

Ой, я немного ошибся, надо такой конфиг:

Код:
run     => 1,
period  => 60,
template  => {
            'mikrotik.tmpl' => {
                # куда будет записан сформированный конфиг
                file       => '/tmp/mikdhcp.sh',

                # системная команда, которая будет выполнена перед записью конфига, можно ''
                cmd_before => '',

                # системная команда, которая будет выполнена после записи конфига, можно ''
                cmd_after  => 'sh /tmp/mikdhcp.sh >/dev/null 2>/dev/null',

                # удалять пустые строки
                pretty => 1,
            },
},
subs    => {
            pretty_mac => sub {
                my $mac = shift;
                $mac =~ s/(..)/$1:/g;
                chop $mac;
                return $mac;
            },
},
Записан
k291
Старожил
****

Карма: -10
Offline Offline

Сообщений: 454


Просмотр профиля
« Ответ #4 : 26 Июня 2015, 10:59:04 »

проблему это не решило.
2) если вручную удалить записи из dhcp_lease, то через 60 секунд они не появляются.
Приходится пере запускать # perl nokernel.pl -m make_config -g=make_config_mikrotik -v
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #5 : 26 Июня 2015, 11:32:43 »

проблему это не решило.
2) если вручную удалить записи из dhcp_lease, то через 60 секунд они не появляются.
Приходится пере запускать # perl nokernel.pl -m make_config -g=make_config_mikrotik -v

как я ответил в скайпе:

Цитировать
вручную нельзя удалять - обратной связи нет
Записан
k291
Старожил
****

Карма: -10
Offline Offline

Сообщений: 454


Просмотр профиля
« Ответ #6 : 27 Июня 2015, 23:23:30 »

В Mikrotik на 1м порту, что смотрит в сеть, создал 2а DHCP server`а на реальные и серые IP-адреса. Клиенту с серым IP, дает и блокирует доступ в Интернет. При выдаче клиенту белого IP адреса, адрес выдается правильно, но доступа в интернет нет.

По сути, в связке NoDeny+Mikrotik, не работает
а)доступ в Интернет при белом IP
б)перевод на заглушку при блокировке доступа
в)при смене IP адреса в билинге с серого на белый в Firewall-Address List добавляется строка "goodboys 216.55.77.246"(БЕЗ COMMENT) с буквой D, который нельзя исправить. В Queues не создается правило на скорость. При этом не удалилась строка с серым IP "4462739708 goodboys 10.0.0.252". У белого IP, доступа в интернет нет.
При смене с белого IP адреса на серый в Firewall-Address List удаляется "goodboys 216.55.77.246" и выдает доступ в Интернет.
Записан
k291
Старожил
****

Карма: -10
Offline Offline

Сообщений: 454


Просмотр профиля
« Ответ #7 : 28 Июня 2015, 00:51:36 »

г) если включить клиента в Mikrotik, то через некоторое время, клиент в билинге светится как оффлайн(нет зеленого ключика).Ping`и не проходят.
д) Если клиент в билинге светится как оффлайн и ему заблокировать доступ, то правило Firewall-Address Lists удалится.Но если разрешить доступ, правило не появляется.
Пробовал очищать таблицу и дожидался новой загрузки. Перезагружал модуль, сервер. Результата 0.
Помогает восстановиться из бекапа микротика. И подключение клиента к серверу, чтобы в билинге появился зеленый ключик, при этом в Mikrotik сразу появляется правило в Firewall-Address Lists.
Записан
k291
Старожил
****

Карма: -10
Offline Offline

Сообщений: 454


Просмотр профиля
« Ответ #8 : 24 Июля 2016, 23:03:15 »

Подскажите, что надо сделать, чтобы все IP+МАСи писались в /tmp/mikdhcp.sh и дальше в микротик, а не только те, что сейчас в онлайне и те, что в билинге прописаны статически?
Записан
k291
Старожил
****

Карма: -10
Offline Offline

Сообщений: 454


Просмотр профиля
« Ответ #9 : 03 Января 2018, 23:41:37 »

В RouterOS 6.41 dsa не работает, только rsa.
Код:
mkdir mikdhcp
cd mikdhcp/
ssh-keygen -t rsa -f ./id_rsa
На все вопросы нажимаем Enter

Подключаемся по FTP к Mikrotik
Код:
ftp 194.3.3.1
Водим логин и пароль к микротику.
После авторизации закачиваем на оборудование файл ключа и отключаемся
Код:
ftp> put id_rsa.pub
ftp> exit

Теперь выполним импортирование загруженого нами ключа на Mikrotik`e.
Подключаемся по telnet

Код:
telnet 194.3.3.1
Водим логин и пароль к микротику.

Выполним команду на импортирование ключа и выходим:
Код:
[admin@RouterOS] > /user ssh-keys import user=admin public-key-file=id_dsa.pub
[admin@RouterOS] > quit


В /usr/local/nodeny/kernel/make_config/mikrotik.tmpl
mikdhcp/id_dsa меняем на mikdhcp/id_rsa
ssh -i /usr/local/nodeny/mikdhcp/id_rsa admin@адрес_микротика << EOF
______________________________________________________________________
Минус: в билинге не отображаются клиенты онлайн(нет зеленого ключика).
Плюс: если пропадет связь с билингом, клиент будет получать IP и доступ в интернет, до тех пор, пока билинг не пришлет команду отключить интернет.

Чтобы увидеть авторизованных клиентов в билинге(зеленый ключик), выдавать клиентам статические IP и не боятся, что у клиентов пропадет интернет когда билинг будет недоступен: запускаем скрипт выше и авторизацию по Radius(по инструкции в wiki).
Скрипт: отправляет IP+MAC в Mikrotik. А Mikrotik выдает IP клиенту.
Radius: отображает клиентов онлайн и выдает IP не известному клиенту
Записан
Jovani
NoDeny
Постоялец
*

Карма: -9
Offline Offline

Сообщений: 234


Просмотр профиля
« Ответ #10 : 07 Декабря 2018, 17:43:29 »

Може комусь пригодиться.
Змінено для зручності, щоб в "Leases DHCP" підписувало клієнта (Coment Логін з білінгу), і видаляло не по Coment, а по назві dhcp серверу який закріплено за абонентом.
Name dhcp server повинен мати назву nodeny, або за вашим бажанням, але тоді треба буде виправити в конфігу.
Код:
ssh -i /usr/local/nodeny/mikdhcp/id_rsa admin@адрес_мікротіка << EOF
/ip dhcp-server lease remove [find server =nodeny]
{% for user in users %}
    {% eval i = 0 %}
    {% for ip in user.ips %}
        {% if user.mac.[i] %}
/ip dhcp-server lease add server=nodeny address={{ip.ipa}} mac-address={{user.mac.[i]|pretty_mac}} address-list=goodboys comment="{{user.name}}"
        {% eval i = i + 1 %}
        {% endif %}
    {% endfor %}
{% endfor %}
EOF
Записан
k291
Старожил
****

Карма: -10
Offline Offline

Сообщений: 454


Просмотр профиля
« Ответ #11 : 13 Декабря 2018, 03:55:50 »

Возможно ли заливать на микротик пуллы по тегу ? чтобы не лило все подряд
Записан
k291
Старожил
****

Карма: -10
Offline Offline

Сообщений: 454


Просмотр профиля
« Ответ #12 : 13 Декабря 2018, 04:35:52 »

Данный способ в целом хорош, но с большим нюансом!
Залили список IP+MAC НЕ заблокированных клиентов в микротик(в Leases DHCP) , те кто авторизовался(запросил адрес) попал в Adress List=goodboys в Firewall.
Но есть минус: когда заливается новый список(по умолчанию 60секунд), удаляется все данные из Leases DHCP и Adress List=goodboys в Firewall. Тем самым, все клиенты остаются без интернета на время 10 - ~180секунд, пока авторизация не повторится и не попадут в Adress List=goodboys.
Если кто решил данную проблему, подскажите, как это исправить.
Записан
md5
NoDeny
Старожил
*

Карма: 0
Offline Offline

Сообщений: 256

647618
Просмотр профиля
« Ответ #13 : 24 Декабря 2019, 16:35:21 »

с этим что то придумали ?
Записан
Cell
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1407



Просмотр профиля
« Ответ #14 : 24 Декабря 2019, 18:37:41 »

с этим что то придумали ?
Да что тут придумывать? Микротик это довольно тупое существо и работает медленно. Поэтому никаких игр с авторизацией на нем проводить нельзя. Авторизация должна быть "Всегда онлалйн". Тогда при получении адреса юзер будет мгновенно выходить в интернет (если конечно у него есть бабло на счету и доступ не заблокирован) иначе его удалит из гудбойсов и досвидос.
Записан
Страниц: [1] 2
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!