MikroTik RouterBoard 450G small ISP

Имаше период в който ми се въртеше в главата идеята да мигрирам граничния маршрутизатор на фирмата към MikroTik. Обмислях варианти как да го направя точно но няколко неща ме спряха. От една страна със сигурност щеще да има някакви сривове в началото а от друга в MikroTik няма някои услуги които ползвам в Debian като например DNS master server и някои програмки за мониторинг. От скоро имам един RouterBoard 450G излишен и постоянно ме гложди мисълта ако все пак бях предприел тази смела постъпка какво щеше да се получи. Не издържах на изкушението и започнах да го конфигурирам. Мисля, че от самото начало трябва да кажа няколко неща:

1. В тази конфигурация няма билингова система за разплащане спиране на потребители и тем подобни.
2. Опитал съм се да реализирам конфигурация от Debian към MikroTik което значи, че не всичко е специфично MikroTik решение тоест за някои неща се предполага, че има по интелигетни решения в MikroTik.
3. Цялата конфигурация е тествана в полуреални условия тъй като не бих рискувал гнева на клинетите но пък успях в някаква степен с друг MikroTik и един Linux да имитирам подобна среда.

Та това щеше да е конфигурацията на граничния ни маршрутизатор ако беше той MikroTik:

SET MAC ADDRESS
Тъй като два от интерфейсите са към доставчик който фиксира мак адресите към клиентите си трябва да ги променим и ние.

interface ethernet set ether1 mac-address=00:15:17:96:77:62
interface ethernet set ether2 mac-address=00:15:17:96:77:63

SET SPEED INTERFACES
В RouterBoard 450G интерфейсите са сетнати на 100Mbits което крайно не ни удовлетворява защото само на ether1 дневно имаме 200Mbits а вечер стига до 300Mbits.

interface ethernet set ether1 full-duplex=yes speed=1Gbps
interface ethernet set ether3 full-duplex=yes speed=1Gbps
interface ethernet set ether4 full-duplex=yes speed=1Gbps
interface ethernet set ether5 full-duplex=yes speed=1Gbps

IP ADDRESS ETHERNET INTERFACES
Тук конфигурираме ип адресите на всички етернет интерфейси. На ether1 и ether2 ще има VLAN-и но аз за всеки случай си вдигам някакъв ип адрес с малка маска като в случая /30.
На ether1 ще вдигнем VLAN100 към локалната ни мрежа с клиентите на който ще продаваме интернет и VLAN523 който ще е резервно трасе от което ще получаваме свързаност в случай на срив на основния ни доставчик.
На ether2 ще вдигнем VLAN149 към основния ни доставчик на Интернет.
На ether3 вдигаме две мрежи: 93.155.130.1/28 е малка орязана мрежа която е заделена за mail, www, ftp сървър и няколко машини на клинети. 172.16.10.0/24 всъщност е офиса на фирмата. За офиса на фирмата нарочно съм избрал частна мрежа защото често се правят какви ли не опити и се връзват всякакви компютри.
На ether4 192.168.1.2/30 е порт свързан с модем на БТК (вече Виваком) останал в наследство от години понеже все забравяме да идем точно на датата за да го спрем договора се преподписва автоматично за още една година.
На ether5 няма нищо 🙂

ip address add address=172.16.101.1/30 interface=ether1
ip address add address=172.16.102.1/30 interface=ether2
ip address add address=172.16.10.1/24 interface=ether3
ip address add address=93.155.130.1/28 interface=ether3
ip address add address=192.168.1.2/30 interface=ether4

SET VLANS
Вдигаме трите VLAN-a който споменахме с ип адресите им.

interface vlan add vlan-id=100 interface=ether1 name=vlan100 disabled=no
interface vlan add vlan-id=523 interface=ether1 name=vlan523 disabled=no
interface vlan add vlan-id=149 interface=ether2 name=vlan149 disabled=no
ip address add address=93.155.131.1/28 interface=vlan100
ip address add address=93.155.131.17/29 interface=vlan523
ip address add address=212.70.158.90/30 interface=vlan149

