Биллинговая система Nodeny

Главная категория => Общий раздел => Тема начата: Cell от 15 Декабря 2017, 08:18:17



Название: Mikrotik и ip unnumbered
Отправлено: Cell от 15 Декабря 2017, 08:18:17
Для превращения роутера с RouterOS на борту в полноценный IPoE BRAS мне не хватает ip unnumbered.
Ну как бы аналог ip unnumbered как и в любом линуксе на микротике запилить довольно просто - добавляя соответствующие маршруты вручную. Так и делал раньше, пока мне это не надоело. Но потом, потратив определенную часть своей жизни на изучение гомноскриптов родилось вот такое решение:

Реальная сеть добавляется в networks обычным образом, и реальники начинают выдаваться при помощи связки dhcp+radius и все бы хорошо, но у клиента с реальником ничего не работает. Во-первых на всех влан интерфейсах необходимо переключить ARP  в режим proxy-arp. Во-вторых создадим бридж с названием lo и не будем в него добавлять никаких портов (это будет наш аналог localhost), присвоим этому интерфейсу ip адрес, который будет являться шлюзом для всех остальных клиентов, с реальными адресами, разбросанных по вланам (в примере это 193.55.37.1 - чей это адрес хз, придумал на ходу) В третьих на каждом из dhcp серверов (на микротик они поднимаются для каждого влана отдельно) в поле Lease Script добавляем следующий скрипт:
Код:
:local realgw "193.55.37.1";
:if ($leaseBound = 1) do={
/ip dhcp-server lease;
:foreach i in=[find dynamic=yes] do={
:local dhcpip
:set dhcpip [ get $i address ];
:if ($leaseActIP = $dhcpip) do={
                                 :if ([:put ($dhcpip&255.255.0.0)]="193.55.0.0") do={
                                  if ([:len [/ip route find where dst-address=$dhcpip."/32"]] >0)    do={                            
                           /log warn "New Real IP already added $dhcpip";
                                     } else={
                                                   /log error "New real IP $dhcpip";
                                                   /ip route add distance=1 dst-address=$dhcpip gateway=[/ip dhcp-server get [/ip dhcp-server find name=$leaseServerName] interface] pref-src=$realgw;
        }
        }
           }
     }
}
Все, после сохранения, маршруты начнут добавляться автоматически (если их конечно нет). В логе появляются красивые разноцветные записи ))) error и warn - это для красоты, можно заменить на info и все будет черно-белое как тюремная стена.
В строке скрипта
Цитировать
:if ([:put ($dhcpip&255.255.0.0)]="193.55.0.0") do={
Идет определение, реальник используется или нет, поэтому необходимо подогнать под свою реальную сеть.

Есть один недостаток у этого способа: Если вы решите переместить юзера, с уже прикрученым реальником и маршрутом в другой влан - то маршрут в новый влан не добавится - его сначала придется вручную убрать из старого.
Этот же способ подходит, если у вас несколько роутеров, а реальная сеть одна несчастная... и что же делать? Да все точно так же делается, только связываете между собой роутеры динамической маршрутизацией, чтобы каждый из роутеров в сети всегда знал где какой адрес находится. Я для этого использую iBGP (если нет своей AS можно использовать фейковое пространство)


Название: Re: Mikrotik и ip unnumbered
Отправлено: 0xbad0c0d3 от 22 Декабря 2017, 15:58:36
Вот тебе делать-то нефиг ))


Название: Re: Mikrotik и ip unnumbered
Отправлено: Cell от 22 Декабря 2017, 16:36:41
Вот тебе делать-то нефиг ))
Видимо да, т.к. это походу никому не нужно. В скрипте есть синтаксическая ошибка, но всех все устроило )))
Это же вам не пиликать на каждом шагу о "магии" циско )))


Название: Re: Mikrotik и ip unnumbered
Отправлено: 0xbad0c0d3 от 26 Декабря 2017, 13:27:50
:D Погоди, сейчас создадут 100500 трелов по поводу того, что "неработает!" ))))


Название: Re: Mikrotik и ip unnumbered
Отправлено: tom от 09 Апреля 2018, 14:40:21
Вітаю.
А є данні по HW mikrotik і трафіку/кількість клієнтів у ролі BRAS. Чи реалізовано в mikrotik авто розраховування qinq по dhcp запиту?


Название: Re: Mikrotik и ip unnumbered
Отправлено: 2garin.90 от 26 Июня 2018, 13:07:46
Для превращения роутера с RouterOS на борту в полноценный IPoE BRAS мне не хватает ip unnumbered.
Ну как бы аналог ip unnumbered как и в любом линуксе на микротике запилить довольно просто - добавляя соответствующие маршруты вручную. Так и делал раньше, пока мне это не надоело. Но потом, потратив определенную часть своей жизни на изучение гомноскриптов родилось вот такое решение:

