Mikrotik като рутер

Сега ще се постараем да изградим рутер с най-често използвани варианти. За целта ни е необходима връзка към доставчик на Internet и връзка от рутера към някой от клиентите/вътрешната мрежа. Схемата която ще проиграем е следната:

Pic01

Като за начало изграждаме достъпа до Интернет. Връзката ще се осъществи на порт 1. Връзката може да бъде най-различна, като вариантите са: - IPoE (статично или чрез DHCP) - PPPoE - L2TP - PPTP - комбинация от гореспоменатите, L2TP и PPTP не могат да работят без настроено IP. Преименуваме интерфейса ether1 в eth1-wan. Interfaces / Ether1 / Name: eth1-wan / OK

Pic02

Ако пък ползвахме конзола, то командата щеше да изглежда така:

/interface ethernet set [find default-name=ether1] name=eth1-wan


Убеждаваме се, че кабела е включен към провайдера и към порт 1. Следва един много тънък момент. Провайдерите имат навика да си защитават мрежата, като свързват MAC адреса на клиента с IP адреса който му се дава. За целта избираме си MAC който ще го помним и дори да се налижи да сменим рутера пак ще може да ползваме достъпа до провайдера защото си знаем MAC-a. Избираме MAC-a да ни е: 00:11:22:33:44:55. Лесно се помни. Промяната може да се извърши само от команден режим:

/interface ethernet set eth1-wan mac-address=00:11:22:33:44:55


Автоматично получаване на настройките от провайдера посредством DHCP

Най-простия вариант е доставчика на Интернет да Ви даде настройките посредством DHCP. IP / DHCP Client / + / Interface: eth1-wan / OK

Pic03

А ако трябваше да се пише през конзола то:

/ip dhcp-client add interface eth1-wan disabled=no


Статично IP от провайдера

Също не сложен вариант, който се ползва много често. За примера, доставчика ни казва следното: - IP: 192.0.2.10; - mask: 255.255.255.0 или /24; - gataway: 192.0.2.1; - DNS1: 192.0.2.2; - DNS2: 192.0.2.3 Добавяме IP на интерфейса: IP / Addresses / + / Address: 192.0.2.10/255.255.255.0; Interface: eth1-wan / OK;

Pic04

Добавяме шлюз по подразбиране: IP / Routes / + / Dst.Address:0.0.0.0/0; Gateway:192.0.2.1; Check gateway: ping; Distance: 1 / OK;

Pic05

Добавяме DNS: IP / DNS / Servers: 192.0.2.2; 192.0.2.3 / OK

Pic06

А ако трябваше от команден ред трите неща да се опишат наведнъж то:

/ip address add address=192.0.2.10/255.255.255.0 interface=eth1-wan /ip route add dst-address=0.0.0.0/0 gateway=192.0.2.1 check-gateway=ping distance=1 /ip dns set servers=192.0.2.2,192.0.2.3

Връзка към провайдера през PPPoE

За целта се използва тунелен протокол PPPoE неизискващ предварителна настройка на IP. За конфигурацията на PPPoE трябват име за свързване и парола, които обикновено се дават от провайдера. Добавяме тунелен интерфейс: PPP / + / PPPoE Clinet

Pic07

В отдела General указваме името на интерфейса Name: tap1-wan и интерфейса свързан с поровайдера Interfaces: eth1-wan. В отдела Dial Out указваме името и паролата.

Pic08

А ако ползвахме теминал то:

/interface pppoe-client add interface=eth1-wan name=tap1-wan disabled=no user=логин password=пароль use-peer-dns=yes add-default-route=yes default-route-distance=0


Важно: При използване на PPPoE реално интерфейса е tap1-wan, а не eth1-wan

Връзка към провайдера през L2TP/PPTP

Това е начина с най-много подводни камъни. Примерно имате IP обвързано с име от DNS-a. To mikrotik разпознава името само един път и получава адреса. И сега ако адреса се промени или провайдера ползва RoundRobin DNS и сървъра се претовари, то има голяма вероятност да останем без Интернет. Като цяло всичко е много забавно и от страна на провайдера, но да считаме, че имаме стабилен IP адрес, знаем името, паролата и VPN сървъра. Настройката става по следния начин. - добавяме интерфейс PPTP/L2TP: PPP / + / PPTP Client или L2TP Client

Pic09

В отдела General дефинираме името Name: tun1-wan


Pic10

В отдела Dial Out указваме сървъра PPTP или L2TP име User:и парола Password:


Ако пък трябваше да се дефинира през конзола то щеше да изглежда така:

/interface pptp-client add name=tun1-wan disabled=no connect-to=сервер_vpn user=логин password=пароль add-default-route=yes default-route-distance=1 profile=default