SET IPIP TUNNELS
По принцип никой не обича да конфигурира IPIP тунели, че каквито и да са тунели но това е неизбежно. Тук имаме четири клиента с публични ип адреси и пълната конфигурация (имам впредвид тунел, ип адрес, ограничение на скороста) защото реших, че когато всичко е на едно място ще има по ясна представа какво е това IPIP тунел и по финните му настройки. Все пак да направим дисекция на един абзац от кода по долу:
С първия ред вдигаме самия тунел като локалния ип адрес на Микротика, тоест нашия е 93.155.131.1 а на отсрещната машина с която осъществяваме тунела е 10.18.9.2. Самия тунел кръщаваме tun6 а опцията disabled=no вдига тунела без да се интересува има ли отсреща въобще машина. На втория ред вдигаме ип адрес в тунела (ако някой пита а предишните 2 ип-та за какво бяха отговора е, че са за транспорт). Третия ред е малко по специален защото спада към защитната стена. Когато се създават тунели се смалява MTU за да може да се енкапсулират пакетите тоест един вид се получава обвивка за да могат да минат данните през тунела без да се усещат от къде минават. Това създава проблеми в някой сайтове като дори не искат да се отворят от браузера ви. С този ред това се избягва и този досаден проблем изчезва. С последния четвърти ред ограничаваме скороста на отсрещното ип в тунела 93.155.130.34 което е на клиента а нашето както се вижда на втория ред е 93.155.130.33. Надявам се с това много кратко обяснение да сам вдигнал малко мъглата около IPIP тунелите в Микротик.

interface ipip add local-address=93.155.131.1 remote-address=10.18.9.2 name=tun6 disabled=no
ip address add address=93.155.130.33/30 interface=tun6
ip firewall mangle add chain=postrouting protocol=tcp tcp-flags=syn out-interface=tun6 action=change-mss new-mss=clamp-to-pmtu
queue simple add target-addresses=93.155.130.34 max-limit=4M/25M
 
interface ipip add local-address=93.155.131.1 remote-address=10.18.9.3 name=tun7 disabled=no
ip address add address=93.155.130.37/30 interface=tun7
ip firewall mangle add chain=postrouting protocol=tcp tcp-flags=syn out-interface=tun7 action=change-mss new-mss=clamp-to-pmtu
queue simple add target-addresses=93.155.130.38 max-limit=4M/25M
 
interface ipip add local-address=93.155.131.1 remote-address=10.18.3.5 name=tun9 disabled=no
ip address add address=93.155.130.45/30 interface=tun9
ip firewall mangle add chain=postrouting protocol=tcp tcp-flags=syn out-interface=tun9 action=change-mss new-mss=clamp-to-pmtu
queue simple add target-addresses=93.155.130.46 max-limit=4M/25M
 
interface ipip add local-address=93.155.131.1 remote-address=10.18.9.55 name=tun10 disabled=no
ip address add address=93.155.130.49/30 interface=tun10
ip firewall mangle add chain=postrouting protocol=tcp tcp-flags=syn out-interface=tun10 action=change-mss new-mss=clamp-to-pmtu
queue simple add target-addresses=93.155.130.50 max-limit=4M/25M

BGP
В момента имаме само един BGP пиър но се очаква в бъдеще те да станат три.

routing bgp instance add name=gcn as=47453 router-id=93.155.130.1 disabled=no
routing bgp peer add remote-address=212.70.158.89 remote-as=12615 instance=gcn
routing bgp network add network=93.155.130.0/24
routing bgp network add network=93.155.131.0/24
routing bgp network add network=93.155.161.0/24
routing bgp aggregate add instance=gcn prefix=93.155.130.0/24
routing bgp aggregate add instance=gcn prefix=93.155.131.0/24
routing bgp aggregate add instance=gcn prefix=93.155.161.0/24

STATIC ROUTING
И няма естествено начин без статично рутиране. Първите десет реда рутират мрежите към клиентите ни на VLAN100.
A 194.141.67.0/24, 194.141.67.0/24, 194.141.67.0/24 са маршрути към Vlan523 който както споменахме е резервния ни доставчик.
През VLAN523 достъпваме и мрежа 212.233.128.0/17 но този път през 93.155.131.18 маршрутизатор.
Tоест на VLAN523 ние имаме два default gateway, 93.155.131.18 и 93.155.131.19.