Реальная сеть добавляется в networks обычным образом, и реальники начинают выдаваться при помощи связки dhcp+radius и все бы хорошо, но у клиента с реальником ничего не работает. Во-первых на всех влан интерфейсах необходимо переключить ARP  в режим proxy-arp. Во-вторых создадим бридж с названием lo и не будем в него добавлять никаких портов (это будет наш аналог localhost), присвоим этому интерфейсу ip адрес, который будет являться шлюзом для всех остальных клиентов, с реальными адресами, разбросанных по вланам (в примере это 193.55.37.1 - чей это адрес хз, придумал на ходу) В третьих на каждом из dhcp серверов (на микротик они поднимаются для каждого влана отдельно) в поле Lease Script добавляем следующий скрипт:
Код:
:local realgw "193.55.37.1";
:if ($leaseBound = 1) do={
/ip dhcp-server lease;
:foreach i in=[find dynamic=yes] do={
:local dhcpip
:set dhcpip [ get $i address ];
:if ($leaseActIP = $dhcpip) do={
                                 :if ([:put ($dhcpip&255.255.0.0)]="193.55.0.0") do={
                                  if ([:len [/ip route find where dst-address=$dhcpip."/32"]] >0)    do={                            
                           /log warn "New Real IP already added $dhcpip";
                                     } else={
                                                   /log error "New real IP $dhcpip";
                                                   /ip route add distance=1 dst-address=$dhcpip gateway=[/ip dhcp-server get [/ip dhcp-server find name=$leaseServerName] interface] pref-src=$realgw;
        }
        }
           }
     }
}
Все, после сохранения, маршруты начнут добавляться автоматически (если их конечно нет). В логе появляются красивые разноцветные записи ))) error и warn - это для красоты, можно заменить на info и все будет черно-белое как тюремная стена.
В строке скрипта
Цитировать
:if ([:put ($dhcpip&255.255.0.0)]="193.55.0.0") do={
Идет определение, реальник используется или нет, поэтому необходимо подогнать под свою реальную сеть.

Есть один недостаток у этого способа: Если вы решите переместить юзера, с уже прикрученым реальником и маршрутом в другой влан - то маршрут в новый влан не добавится - его сначала придется вручную убрать из старого.
Этот же способ подходит, если у вас несколько роутеров, а реальная сеть одна несчастная... и что же делать? Да все точно так же делается, только связываете между собой роутеры динамической маршрутизацией, чтобы каждый из роутеров в сети всегда знал где какой адрес находится. Я для этого использую iBGP (если нет своей AS можно использовать фейковое пространство)


По скрипту все понятно, опечатка очевидна (второй IF без ":" в начале).
Вот только не понял зачем сверять $leaseActIP со всеми выданными лизами. Ведь достаточно проверить существование роутинга. Объясните если не сложно?


Название: Re: Mikrotik и ip unnumbered
Отправлено: Cell от 26 Июня 2018, 15:05:30
Давно было дело, уже не помню почему так. Попробуйте усовершенствовать.
Сейчас присмотрелся. Да, можно наверное было бы сделать по другому. Прикол в том что дальше везде используется $dhcpip который как раз и получался методом перебора, хотя можно было тупо использовать $leaseActIP и этот цикл был бы нафиг не нужен.


Название: Re: Mikrotik и ip unnumbered
Отправлено: 2garin.90 от 26 Июня 2018, 16:31:18
Давно было дело, уже не помню почему так. Попробуйте усовершенствовать.
Сейчас присмотрелся. Да, можно наверное было бы сделать по другому. Прикол в том что дальше везде используется $dhcpip который как раз и получался методом перебора, хотя можно было тупо использовать $leaseActIP и этот цикл был бы нафиг не нужен.

Немного другая реализация с дополнительной проверкой существования роутинга.
Кстати, в версии ROS 6.40 и выше роутинг автоматически удаляется скриптом при окончании lease time или при ручном удалении из dhcp leases. Соответственно роутов ведущих в никуда не будет.
Так же возможна выдача IP из разных пулов GW определяется в зависимости от пула.

Код:
:local realgw;
:local gatwif;
:if ($leaseBound = 1) do={

        /log warn "START: $leaseActIP";
          :if ([:put ($leaseActIP&255.255.255.0)]="193.112.164.0") do={:set $realgw "193.112.164.1";}
          :if ([:put ($leaseActIP&255.255.255.0)]="192.214.208.0") do={:set $realgw "192.214.208.1";}
          :set $gatwif [/ip dhcp-server get [/ip dhcp-server find name=$leaseServerName] interface];
          /log warn "GW: $realgw  GATWIF=$gatwif";

    :if ([:len [/ip route find where dst-address=$leaseActIP."/32"]] >0)    do={
            /log error "New Real IP already added $leaseActIP";
            /ip route remove [find where dst-address=$leaseActIP."/32"];
            /ip route add distance=1 dst-address=$leaseActIP gateway=$gatwif pref-src=$realgw comment="Route: $leaseActIP TO: $gatwif";
     } else={
             /log error "New real IP $leaseActIP";
             /ip route add distance=1 dst-address=$leaseActIP gateway=$gatwif pref-src=$realgw comment="Route: $leaseActIP TO: $gatwif";
     }
} else= {
             /log warn "STOP $leaseActIP";
             /ip route remove [find where dst-address=$leaseActIP."/32"];
}


Название: Re: Mikrotik и ip unnumbered
Отправлено: Cell от 26 Июня 2018, 17:24:43
Смысла нет разные гетвеи подставлять для разных подсетей, разве что если сети ну вообще разные что ппц, как в примере. Если есть возможность все возможные комбинации объеденить одной масской - то достаточно обычного прокси-арп и 1 ипа на локалхосте. А вообще- имеет право на жизнь. Нужно будет мне модернизировать свою поделку на новый лад, т.к. мне кое что тут не нравится.


Название: Re: Mikrotik и ip unnumbered
Отправлено: elite от 26 Июня 2018, 19:28:52
от почему микротиковцы не могут запилить нормальный ip unnumbered?


Название: Re: Mikrotik и ip unnumbered
Отправлено: Cell от 26 Июня 2018, 22:48:44
Ппц... вот что значит нормальный? Он нормальный и так )))
В  циско на влан вешаешь ип и он сразу прописывается в роут.  На самом деле и тут можно также делать, и не только лишь все знают как )


