Название: 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"; Все, после сохранения, маршруты начнут добавляться автоматически (если их конечно нет). В логе появляются красивые разноцветные записи ))) error и warn - это для красоты, можно заменить на info и все будет черно-белое как тюремная стена.: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; } } } } } В строке скрипта Цитировать :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"; Все, после сохранения, маршруты начнут добавляться автоматически (если их конечно нет). В логе появляются красивые разноцветные записи ))) error и warn - это для красоты, можно заменить на info и все будет черно-белое как тюремная стена.: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; } } } } } В строке скрипта Цитировать :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"]; } } |