ip route add dst-address=10.18.1.0/24 gateway=93.155.131.10
ip route add dst-address=10.18.2.0/24 gateway=93.155.131.2
ip route add dst-address=10.18.3.0/24 gateway=93.155.131.3
ip route add dst-address=10.18.4.0/24 gateway=93.155.131.4
ip route add dst-address=10.18.5.0/24 gateway=93.155.131.5
ip route add dst-address=10.18.6.0/24 gateway=93.155.131.6
ip route add dst-address=10.18.7.0/24 gateway=93.155.131.7
ip route add dst-address=10.18.8.0/24 gateway=93.155.131.8
ip route add dst-address=10.18.9.0/24 gateway=93.155.131.9
ip route add dst-address=194.141.67.0/24 gateway=93.155.131.19
ip route add dst-address=194.141.68.0/24 gateway=93.155.131.19
ip route add dst-address=194.141.69.0/24 gateway=93.155.131.19
ip route add dst-address=212.233.142.87/32 gateway=212.70.158.89
ip route add dst-address=10.123.0.0/16 gateway=93.155.131.11
ip route add dst-address=212.233.128.0/17 gateway=93.155.131.18

GLOBAL NAT RULES
Така, тук ще зададем глобални NAT правила. Общо взето 172.16.10.0/24 както споменах е офиса и е “натнат” почти на всички интерфейси тъй като е частна мрежа и е невъзможно да се рутира в Интернет. 10.18.0.0/16 има NAT към БТК и 10.123.0.0/16 към vlan149 и vlan523. Това не са правила за всеки един клиент а само индивидуални. По надолу всеки един клиент ще има NAT и DNAT на всеки един адрес.

ip firewall nat add chain=srcnat  src-address=172.16.10.0/24 out-interface=vlan523 action=masquerade
ip firewall nat add chain=srcnat  src-address=172.16.10.0/24 out-interface=vlan100 action=masquerade
ip firewall nat add chain=srcnat  src-address=172.16.10.0/24 out-interface=vlan149 action=masquerade
ip firewall nat add chain=srcnat  src-address=172.16.10.0/24 out-interface=ether4 action=masquerade
ip firewall nat add chain=srcnat  src-address=10.18.0.0/16 out-interface=ether4 action=masquerade
ip firewall nat add chain=srcnat  src-address=10.123.0.0/16 out-interface=vlan149 to-addresses=93.155.130.2 action=src-nat
ip firewall nat add chain=srcnat  src-address=10.123.0.0/16 out-interface=vlan523 to-addresses=93.155.130.2 action=src-nat

NAT AND SHAPER
Тъй като мрежата поне засега не позволява физически публичните ип адреси да стигнат до клиентите има решение на въпроса всеки един хост да получава NAT и DNAT. Макар и това да е малко глупаво е по добре от нищо. В този случай стигаме до варианта, че всеки клиент трябва да има следните три реда отдолу. Първия както вече е ясно е NAT втория DNAT а третия е ограничение на скороста.

ip firewall nat add chain=srcnat src-address=10.18.5.3 to-addresses=93.155.130.80 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.80 to-addresses=10.18.5.3 action=dst-nat
queue simple add target-addresses=10.18.5.3 max-limit=1M/15M

NAT AND SHAPER LINUX SCRIPT
Тук малко се запънах, доста мислих по въпроса и накрая намерих решението с добрия стар bash script на една Линукс машина. подредих наличните публичните ип адреси с клинетските частни в два текстови файла /etc/ipclient за първата скорост и /etc/ipclients2 за втората в синтаксис:

93.155.130.80:10.18.5.3
93.155.130.81:10.18.4.58
93.155.130.82:10.18.9.62
93.155.130.83:10.18.5.65
93.155.130.84:10.18.1.129
93.155.130.85:10.18.5.113
93.155.130.86:10.18.5.112
93.155.130.87:10.18.3.92
93.155.130.88:10.18.5.23
93.155.130.89:10.18.5.111
93.155.130.90:10.18.5.98
93.155.130.91:10.18.1.128
93.155.130.92:10.18.1.127
93.155.130.93:10.18.5.110
93.155.130.94:10.18.9.72
93.155.130.95:10.18.1.69
93.155.130.96:10.18.2.71
93.155.130.97:10.18.6.173
93.155.130.98:10.18.5.109

И с долния скрипт извлякох даните в друг текстов файл, вече подредени и готови за терминала на Микротик

#!/bin/bash
 
