Mount LagunaMount Laguna // 2020-11-28

Я використовую MikroTik hAP ac (RB962UiGS-5HacT2HnT-US) вже майже рік. За цей час я встиг багато з чим розібратися та налаштував свою мережу за власним смаком. Я напевевне не використовую і 20% його можливостей, але багато з них в принципі і не потрібні для домашньої мережі.

Найголовніше:

  • 4+1 Gigabit Ethernet
  • 802.11ac та 802.11a/b/g/n (одночасна робота 2.4GHz та 5GHz мереж)
  • SFP порт

Мені дуже подобається система налаштувань: можна зайти по SSH і мати ті ж самі елементи керування, що і Веб-консоль або WinBox (програма для Windows). Текстовий конфіг це геніальна ідея — не складно розібратися в опціях та легко відстежувати зміни за допомогою Git.

Базові налаштування
Це був мій другий досвід з MikroTik (перший — на роботі) але я все ж вирішив почати зі стандартного конфігу. Він поступово змінюється з оновленнями RouterOS (для прикладу, зʼявилися правила для IPv6 firewall) тому коли вийде 7-ма версія RouterOS я напевне візьму його «чисту» версію та заново внесу усі свої зміни. Одразу вимкнув: звук при завантаженні, деякі лампочки активності, застарілі та непотрібні протоколи (http, telnet, ftp, api, mac-server), пошук інших роутерів і т.п.

Розказувати про базові речі не дуже цікаво тому перейдемо до прикладів використання розширених можливостей RouterOS.

Сподіваюсь це очевидно, що example.com та XXX/YYY/ZZZ приховують справжні домени та цифри.
Я не буду приводити увесь конфіг (210 рядків, 13Кб) а лише найцікавіше.

DNS
Крім кешування я ще використовую статичні записи:
/ip dns static
add address=192.168.XXX.X10 name=storage.example.com ttl=1h
add address=127.0.0.1 name=www.google-analytics.com
add address=127.0.0.1 name=dash-button-na.amazon.com

та перехоплюю запити, відправлені напряму зовнішнім DNS серверам:
/ip firewall nat
add action=redirect chain=dstnat dst-address-type=!local dst-port=53 protocol=udp to-ports=53
add action=redirect chain=dstnat dst-address-type=!local dst-port=53 protocol=tcp to-ports=53

Також я використовую вбудований сервіс DDNS:
/ip cloud
set ddns-enabled=yes

Домен XXX.sn.mynetname.net, що постійно вказує на мою зовнішню IPv4 адресу, прописаний як CNAME для storage.example.com. Я його використовую для доступу до NAS як всередині так і ззовні мережі (раніше це були два різні домени).

DHCP
Усі пристрої отримують статичні IPv4 адреси, сформовані за певними принципами:

  • — окремі діапазони для основної мережі та IoT (Internet of Things)
  • — IPv4 адреси Ethernet пристроїв закінчуються на парне число
  • — IPv4 адреси Wi-Fi пристроїв закінчуються на непарне число

Цей список зручно використовувати також для контролю: що є в мережі, чого немає, чи не зʼявилися якісь нові пристрої. На даний момент там 32 записи (деякі пристрої вказані двічі бо мають Ethernet та Wi-Fi).

/ip dhcp-server lease
add address=192.168.XXX.X00 comment="MacBook Pro" mac-address=XX:XX:XX:XX:XX:XX server=dhcp
add address=192.168.XXX.X01 comment="MacBook Pro" mac-address=XX:XX:XX:XX:XX:XX server=dhcp
add address=192.168.XXX.X03 comment="Pixel 2 XL" mac-address=XX:XX:XX:XX:XX:XX server=dhcp
add address=192.168.XXX.X10 comment="Synology NAS" mac-address=XX:XX:XX:XX:XX:XX server=dhcp
add address=192.168.YYY.X11 comment="intelliPLUG" mac-address=XX:XX:XX:XX:XX:XX server=dhcp-iot
add address=192.168.YYY.X21 comment="Amazon Dash" lease-time=5s mac-address=XX:XX:XX:XX:XX:XX server=dhcp-iot

Оскільки у IPv6 трохи інший підхід: клієнтам надається префікс мережі, з яким вони самостійно генерують свої адреси (основну та тимчасову), то такий список неможливо сформувати. Але принаймні роутер та NAS мають статичні IPv6 адреси, які прописані у внутрішньому DNS.