Важно: Ако се използва L2TP или PPTP в бъдеще, вместо eth1-wan да се използва tun1-wan

3G/4G модеми

Ако се използват 3G/4G модеми най-често се появяват като ethernet интерфейси. Могат са се проверят в: Interfaces / LTE. Обаче, ако не се определя като мрежова карта то тогава пробваме да го видим в: System / Resources / USB. Приемаме, че е на usb1. Пробваме да създадем PPP връзка за интерфейса usb1. Като цяло вариации много, това са най-честите случаи просто.

Подготовка на интерфейсите за локалната мрежа

До сега всеки интерфейс беше отделен. Дефинирахме единия, който е свързан към доставчика на Интерне. Остават още 4 ether и един wlan. Ако приемем, че имаме не сложна мрежа от типа Интернет <=> Рутер <=> Локална мрежа, то единия интерфейс от рутера сочи към Интернет, а останалите ще се ползват във вътрешната мрежа. Ethernet интерфейсите могат да се обединят на апаратно ниво, за да се повиши скоростта на предаване на данни и да се намали натоварването на процесора/процесорите. Обединението можеше да се извърши и на ниво бридж но тогава натоварването е по-голямо. И така избираме ether5 да е водещ интерфейс. Преименуваме ether5 в eth5-lan: Interfaces / ether5 / Name: eth5-lan / OK

Pic11

Портовете ether2-ether4 ги преименуваме на eth2-lan, eht3-lan и eth4-lan. За портовете ether2-ether4 казваме водещия порт да е eth5-lan Interfaces / ether2-ether4 / Master Port: eth5-lan

Pic12

Внимание: това се прави на портове ether2, ether3 и ether4


Резултата е:

Pic13

Ако ползвахме терминални команди то те щяха да са:

/interface ethernet set [find default-name=ether5] name=eth5-lan /interface ethernet set [find default-name=ether2] name=eth2-lan master-port=eth5-lan /interface ethernet set [find default-name=ether3] name=eth3-lan master-port=eth5-lan /interface ethernet set [find default-name=ether4] name=eth4-lan master-port=eth5-lan


Интересен момент: посредством master port може да се обединят няколко интерфейса които са собственост на един чипсет. На по-горни класове рутери с портове примерно 10 броя интерфейсите са разделени на 2 switch-a с 2 чипсета. Тогава имаме 2 мастер порта с 2 групи switch. 2-те групи се обединяват в бридж и така става един суич с много портове. Но това не е предмет на нашето занятие, само за информация.


Получаването на swithc посредством bridg е другия вариант. Създаваме мост: Bridge / + / Name: br1-lan / OK

Pic14

Добавяме интерфейс: Bridge / Ports / + / Interface: eth5-lan, eth4-lan, eth3-lan и eth2-lan;

Pic15

Това се повтаря за 4-те ethernet интерфейса.


Добавяме и интерфейса на wlan1 (wifi интерфейс)

Pic16

Така в локалната мрежа ще се намират както ethernet интерфейси така и wifi.


В конзолен вариант командата ще изглежда така:

/interface bridge add name=br1-lan /interface bridge port add interface=eth5-lan bridge=br1-lan /interface bridge port add interface=wlan1 bridge=br1-lan

WiFi и безопасност

Особено внимание трябва да се отдели на безжичната мрежа, защото през нея много лесно се хаква локалната мрежа. Добавяме профил за безопасност и указваме парола за безжично включване: Wireless / Security Profiles / +

Pic17

Name: wpa2-protect - име на профила WPA/WPA2 Pre-Shared Key - типа на ключа за защита на паролата за wifi


В конзолен вариант командата щеше да е:

/interface wireless security-profiles add name=wpa2-protected mode=dynamic-keys authentication-types=wpa-psk,wpa2-psk unicast-chiphers=aes-ccm group-chiphers=aes-ccm wpa-pre-shared-key=ключ_wpa wpa2-pre-shared-key=ключ_wpa2


Активираме и настройваме безжичния интерфейс: Wireless / wlan1 / Enable

Pic18

В отдела Wireless

Pic19

В отдела Nstreme изключваме всичко

Pic20

И отново командите в конзолен режим:

/interface wireless set wlan1 disabled=no ssid=MyRouter mode=ap-bridge band=2ghz-b/g/n frequency=2412 bridge-mode=enabled wireless-protocol=802.11 security-profile=wpa2-protect default-authentication=yes default-forwarding=yes hide-ssid=no /interface wireless nstreme set wlan1 enable-nstreme=no enable-polling=no disable-csma=no

DHCP сървър