Название: Re: Mikrotik и ip unnumbered
Отправлено: 2garin.90 от 27 Июня 2018, 12:14:37
Ппц... вот что значит нормальный? Он нормальный и так )))
В  циско на влан вешаешь ип и он сразу прописывается в роут.  На самом деле и тут можно также делать, и не только лишь все знают как )


Можно и так, как говориться Cisco like  :D Логика та же.


Код:
:local realgw;
:local gatwif;
:if ($leaseBound = 1) do={
       /log info "+++ Start ACCT for $leaseActIP";
          :if ([:put ($leaseActIP&255.255.255.0)]="193.112.164.0") do={:set $realgw "193.112.164.1";}
          :if ([:put ($leaseActIP&255.255.255.0)]="192.214.208.0") do={:set $realgw "192.214.208.1";}
          :set $gatwif [/ip dhcp-server get [/ip dhcp-server find name=$leaseServerName] interface];
          /log warn "GW: $realgw  GATWIF=$gatwif";

    :if ([:len [/ip address find where network=$leaseActIP]] >0)    do={
            /log error "New Real IP already exist $leaseActIP";
            /ip address remove [find where network=$leaseActIP];
            /ip address add address=$realgw network=$leaseActIP interface=$gatwif comment="Unnumbered $leaseActIP";
     } else={
             /log error "New real IP $leaseActIP added";
             /ip address add address=$realgw network=$leaseActIP interface=$gatwif comment="Unnumbered $leaseActIP";
     }
} else={
             /log warn "STOP $leaseActIP";
             /ip address remove [find where network=$leaseActIP];
}


Название: Re: Mikrotik и ip unnumbered
Отправлено: Cell от 27 Июня 2018, 13:25:16
От блин..... ты знал!!!! )))))))))))))


Название: Re: Mikrotik и ip unnumbered
Отправлено: Cell от 24 Сентября 2018, 00:55:46
После небольшой модернизации скрипт стал выглядеть вот так:

Код:
:local realgw "193.55.37.1";
:if ($leaseBound = 1) do={
        :if ([:put ($leaseActIP&255.255.0.0)]="193.55.0.0") do={
     /log warn "START: $leaseActIP";
        :if ([:len [/ip route find where dst-address=$leaseActIP."/32"]] >0)    do={                             
/log warn "New Real IP already added $leaseActIP";
              } else={
        /log error "New real IP $leaseActIP";
        /ip route add distance=1 dst-address=$leaseActIP gateway=[/ip dhcp-server get [/ip dhcp-server find name=$leaseServerName] interface] pref-src=$realgw;
           }
     }
} else= {
          :if ([:put ($leaseActIP&255.255.0.0)]="193.33.0.0") do={
             /log warn "STOP $leaseActIP";
             /ip route remove [find where dst-address=$leaseActIP."/32"];
}
}


При этом маршрут по окончании лизинга автоматически удаляется т.е. мы лишились единственного недостатка.


Название: Re: Mikrotik и ip unnumbered
Отправлено: Cell от 04 Июня 2023, 22:59:22
Еще одна небольшая модернизация. Добавлена пауза в 1.5 секунды т.к. слишком быстрые роутеры ведут себя неадекватно.
Код:
:local realgw "193.55.37.1";
:if ($leaseBound = 1) do={
        :if ([:put ($leaseActIP&255.255.0.0)]="193.55.0.0") do={
                      :delay 1500ms
     /log warn "START: $leaseActIP";
        :if ([:len [/ip route find where dst-address=$leaseActIP."/32"]] >0)    do={                             
/log warn "New Real IP already added $leaseActIP";
              } else={
        /log error "New real IP $leaseActIP";
        /ip route add distance=1 dst-address=$leaseActIP gateway=[/ip dhcp-server get [/ip dhcp-server find name=$leaseServerName] interface] pref-src=$realgw;
           }
     }
} else= {
          :if ([:put ($leaseActIP&255.255.0.0)]="193.33.0.0") do={
             /log warn "STOP $leaseActIP";
             /ip route remove [find where dst-address=$leaseActIP."/32"];
}
}