Віддалений доступ
Я маю віддалений доступ лише до NAS (SSH та HTTPS). Крім звичайного захисту, що базується на ключах, паролях, TOTP (2й фактор) та нестандарних портах, є ще Port knocking:
/ip firewall filter
add action=add-src-to-address-list address-list=pre-pre-secure address-list-timeout=10s chain=input dst-port=XXXXX in-interface=ether1 protocol=tcp
add action=add-src-to-address-list address-list=pre-secure address-list-timeout=10s chain=input dst-port=YYYYY in-interface=ether1 protocol=tcp src-address-list=pre-pre-secure
add action=add-src-to-address-list address-list=secure address-list-timeout=23h59m59s chain=input dst-port=ZZZZZ in-interface=ether1 protocol=tcp src-address-list=pre-secure

/ip firewall nat
add action=dst-nat chain=dstnat dst-port=XXX in-interface=ether1 protocol=tcp src-address-list=secure to-addresses=192.168.XXX.X10 to-ports=XXX

Деякі адреси додані до списку “secure” вручну.
/ip firewall address-list
add address=XXX.XXX.XXX.XXX list=secure

Для доступу з інших потрібно виконати команду knock тричі:
knock example.com XXXXX && knock example.com YYYYY && knock example.com ZZZZZ
і поточна адреса буде додана до списку “secure” на добу.

Мережа для IoT (Internet of Things)
Загальновідомо, що S в IoT означає Security (безпека).
Можете називати це параноєю, але у мене значно мерше довіри до деяких пристроїв: «розумні» розетки та кнопки (Amazon Dash), телевізор і т.п. На жаль, пристрої типу Google Mini та Nexus Player не так просто винести в окрему мережу бо вони спілкуються з телефоном та NAS. Можливо я обмежу для них доступ за допомогою firewall.

Усі ці налаштування також можна використовувати для створення мережі для гостей.

Для IoT я створив новий міст:
/interface bridge
add name=bridge-iot

окрему (віртуальну) Wi-Fi мережу:
/interface wireless
add disabled=no mac-address=XX:XX:XX:XX:XX:XX master-interface=wlan1 name=wlan3 ssid=BNetIoT

та обʼєднав це все разом з 5-м ethernet портом (для телевізора):
/interface bridge port
add bridge=bridge-iot interface=wlan3
add bridge=bridge-iot interface=ether5

Ще я додав правило для firewall яке забороняє цим пристроям спілкуватися з основною мережею.
/ip firewall filter
add action=drop chain=forward comment="IoT network" in-interface=bridge-iot out-interface=!ether1

Ну і наостанок я налаштував окремий DHCP сервер, який крім видачі IPv4 адрес ще запускає скрипт коли до мережі приєднується Amazon Dash (усі вони включені в список “amazon”):
/ip dhcp-server
add address-pool=dhcp-iot disabled=no interface=bridge-iot lease-script=":if ($leaseBound = 1) do={
  :foreach j in=[/ip firewall address-list find list="amazon"] do={
    :if ( [/ip firewall address-list get $j address] = $leaseActIP ) do={
      /tool fetch mode=https url="https://maker.ifttt.com/..." keep-result=no
    }
  }
}" lease-time=1d name=dhcp-iot

Коли кнопка натискається то вона намагається зʼєднатися з Амазоном, але в неї це не виходить бо dash-button-na.amazon.com = 127.0.0.1 на внутрішньому DNS а запити до зовнішніх DNS (8.8.8.8) перехоплюються. Але роутер це помічає, запускає скрипт і світло вмикається/вимикається за допомогою IFTTT.

Керування світлом за допомогою CNCT intelliPLUG, Amazon Dash, Mikrotik та IFTTT.

A post shared by Oleg Bozhenko (@mrgallcom) on