IPCLIENT=`grep -v \# '/etc/ipclient'`;
for IPCLIENT in $IPCLIENT; do
IPCLIENT=(${IPCLIENT//:/ });
echo ip firewall nat add chain=srcnat src-address=${IPCLIENT[0]} to-addresses=${IPCLIENT[1]} action=src-nat >> /root/mikrotik-sh
echo ip firewall nat add chain=dstnat dst-address=${IPCLIENT[1]} to-addresses=${IPCLIENT[0]} action=dst-nat >> /root/mikrotik-sh
echo queue simple add target-addresses=${IPCLIENT[0]} max-limit=2M/15M >> /root/mikrotik-sh
done;
 
IPCLIENT=`grep -v \# '/etc/ipclient2'`;
for IPCLIENT in $IPCLIENT; do
IPCLIENT=(${IPCLIENT//:/ });
echo ip firewall nat add chain=srcnat src-address=${IPCLIENT[0]} to-addresses=${IPCLIENT[1]} action=src-nat >> /root/mikrotik-sh
echo ip firewall nat add chain=dstnat dst-address=${IPCLIENT[1]} to-addresses=${IPCLIENT[0]} action=dst-nat >> /root/mikrotik-sh
echo queue simple add target-addresses=${IPCLIENT[0]} max-limit=4M/25M >> /root/mikrotik-sh
done;

NAT AND SHAPER MIKROTIK RULES
Това получих в новия файл. Не съм копирал целия файл разбира се защото не е възможно но в момента има около 600 клиента по три реда са средно около 1800 реда код …

ip firewall nat add chain=srcnat src-address=10.18.9.55 to-addresses=93.155.130.60 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.60 to-addresses=10.18.9.55 action=dst-nat
queue simple add target-addresses=10.18.9.55 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.2.70 to-addresses=93.155.130.63 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.63 to-addresses=10.18.2.70 action=dst-nat
queue simple add target-addresses=10.18.2.70 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.1.4 to-addresses=93.155.130.64 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.64 to-addresses=10.18.1.4 action=dst-nat
queue simple add target-addresses=10.18.1.4 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.4.31 to-addresses=93.155.130.66 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.66 to-addresses=10.18.4.31 action=dst-nat
queue simple add target-addresses=10.18.4.31 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.1.36 to-addresses=93.155.130.67 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.67 to-addresses=10.18.1.36 action=dst-nat
queue simple add target-addresses=10.18.1.36 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.2.13 to-addresses=93.155.130.68 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.68 to-addresses=10.18.2.13 action=dst-nat
queue simple add target-addresses=10.18.2.13 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.9.66 to-addresses=93.155.130.69 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.69 to-addresses=10.18.9.66 action=dst-nat
queue simple add target-addresses=10.18.9.66 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.3.8 to-addresses=93.155.130.61 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.61 to-addresses=10.18.3.8 action=dst-nat
queue simple add target-addresses=10.18.3.8 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.3.15 to-addresses=93.155.130.71 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.71 to-addresses=10.18.3.15 action=dst-nat
queue simple add target-addresses=10.18.3.15 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.4.7 to-addresses=93.155.130.72 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.72 to-addresses=10.18.4.7 action=dst-nat
queue simple add target-addresses=10.18.4.7 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.5.40 to-addresses=93.155.130.74 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.74 to-addresses=10.18.5.40 action=dst-nat
queue simple add target-addresses=10.18.5.40 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.5.55 to-addresses=93.155.130.75 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.75 to-addresses=10.18.5.55 action=dst-nat
queue simple add target-addresses=10.18.5.55 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.7.55 to-addresses=93.155.130.77 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.77 to-addresses=10.18.7.55 action=dst-nat
queue simple add target-addresses=10.18.7.55 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.5.4 to-addresses=93.155.130.79 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.79 to-addresses=10.18.5.4 action=dst-nat
queue simple add target-addresses=10.18.5.4 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.6.84 to-addresses=93.155.162.188 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.162.188 to-addresses=10.18.6.84 action=dst-nat
queue simple add target-addresses=10.18.6.84 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.4.8 to-addresses=93.155.162.203 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.162.203 to-addresses=10.18.4.8 action=dst-nat
queue simple add target-addresses=10.18.4.8 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.1.7 to-addresses=93.155.162.222 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.162.222 to-addresses=10.18.1.7 action=dst-nat
queue simple add target-addresses=10.18.1.7 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.5.12 to-addresses=93.155.162.223 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.162.223 to-addresses=10.18.5.12 action=dst-nat
queue simple add target-addresses=10.18.5.12 max-limit=4M/25M
ip firewall nat add chain=srcnat src-address=10.18.5.3 to-addresses=93.155.130.80 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.80 to-addresses=10.18.5.3 action=dst-nat
queue simple add target-addresses=10.18.5.3 max-limit=2M/15M
ip firewall nat add chain=srcnat src-address=10.18.4.58 to-addresses=93.155.130.81 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.81 to-addresses=10.18.4.58 action=dst-nat
queue simple add target-addresses=10.18.4.58 max-limit=2M/15M
ip firewall nat add chain=srcnat src-address=10.18.9.62 to-addresses=93.155.130.82 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.82 to-addresses=10.18.9.62 action=dst-nat
queue simple add target-addresses=10.18.9.62 max-limit=2M/15M
ip firewall nat add chain=srcnat src-address=10.18.5.65 to-addresses=93.155.130.83 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.83 to-addresses=10.18.5.65 action=dst-nat
queue simple add target-addresses=10.18.5.65 max-limit=2M/15M
ip firewall nat add chain=srcnat src-address=10.18.1.129 to-addresses=93.155.130.84 action=src-nat
ip firewall nat add chain=dstnat dst-address=93.155.130.84 to-addresses=10.18.1.129 action=dst-nat
queue simple add target-addresses=10.18.1.129 max-limit=2M/15M

DNS
Така се се стартира кешираш dns server от сървърите на http://www.opendns.com/

ip dns set servers=208.67.220.220 allow-remote-requests=yes

FIREWALL
“Брутфорс” атаките към протокола ssh ужасно дразнят затова аз на всяка машина блокирам 22 порт към цял Интернет и си оставям достъп само от евентуалните мрежи от които мога да вляза.

ip firewall filter add chain=input connection-state=invalid action=drop
ip firewall filter add chain=input connection-state=established action=accept
ip firewall filter add chain=input action=accept protocol=tcp src-address=172.16.10.0/24 port=22
ip firewall filter add chain=input action=accept protocol=tcp src-address=212.233.128.0/17 port=22
ip firewall filter add chain=input action=accept protocol=tcp src-address=93.155.130.0/24 port=22
ip firewall filter add chain=input action=accept protocol=tcp src-address=93.155.131.0/24 port=22
ip firewall filter add chain=input action=accept protocol=tcp src-address=93.155.161.0/24 port=22
ip firewall filter add chain=input action=drop protocol=tcp port=22

STOP SERVICE
Тук спирам услугите които няма да ползвам. В тази ситуация е видно, че от гледна точка на сигурноста ще оставя само SSH за отдалечен достъп и то само от определени мрежи.

ip service disable ftp
ip service disable telnet
ip service disable www
ip service disable winbox

BACKUP ROUTE IN CASE OF FAILURE OF PRIMARY
Сега, нека да обобщим. В най простия вариант ние имаме девет мрежи от 10.18.0.0/16 достъпвани от vlan100 където се намират клиентите на които продаваме Интернет. По подразбиране на VLAN149 се намира основния доставчик на Интернет с който имаме BGP. Споменах вече, че третия VLAN523 е резервно трасе в случай на срив на VLAN100. Ако найстина все пак се случи проблем със свързаноста на основния ни доставчик просто спираме BGP и за default gateway вдигаме 93.155.131.19.

routing bgp instance disable gcn
ip route add dst-address=0.0.0.0/0 gateway=93.155.131.19

ADVANCED ROUTING
VLAN 523 е резервно трасе но това не значи, че не можем да го използваме. В зависимост от капацитета на трасето можем да рутираме една част от клинетите през него. В този случаи мрежа 10.18.3.0/24 и 10.18.7.0/24 ще бъдат асоциирани към 93.155.131.19 тоест всички пакети от и към тях ще върят през резервното трасе. Това е добър и лесен начин в някаква степен да се балансира капацитета на маршрутизатора в случай на два доставчика.

ip firewall mangle add chain=prerouting action=mark-routing new-routing-mark=routing-mu src-address=10.18.3.0/24 disabled=no
ip firewall mangle add chain=prerouting action=mark-routing new-routing-mark=routing-mu src-address=10.18.7.0/24 disabled=no
ip route add dst-address=0.0.0.0/0 gateway=93.155.131.19 scope=255 target-scope=10 routing-mark=routing-mu disabled=no

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This Post Has 2 Comments

  1. Meltem Hasanov

    Тази машинка, с кода който си я натоварил, на колко трафик издържа? Пускал ли си я в реално действие?