До тука създадохме възможност да клиента да се върже към локалната мрежа, обаче за админисгтратора е голяма досада всеки път да го питат какво трябва да ми е IP-то, маската, шлюза и куп още неща. За тази цел се грижи DHCP сървъра. Той ще раздаде всички необходими настройки на клиента, така че да може да работи в локалната мрежа безпроблемно. Даваме IP на интерфейса br1-lan: IP / Addresses / + / Address: 193.168.10.1/24; Interface: br1-lan / OK

Pic21

Конзолен вариант на командата:

/ip address add address=192.168.10.1/24 interface=br1-lan


Създаваме масив от IP адреси които ще се раздават от DHCP сървъра: IP / Pool / + / Name: dhcp-pc; Addresses: 192.168.10.100-192.168.10.200 / OK

Pic22

Конзолен вариант на комндата:

/ip pool add name=dhcp-pc ranges=192.168.10.100-192.168.10.200


Казваме DHCP сървъра да слуша на интерфейс br1-lan: IP / DHCP Server / + / Name: dhcp-pc; Interface: br1-lan; Lease Time: 08:00:00; Address Pool: dhcp-pc / OK

Pic23

Сега трябва да укажем какво ще отдава DHCP сървъра: IP / DHCP Server / Networks / + / ОК

Pic24

Address: 192.168.10.0/24 - това е локалната ни мрежа; Gateway: 192.168.10.1 - шлюза по подразбиране; Netmask: /24 - имаме калс С мрежа; DNS Servers: 192.168.10.1 - рутера ще играе ролята на DNS сървър за клиентите.


И отново конзолен вариант на командата:

/ip dhcp-server add name=dhcp-pc interface=br1-lan lease-time=08:00:00 address-pool=dhcp-pc /ip dhcp-server network add address=192.168.10.0/24 dns-server=192.168.10.1 gateway=192.168.10.1 netmask=24/ip dhcp-server print Flags: D - dynamic, X - disabled, I - invalid # NAME INTERFACE RELAY ADDRESS-POOL LEASE-TIME ADD-ARP 0 X dhcp-pc br1-lan dhcp-pc 8h


DHCP сървъра е деактивиран, да го активираме:

/ip dhcp-server enable 0

enable 0 - защото когато проверихме дали е активен видяхме, че DHCP сървъра се подвизава под номер 0.

Настройка на DNS

При настройката на DHCP указахме нашия рутер да играе ролята на DNS сървър. Това няма да е пълноправен DNS сървър с дефиниране на зони, А, МХ и т.н. записи, а ще е обикновен прокси DNS. За целта: IP / DNS / Allow Remote Requests: yes / OK

Pic25

И както винаги терминална команда:

/ip dns set allow-remote-requests=yes


На практика клиентските машини вече могат да се свързват с локалната мрежа, получавайки IP, шлюз, DNS. Проблема е, че те могат да оперират само в локалната мрежа, ако искат да излезнат в Интернет или от там да се достпи някоя машина в локалната мрежа, това е невъзможно. За целта е необходимо да се дефинират филтриращи правила.

Пакетен филтър

RouterOS е разновидност на Linux, използващ пакетния филтър netfilter. Синтаксиса който използва Mikrotik е много интуитивен. Самия пакетен филтър се настройва от: IP / Firewall. Вътре има много таблици но нас ни интерисуват: Filter, Nat и Mangle. Във всяка таблица може да се добавят правила, като обработката им става отгоре надолу последователно. Доста объркващо но ще се постараем с няколко примера да поясним работата. Ще използваме терминални команди, като ще се постараем да опишем всяка какво прави. В общи линии идеята е: - потребителите да ползват Интернет; - достъпа на микторик в локалната мрежа се ограничава до услугите (web, winbox, ssh, dns, ntp); - от външната мрежа се допуска само до услугата web но с изменение на порта на 9999. И така започваме с таблицата Filter.

/ip firewall filter add chain=input protocol=icmp add chain=input connection-state=new dst-port=80,8291,22 in-interface=br1-lan protocol=tcp src-address=192.168.10.0/24 add chain=input connection-mark=allow_in connection-state=new dst-port=80 in-interface=eth1-wan protocol=tcp add chain=input connection-state=new dst-port=53,123 protocol=udp src-address=192.168.10.0/24 add chain=input connection-state=established,related add chain=output connection-state=!invalid add chain=forward connection-state=established,new in-interface=br1-lan out-interface=eth1-wan src-address=192.168.10.0/24 add chain=forward connection-state=established,related in-interface=eth1-wan out-interface=br1-lan add action=drop chain=input add action=drop chain=output add action=drop chain=forward


Дефинирахме правилата за вътрешната мрежа, сега да разрешим ползването на Интернет и да пренасочим WEB трафика от порт 80 към 9999