IPv6
З новим протоколом я почав розбиратися ще 7 років тому — піднімав тунель до Hurricane Electric за допомогою Airport Express та включив його підтримку для власних сайтів.
Але підтримка IPv6 вдома без тунелів зʼявилася нещодавно — провайдер оновив прошивку модема і замість IPv6 rapid deployment (аналог 6to4 тунеля) запрацював повноцінний IPv6. Роутер отримує /64 мережу і розповсюджує її усім пристроям в основній мережі.
/ipv6 address
add address=::1 from-pool=provider interface=bridge
/ipv6 dhcp-client
add add-default-route=yes interface=ether1 pool-name=provider request=prefix use-peer-dns=no
/ipv6 dhcp-server
add address-pool=provider interface=bridge lease-time=1d name=dhcp-ipv6
/ipv6 nd
add advertise-dns=yes hop-limit=64 interface=bridge managed-address-configuration=yes other-configuration=yes
/ipv6 settings
set accept-router-advertisements=yes

На жаль, DHCPv6 сервер у RouterOS досить обмежений.
Для прикладу: неможливо налаштувати його так, що він повідомляв клієнтам адресу внутрішнього DNS. Якщо вказати зовнішні IPv6 DNS сервери в /ip dns то вони будуть потрапляти і до IPv6 клієнтів. Це спочатку створювало проблему бо Nexus Player отримував зовнішню IPv4 адресу для storage.example.com від такого сервера і не хотів зʼєднуватися з NAS по SMB. Можливо ситуація поліпшиться в майбутніх версіях RouterOS.

Оскільки Google, Youtube, Facebook, Netflix і т.п. давно підтримують IPv6 то його вже можна повноцінно використовувати.

Git
Оскільки у конфіга є текстовий варіант, то за допомогою Git його легко зберігати та слідкувати за змінами. Бекап відбувається за допомогою bash скрипта, що запускається на NAS щоночі. Це лише коротка вижимка з нього бо там є перевірка перед коммітом, чи були якісь зміни, а також з конфігу видаляються перенесення рядків, поточна дата та паролі:

ssh [email protected] export file=mikrotik
sftp [email protected]:mikrotik.rsc
ssh [email protected] system backup save name=mikrotik
sftp [email protected]:mikrotik.backup
git add -A .
git commit -m "backup $DATE"
git push -u origin master

SFP порт
Це порт використовується в основному для підключення оптоволокна. Але існують SFP модулі для підключення звичайного Gigabit Ethernet і перетворення 5-ти портового роутера на 6-ти портовий. Що я і зробив, купивши якийсь китайський модуль на Ібеї. Одразу він не запрацював — служба підтримки підказала, що потрібно відключити автоматичне визначення швидкості і вручну поставити 1Гб/с та Full Duplex (та переконатися, що на іншому боці те саме). Існує фірмовий SFP модуль від MikroTik, можливо там такої проблеми немає.

Різне
За допомогою скриптів з NASʼу дістається TLS/HTTPS сертифікат, який генерується за допомогою Let’s Encrypt, та встановлюється на роутері. Я не маю прямого доступу до роутера ззовні мережі, але додатковий захист всередині мережі зайвим не буває.

/ip service
set www disabled=yes
set www-ssl address=192.168.XXX.0/24,2600:XXXX:XXXX:XXXX::/64 certificate=mrgall.cert.crt_0 disabled=no

Мій провайдер (AT&T) блокує вихідний трафік на порт 123 (NTP, сервіс часу) тому вбудований NTP клієнт не працює. Але це можна обійти за допомогою такого рядка:

/ip firewall nat
add action=masquerade chain=srcnat comment=ntp out-interface=ether1 protocol=udp src-port=123 to-ports=49152-65535

Недоліки
Одним з недоліків можна назвати високий поріг входження, але особливо мені дуже цікаво розбиратися з новим.

У мого роутера 2-3 рази за рік переставав працювати Wi-Fi — спочатку 5ГГц, згодом і 2.4ГГц. Я це вирішував перевантаженням безпровідного модуля або скиданням роутера до заводських налаштувань та відновленням з бекапу. Чому так відбувається я і досі не знаю, можливо мені дістався трохи бракований екземляр. Одного разу це відбулося після оновлення до нової версії RouterOS, останній раз — після раптового зникнення світла.

Висновок
Загалом мені подобається.
Якщо вас не відлякує потреба розбиратися з мережевими технологіями, терміналом і т.п. — я раджу глянути в бік MikroTik.
Існує також hAP ac lite, що коштує в половину дешевше, але без Gigabit Ethernet та з трохи простішим WiFi.