Для превращения роутера с 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 со всеми выданными лизами. Ведь достаточно проверить существование роутинга. Объясните если не сложно?