/ip firewall nat add action=masquerade chain=srcnat out-interface=eth1-wan src-address=192.168.10.0/24 add action=redirect chain=dstnat dst-port=9999 protocol=tcp to-ports=80


И накрая да дефенираме таблицата Mangle:

/ip firewall mangle add action=mark-connection chain=prerouting dst-port=9999 new-connection-mark=allow_in protocol=tcp connection-state=new


Пакетния филтър е много мощен инструмент но за повече подробности, а и да се изпълняват повече функции ще се наложи да се прочете допълнителна литература.


Допълнителни настройки

Описваме ги тука, защото до сега някои от услугите не бяха пуснати или дефинирани, като DNS и т.н. Ще започнем със смяна на името на устройството: System / Identify / Name: MikRouter / OK. Описваме хоста после и в DNS-a: IP / DNS / Static / + / Name: mikrouter; Address: 192.168.10.1 / OK. В терминален режим щеше да изглежда командата така:

/system identity set name=MikRouter /ip dns static add name=mikrouter address=192.168.12.10


Вече ако потърсим рутера в мрежата по име то ще се подвизава като mikrouter.

Допълнителни защити

Ползването на winbox е нещо много практично, обаче то има възможност да сканира мрежата и да показва всички налични рутери. Какъв е смисъла да показва рутера при условие, че е създаден и настроен от нас. По-добрия вариант е да указваме как да се влиза в него без да се вижда в мрежата. За целта трябва да спрем услугата mactelnet: IP / Neighbor Discovery Interfaces. Сега може да оставите интерфейса br1-lan или да го изтриете, лично аз го трия.


Както винаги командата в конзолен вид:

/ip neighbor discovery :foreach i in=[find] do={ set $i discovery=no }


Сега да ограничихме достъпа по mac-адреси (windbox и mactelnet): Tools / MAC Server / Telnet Interfaces. Махаме всички и добавяме br1-lan. Преминаваме в Winbox Interfaces и повтаряме същите стъпки.


Отново в конзолен вид командата:

/tool mac-server set [ find default=yes ] disabled=yes add interface=br1-lan /tool mac-server mac-winbox set [ find default=yes ] disabled=yes add interface=br1-lan


На практика позволяваме достъпа за управление до рутера само от локалната мрежа.

UPnP

Много от приложенията като p2p а и online игрите изискват UPnP (служба за динамично откриване на портовете). Това се разрешава от: IP / UPnP / Enabled: yes Добавяме интерфейса: Interfaces / + / External: eth1-wan; Internal: br1-lan.


Командата в конзолен вид:

/ip upnp set enabled=yes /ip upnp interfaces add interface=eth1-wan type=external add interface=br1-lan type=internal

Резервно копие на настройките

На пръв поглед маловажно нещо но животоспасяващо за администраторите. Не знам дали сте се сблискавали със следната ситуация. Работите нещо и оправяте даден проблем. На пръв поглед всичко върви нормално. Извършвате много операции и точно сте решили, че нещата са готови виждате, че нещо друго се е омазало. Решението е да върнете първоначалното състояние, но това са също толкова операции извършвани наново. Или друг случай: Идва нова версия на RouterOS. Слагате я и се чупи рутера. Какво е решението? Резервно копие на системата и настройките. Самия архив се прави от: Files / Backup В новоотворения прозорец се въвежда: Name: име на файла без разширението; Password: парола за архива; Don't Encrypt: ако няма необходимост от засекретяване на архива.


А в конзолен вид командата е:

/system backup save name=router6.30.2 dont-encrypt=yes


За възстановяване командата е:

/system backup load name=router6.30.2.backup


Или през графичната среда от: Files / Restore


Всичко това е един базисен вариант на изграждане на рутер. За в бъдеще ще разгледаме връзка между няколко рутера, динамични рутиращи протоколи и т.н.


Автоматично обновяване

Едно от важните условия да не бъдете хакнати е постоянното обновяване на рутера. На практика човек улисан в проблемите си не се грижи за това, а когато някой навреди вече е късно. В случая има оприя рутера сам да се обновява. За целта:

/system script add dont-require-permissions=no name=AutoUpdate owner=CCCP policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ system package update\r\ \ncheck-for-updates once\r\ \n:delay 1s;\r\ \n:if ( [get status] = \"New version is available\") do={ install }"


И в графичен режим: System / Scripts

Pic26

Скрипта ще се погрижи да се изпълнят команди за обновяване на рутера, обаче трябва някой да каже кога да се изпълнят тези команди.

/system scheduler add interval=1d name=AutoUpdateShedule on-event=AutoUpdate policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ start-date=dec/05/2018 start-time=04:00:00


Съответно в графичен режим: System / Scheduler

Pic27