MikroTik som företag är egentligen fött ur den mjukvara man ursprungligen skapade som heter RouterOS, just nu är man uppe på version 7. RouterOS användes från början i billiga, oftast gamla uttjänta, datorer i vilka man installerade något extra fysiskt gränssnitt och vips så hade man en billig router och brandvägg som kunde hantera allt från enkla routingprotokoll till avancerad BGP mot Internet, till exempel … Redan i mitten av 90-taket när dåvarande ”snabb-Sunet” (Sveriges Universitetsnätverk, snabb=100 Mbps mellan respektive anslutning och backbone) skulle sättas upp var det många universitet och högskolor som knorrade över att man behövde köpa väldigt dyr utrustning för att kunna köra BGP som routingprotokoll vilket var standard inom Sunet och att hela routingtabellen för Internet behövde hanteras i respektive ansluten router. Jag vet att RouterOS redan var känt inom den akademiska världen då mjukvaran utvecklades tillsammans med studenter från Riga i Lettland, och minst en svensk högskola anslöt sig till Sunet med hjälp av en jättetidig version av RouterOS, redan i samband med, eller kanske strax innan, att MikroTik registrerades som företag 1996.
När man väl har en fungerande och uppskattad mjukvara så är kanske inte steget särskilt långt till att man även vill ha en egen hårdvara och 2002 introducerade Mikrotik det som kallas RouterBOARD, vilket är samlingsnamnet på ett flertal kompetenta produkter under eget varumärke och naturligtvis körde man från början sitt eget operativsystem, RouterOS. För vissa modeller innebar det dock att man kan erbjuda hög prestanda för ren switching men för routing- och brandväggsfunktioner så sjunker prestandan avsevärt då kommunikation mellan switchdelen och CPU oftast är begränsande. Vissa av dessa modeller erbjuder sedan 2019 ett mycket enklare operativsystem som heter SwitchOS eller förkortat SwOS.
Nyligen införde MikroTik, i ett försök att bättra på användarvänligheten, möjligheten till att använda en typ av defaultkonfiguration i sina routrar, men för mig lämnade det en hel del övrigt att önska så jag börjar gärna med en helt ren ”burk” från början, med admin som användare och inget lösenord som enda information i den.
Vad gör man då när man loggar in med Winbox första gången? Winbox är förresten en liten trevlig grafisk applikation vilken numera även finns för Mac OS … vilket jag uppskattar, och säkert är det mer än jag som gillar detta gränssnitt. Med Winbox räcker det med en L2-anslutning, IP-adress spelar alltså ingen roll även om man snabbt fyller sitt nät med L2-broadcast då det är detta som ger möjligheten till kommunikation utan IP-adressering. Nog om detta, vad gör man första gången …
Vill man inte köra Winbox så finns det ett Winboxliknande webbgränssnitt att tillgå, eller varför inte lite gammeldags hederlig SSH och CLI … 😉
OBS, OBS, OBS!!!!! Jag beskriver alla stegen nedan direkt från minnet så jag hoppas jag inte missar något …
- Skapa en ny användare med fulla rättigheter under annat namn än admin, root eller liknande och sätt ett riktigt lösenord värt namnet. Logga sedan ut och logga in med det nya användarnamnet, radera sedan användaren admin.
- För interfacet som skall anslutas mot internet, eller annan ”osäker” miljö,
- tillåt i brandväggen enbart för chain = input etablerad och eventuellt relaterad tcp-trafik om detta behövs, sedan deny all på resterande tcp för chain = input.
- Tillåt också udp-trafik med source port 53 så att DNS-svar tillåts tillbaka till RouterOS, sedan deny all för udp på porten mot Internet.
- Gör också deny all för all inkommande icmp-trafik på porten som skall anslutas mot internet.
- Anslut sedan det förberedda interfacet till din Internetleverantörs utrustning, kontrollera så att man får den förväntade anslutningshastigheten och korrekt duplexinställning.
- Om jag har, från min Internetleverantör, dynamisk tilldelning av IP-adress via DHCP, vilket oftast är fallet för oss privatpersoner, så får man gå in under IP-konfigurationen och skapa en DHCP-klient för det interface jag anslutit ”mot Internet”. Så snart detta är gjort kommer den tilldelade IP-adressen att synas i konfigurationsrutan. Om det fungerar som det skall alltså …
- Under IP-konfigurationen kan jag sedan gå in under routes och addera en default route via interfacet som anslutits mot Internet.
- Under System, sätt upp en NTP-klient för tidssynkronosering, tillåt svaren från Internet i brandväggen för chanin = input.
Känns detta sådär lagom hemtamt och bekvämt så långt? Det är bra om du svarar ett rungande ”JA” på den frågan för om du känner dig lite vilse i resonemanget ovan, ja du … då är inte MikroTik med sitt RouterOS något för dig, hur trevligt Winbox än är som grafiskt gränssnitt. För tro nu inte att vi är klara, än så länge har vi bara anslutit en port på ett något sånär kontrollerat sätt mot Internet …
Personligen är jag inte helt ok med att använda default Vlan-ID, vilket är 1 även i MikroTiks värld. Inte ens i hemmiljö … så vi tänker oss att Vlan 123 är mycket bättre. Eller hur? Det är nu vi behöver fundera på hur blockschemat för just din MikroTik-burk ser ut … och vi tänker oss nu en RB4011…
… och vi kommer hela tiden att behöva tänka på detta blockschema under tiden vi konfigurerar routern så att vi undviker flaskhalsar.
- Nu går jag in under Bridge, skapar en ny brygga med defaultintällningar utom att jag under sektion ”Vlan” klickar i Vlan filtering, annars allt orört.
- Under Ports, knyt de portar som du vill ansluta mot ditt lokala nät eller mot lokala enheter som skak komma åt varandra eller kunna surfa mot internet.
- Under Vlan, skapa Vlan 123 och ange vilken port du skall ansluta din insida mot eller t.ex. din dator, denna port skall anges under Untagged.
- Nu har du knutit Vlan 123 via bryggan och därmed switchchippet som kontrollerar porten för datorn, nu måste du även ansluta Vlan 123 mot din CPU då det är här du kan hantera routing och brandvägg, bl.a… Så i samma konfigurationsruta som du angav porten för taggad trafik så anger du också att du vill ha taggad trafik via Bridge1. Då har du skapat förutsättning för att vi skall kunna konfigurera routern så att CPU:n kan se och därmed hantera trafik på Vlan 123.
Visst är det lite roligt, att ha så fullständig kontroll över trafiken mellan de olika delarna i blockschemat? Visst?!?!?! 🙂
Färdiga nu då? Nope …
Nu skall vi in i den del som hanterar CPU-och mjukvarudelen av routingen …
- Under Interface, gå in under Vlans och skapa Vlan 123, ändra namnet och knyt Vlanet till Bridge1 istället för ett fysiskt interface.
- Under IP, under Addresses sätt upp en IP-adress som är din lokala gateway för Vlan 123.
Om du nu ansluter en dator till en port i Vlan 123, sätter en IP-adress i samma IP-nät som du konfigurerade i tidigare punkt så borde du kunna t.ex. pinga din gateway-IP som du konfigurerade ovan.
- Vill du nu ha en automagisk IP-tilldelning för Vlan 123? Under IP, gå till Pools och sätt upp ett span av IP-adresser att använda, ändra namnet.
- Under IP, välj DHCP Server och sätt upp en ny med din Pool ovan som IP-span, glöm inte vilka DNSer du vill att klienterna skall använda.
- Testa att anslut en dator uppsatt för automatisk IP-tilldelning och anslut den till en port i Vlan 123, du skall nu få en IP-adress via din nya fina DHCP-server 😉
Då har vi en fungerande utsida mot internet och en fungerande insida via Vlan 123, nu är vi väl ändå klara? NEJ! Såklart måste vår insida knytas ihop med vår utsida, det troliga är att du satt upp din insida med privata IP-adress, t.ex 192.168…nånting eller 10…nånting eller hur? Bra, då måste vi adressöversätta privata adresser på insidan till publika IP-adresser på utsidan och sedan tillåta svarstrafiken att komma tillbaka in till insidan …???
- Under IP, välj Firewall och under Filter rules skapar du en ny regel som tillåter (accept) för chain = forward trafik oavsett protokoll från insidans IP och insidans Vlan 123 mot utsidans interface mot IP 0.0.0.0/0 och som har connection state new och established.
- Skapa sedan ytterligare en regel för chain = forward som tillåter (accept) trafik oavsett protokoll från interfacet mot Internet för IP 0.0.0.0/0 mot insidans Vlan 123 och insidans IP-nät med CConnection state established och related.
- Under fliken NAT, skapa en ny regel med insidans IP-nät och Vlan 123 som source samt utsidans interface mot internet som destination och som Action = Masquerade.
NU, OCH FÖRST NU!!!! har du en fungerande router som tillåter dig att ansluta en dator på ett insidesinterface och som då kan nå Internet … 😉
… och som lite överkurs, vill du kanske köra det MikroTik kallar Hardware offloading?
- Gå in i brandväggen, under Filter rules skapar du en exakt kopia på den regel som tillåter att svarstrafiken kommer tillbaka in i chain = forward men istället för Action = accept så anger du Action = fasttrack connection och sedan lägger du denna regel precis före accept-regeln. Nu kommer du att se ett antal andra regler som automagiskt skapas för denna funktion och de kommer att synas som Action = passthrough i de olika flikarna under Firewall.
Det som sker nu är att de flesta svarspaket från Internet mot insidan kommer att hanteras utan CPU:ns medverkan och om du testar med och utan denna regel under till exempel tester med Speedtest så kommer du att se CPU-förbrukningen sjunka markant så snart du aktiverar funktionen.
Så, hur sammanfattar vi då detta?
- Säkra användare.
- Sätt upp brandvägg mot Internet för routern.
- Konfigurera NTP.
- Fysisk anslutning.
- DHCP-klient mot Internetleverantör.
- Konfigurera default route.
- Skapa en brygga med Vlan, i switchdelen, för insidan och anslut portar till denna.
- Skapa samma Vlan i CPU- och mjukvarudelen.
- Knyt ett IP-nät till Vlanet.
- Sätt upp en DHCP-server i Vlanet.
- I brandväggen, tillåt trafik till och från Internet mot insidans Vlan.
- I brandväggen, sätt upp adressöversättning.
- Som överkurs, konfigurera Hardware offloading.
Som sagt, tycker man detta verkar komplext och jobbigt så skall man nog titta efter alternativ som är mer konsumentvänliga men är man som jag, lite nätverksnörd så är detta precis vad man vill ha 😉 …
… och för de priserna du får MikroTik-prylar för, svårslaget skulle jag vilja påstå.
Ha det gott!
//Anders