Проект домашней сети
TL;DR: сети с более чем одним устройством - это пердолинг, вне зависимости от производителя устройств. Гиперконвергентный.
Сбор требований
Число роутеров
При переезде я решил построить сеть в новой квартире правильно. Вот чтобы прям всё было зашибись. А раньше я с Wi-Fi сильно мучался, что на съёмной, что на своей старой квартире, причём это были однушки. Но всё равно, то в спальной ничего не ловит, то в ванной. Из этого я сделал для себя вывод - 5GHz не пробивает стены. Через стену с открытой дверью сигнал ещё ок будет ловиться в соседнем помещении, а вот через другую стену поймается, но периодически будет отваливаться. 2GHz, возможно, отваливаться и не будет, но в новостройке после 10 соседских Wi-Fi сетей начинаются интерференции.
Вывод - одним роутером в квартире обойтись уже не получится.
Маршрутизация
Мне иногда нужно подключиться к устройству, которое подключено к другому роутеру. Следовательно, нужна L3-связность между сетями роутеров. Резервирования не требовалось, следовательно, один из роутеров должен был быть головным, плюс цепляться к провайдеру. Звучало сложно, поэтому я решил всю конфигурацию L3-сети держать на одном устройстве, а на других её минимизировать.
Провода
Раз Wi-Fi такой ненадёжный, пусть у сети хоть основа будет надёжной - проводной. Проект сети начал казаться сложноватым, поэтому я решил не ввязываться в авантюру с 2.5 Gbit/sec портами и Cat6 кабелями и коннекторами, хотя к сети и относился как к капитальному вложению на 10+ лет, с заделом под будущий апгрейд. Ну да ладно, хватит в локальной сети и гигабита, тем более тариф дома 200мбит/сек - всё что больше, в принципе, похоже на максимальную скорость, которая вылезет на нескольких спидтестах, но гарантированная явно меньше.
Я долго думал насчёт экранированной витой пары - но пришёл к выводу, что этим надо заниматься умеючи. Вроде как правильно делать это с заземлением, а для его работы нужны правильные коннекторы (металлические), плюс порты и розетки с поддержкой заземления. А без заземления может и ещё хуже быть, но это не точно. Плюс вариантов экранированной пары тоже много - FTP, S/FTP и т.д., а ценник от числа букв взлетает экспоненциально. Суммарно требовалось 65 метров. Взвесив все за и против, риски и выгоды, решил “похер, кладём простую UTP”.
Но помимо витой пары есть ещё и питание. И вот здесь я ворвался в “авантюру” с PoE (Power over Ethernet). Два роутера - кухонный и коридорный, смонтированы в 20-30см под натяжным потолком, кабели к ним подведены по потолку, с потолка спускаются по штробе в гофре, короче визуально никаких проводов нет, от чего жена в восторге. В том числе 220в, поэтому розеток для них не предусмотрено.
Помимо роутеров по проводу подключаются три самых чувствительных к задержкам, потерям пакетов и медленной скорости устройства - личный компьютер с игрульками, телевизор и самопальный NAS, на котором я кручу self-hosted приложения. Остальное ходит по Wi-Fi.
Схема сети
Когда посчитал сколько у меня стен, где основные точки “сбора” устройств, где будут нужны провода, где можно обойтись Wi-Fi вырисовалась такая картина:
- Коридор рядом с санузлами, спальной и детской. Самая нагруженная “умной” техникой точка. Тут нужен PoE. Стандарт Wi-Fi не ниже 802.11ac (обкатано, проверено) + поддержка 2.4GHz диапазона для IoT.
- Гостиная. Там два устройства, одно из них - телевизор, именно там мы проводим свободное время, плюс там же тусят гости. Точка доступа будет на видном месте, поэтому она должна вписываться в интерьер визуально - быть белой, без излишеств вроде кучи неотключаемых LED и торчащих в стороны антенн, а модели с коридорной точкой должны совпадать, чтобы не было разнобоя.
- Кабинет, где мы с женой, собственно, работаем. Туда, собственно, решил втыкать bleeding edge - роутер с 802.11ax. В худшем случае на замену можно воткнуть служивший верой и правдой Mikrotik hAP AC2 со старой квартиры, а туда - какой-нибудь D-Link с авито. Чёрный цвет допустим, т.к. рядом моё рабочее место, а экраны мониторов чёрные.
- Кладовка - ядро L3-сети, единственный роутер, который занимается роутингом, а также целиком закрывает DHCP, DNS и NAT + подключается к провайдеру. К нему по проводам подключена ещё пара небольших компьютеров, для него на стене сделан на заказ шкаф. Wi-Fi от него не нужен, сам он не обязателен, его задачи можно было бы перекинуть на кабинетный роутер, но так пришлось бы либо тащить работающий 24 на 7 NAS на рабочий стол, либо сокращать число устройств в “серверном шкафу”, либо делать там больше ethernet-розеток, либо ставить туда ещё один коммутатор.
- Гардеробная. Как соединить роутеры между собой минимумом проводов? Годы развития сетей породили специальное устройство для “логики” поверх “физики” под названием коммутатор. А поскольку в квартиру приходит оптика, чтобы не плодить лишние устройства, нужен вариант с SFP-портом. Гардеробная рядом с входом в квартиру, чтобы лишний раз не отсвечивать проводами и не возиться с креплением к стене, решил тупо положить коммутатор на шкаф. Итого - нужны 1+ SFP-порт, 4+ gigabit ethernet порта + PoE, поддержка VLAN. Может в будущем понадобится резервирование и два провайдера, так что неплохо бы иметь два SFP-порта.
Итого
Что в итоге выбрал:
Роль | Устройство | Цена | Коммент |
---|---|---|---|
Коммутатор | TP-Link TL-SG2210P | 8 300 рублей | Брал по акции, сейчас 12 500 рублей |
Wi-Fi точки с PoE | Mikrotik CAP AC | от 8 000 до 15 500 рублей | Пока отлаживал потери пакетов грешил в том числе на брак экземпляров, поэтому купил третий задорого. Ну, будет лежать в запасе на случай поломки. |
Wi-Fi точка с 802.11ax | Mikrotik hAP ax2 | 14 300 рублей | До этого использовал hAP ac2 и не имел никаких нареканий, думал будет лучше. |
Проводной роутер | Mikrotik HEX | 5 400 рублей | Показался компактным малюткой с поддержкой PoE |
На коммутаторе настроены два VLAN, чтобы DHCP не раздавался в подъезд, провайдер не шарился в моей сети, а также ни одно устройство не выходило в интернет мимо ядра сети:
- uplink:
- на порте к HEX tagged;
- на SFP порте untagged;
- dhcp:
- на порте к HEX tagged;
- на остальных ethernet untagged.
На HEX, поверх порта, в который входит кабель коммутатора, созданы VLAN-интерфейсы:
- uplink -с реквизитами для подключения к сети провайдера;
- dhcp - добавлен в бридж с соседним портом, в который включен NAS.
Решённые проблемы
Обжим
PoE работал только по типу T568B. Пару раз из-за неудачного переобжима была ситуация, когда PoE-работает, а Link Down. Или с ноутбука Link Up, а PoE не работает. Или линк работает только в режиме 100 мбит/сек. Хз почему, но путём переобжима и страданий прораба заставили всё работать правильно. Правда от выхода кабелей для CAP ac на кухне и в коридоре остались мааааленькие 3-4см хвостики, которые хер вставишь, так что перемонтаж теперь нежелателен. А перетягивать витую пару после монтажа натяжного потолка, пусть она и в гофре, нежелательно втройне, так как для этого нужен трос на 15 метров.
Телевизор работает на 100 мбит/сек
Долго пытался понять в чём дело, пока не обратился в чат тех. поддержки LG и не узнал что у них все телевизоры умеют только 100 мбит/сек по проводу. Обидно, учитывая сколько возился с тем, чтобы всё было обжато и зацеплено так, чтобы гигабит работал. Ну и ладно, мне пока хватает, стриминг всё равно буферизуется и дальше не качается.
Wi-Fi у Mikrotik hAP ax2 пропадает
Обе сети, что 5GHz, что 2.4GHz просто пропадали. В логах ноутбука заметил:
[64010.151806] iwlwifi 0000:04:00.0: Unhandled alg: 0x707
[64011.049685] wlp4s0: deauthenticating from 48:a9:8a:2c:47:f8 by local choice (Reason: 3=DEAUTH_LEAVING)
Полезного по этим строчкам не нашёл, кто-то патчил в драйвера, кто-то обновился на ядро следующей версии (пару лет назад, так что неактуально), кто-то роутер поменял.
Заново сети начинали вещаться только после disable обоих Wi-Fi интерфейсов и enable их обратно, что я и делал вручную каждый раз со своего подключенного по проводу личного, когда подключение к Wi-Fi отваливалось у жены или у меня на рабочем ноутбуке. В логах самого Mikrotik ничего полезного при этом не было. Как только я не формулировал запрос, какие только галочки не перетыкал.
В итоге оказалось, что вот буквально месяц назад выкатили новую RouterOS 7.11.2, в которой этот баг порешали, а недавно она стала LTS. Обновился на неё и проблема пропала. Но перед этим я полтора месяца неудачно гуглил, просто так обновляться не дёргался, тем более что ветка форума Mikrotik была полна сообщений:
А вот раньше было лучше.
А вот я обновился на 7.4 и там работает!
Сижу на 6.8, которая из коробки, у меня такая же нога, но не болит.
А я обновился на 7.5 и нихрена не починилось, зато мощность сигнала упала на 30%!
А я купил TP-Link и у меня всё хорошо.
А я обновился на 7.6 и у меня брат умер!
МЫ ВАМ БЕТА-ТЕСТЕРЫ БЕСПЛАТНЫЕ ЧТО ЛИ?! ХУДШАЯ КОМПАНИЯ, ВЫ НАС НЕНАВИДИТЕ. КАК МОЖНО БЫЛО ВЫПУСКАТЬ ТАКОЙ СЫРОЙ ПРОДУКТ НА РЫНОК?
А я томат.
Потери пакетов
Когда делал первичную настройку, спид-тест показал 200 мбит/сек, я был в полном восторге. А вот когда уже заехал, началось. Вот эта проблема - самая лютая по соотношению между потраченным на локализацию времени и простотой решения. На Mikrotik CAP AC появились плавающие потери пакетов.
Flood-ping
Пинг ядра сети при подключении к CAP ac на кухне по кабелю (вытащил шнурок из телевизора, вставил в ноутбук):
➜ ~ sudo ping -c 1000 -f x.x.x.x
1000 packets transmitted, 798 received, 20.2% packet loss, time 4130ms
Но иногда прокатывает и всё быстро:
1000 packets transmitted, 1000 received, 0% packet loss, time 594ms
Пинг самого роутера по Wi-Fi при этом стабильный всегда:
1000 packets transmitted, 1000 received, 0% packet loss, time 1019ms
Пинг соседнего роутера по Wi-Fi при подключении к нему (ну, 1 потерю можно счесть за случайность):
1000 packets transmitted, 999 received, 0.1% packet loss, time 874ms
Пинг коммутатора через кухонный роутер при подключении к нему по кабелю:
1000 packets transmitted, 965 received, 3.5% packet loss, time 4695ms
Пинг кабинетного роутера при подключении к кухонному по кабелю:
1000 packets transmitted, 924 received, 7.6% packet loss, time 3161ms
Суточный замер
Т.к. результаты без потерь могли бы быть обманчивыми (сейчас ок, а иногда не ок) решил в куче окон запустить пинги с компьютера. Не флуд, а чтобы весь день пинговалось, а вечером посмотреть что и как там было.
src | dst | sent | received | % loss | коммент |
---|---|---|---|---|---|
комп | HEX L3 ядро | 26310 | 26310 | 0 | Ни единого разрыва |
комп | Коммутатор | 26631 | 26630 | 0.00375502% | 1 пакет потерял, но кажется у коммутатора L3-стек слабый |
комп | hAP ax2 в кабинете | 26295 | 26295 | 0 | Ни единого разрыва |
комп | CAP ac в коридоре | 26109 | 26045 | 0.245126% | у cAP через PoE похоже общая беда с потерями |
комп | CAP ac на кухне | 26122 | 25414 | 2.71036% | херово, но лучше чем было |
CAP ac в коридоре | Коммутатор | 26040 | 25991 | >0% | сопоставимо c комп-CAP ac в коридоре |
CAP ac на кухне | Коммутатор | 26080 | 25520 | ~2% | вот говняшка |
Графики и метрики
Сильно понятнее ситуация не стала. Решил на коленке замутить себе графики с привязкой ко времени, в итоге в домашней коллекции self-host’а появился контейнер с grafana с дашбордой, одним bash-скриптом в кроне и старой influxdb тупо из репозиториев, зато с тепло любимым InfluxQL и божественно простым гуёвым конструктором запросов.
bash-скрипт:
#!/bin/bash
set -euE
for host in x.x.x.{a...z}; do
sleep $((RANDOM % 60 / 5))
raw="$(ping -c 4 $host 2>&1 | grep transm | cut -d ' ' -f1,4)"
read -r transmitted received <<< "$raw"
lost="$((transmitted-received))"
influx -precision=ms -database=network -execute "INSERT ping,host=$host value=$lost"
done
exit 0
Исключение проблем
Кабели от коммутатора до розетки
Переткнул два кабеля от кухонного и коридорного микротика, а точнее от коммутатора до соответствующих розеток, местами.
Узнал, что перетыкание кабелей местами не помогло, оба Mikrotik cAP AC2 работают через жопу!
Средний уровень потерь за сутки остался одинаковым, а значит дело не в этих кабелях.
Кабели над потолком и розетки
Перетащил Mikrotik с кухни в гардеробную, воткнул напрямую в коммутатор. Пакеты (пинг с ноута напрямую включенного в коммутатор) продолжают теряться с +/- равномерным распределением:
64 bytes from x.x.x.x: icmp_seq=133 ttl=64 time=0.357 ms
64 bytes from x.x.x.x: icmp_seq=134 ttl=64 time=0.338 ms
64 bytes from x.x.x.x: icmp_seq=136 ttl=64 time=0.373 ms
64 bytes from x.x.x.x: icmp_seq=138 ttl=64 time=0.372 ms
151 packets transmitted, 100 received, 33.7748% packet loss, time 153602ms
PoE на стороне коммутатора
Бюджета PoE у меня с большим запасом - микротики потребляют по 4.8W каждый, а бюджет коммутатора - 61W. Но кто знает, как он себя ведёт при небольших флуктуациях, может роутер и не перезагружается от краткосрочной нехватки питания, но пакеты теряет?
Нашёл тройник, воткнул в розетку блок питания и инжектор, шедший в комплекте (пока искал по коробкам, думал, что выкинул их и покусывал локоть, глядя на цену в 1300₽ за шт. в DNS), в инжектор патч-корд. PoE в такой схеме останется, просто из другого источника, но хотя бы проблемы с его источником исключить удастся.
В итоге за сутки наблюдения PoE на коммутаторе был полностью оправдан. А до этого я пробовал даже ограничить его 15.4W на каждый микротик.
Оставшиеся подозреваемые
- Mikrotik как устройство - может серия или экземпляры попались бракованные. На случай если дело в модели, хз даже что делать. Можно поговнякать и попробовать сделать их Wi-Fi удлинителями. Типа кухоный цепляется к кабинетному, коридорный к кухонному. Никаких проводов, только два радиоканала со всратыми задержками вместо (вместе с?) всратых потерь.
- PoE как технология - мало ли не умеет оно нормально работать без экранирования и собирает наводки?
- Коммутатор. Ну, может просто глючит, VLAN’ы криво реализованы, ещё что-то.
Как их исключать - хз. Замены коммутатора у меня нет, без PoE запустить не выйдет, а у Mikrotik CAP ac тупо нет гнезда для 220в.
Влияние потолочных кабелей на потери
То что без них потери есть, не исключает того, что они могут являться ещё одним источником потерь. Решил проверить, ведут ли себя по-разному два болезных микротика, воткнутые не через протянутую над потолком витую пару с выводами из стены, а тупо лёжа в кладовке и воткнутые напрямую в PoE-коммутатор. Если средние показатели потерь (коридорный - 3%, кухонный - около 16%) сохранятся после переноса, а затем и обмена портами коммутатора, то однозначно дело в конкретных экземплярах и в теории можно начать с того, чтобы кухонный куда-то сплавить и взять что-то на замену.
Мои CAP ac однояйцевые близнецы, то есть из одной партии, MAC-адреса отличаются на одну букву, так что может и партия говно.
Влияние микротиков друг на друга
Но снять коридорный Mikrotik пока что-то там на работе деплоится мне времени хватило, а воткнуть его в коммутатор - нет. И заметил какую-то странную корреляцию, из которой не смог сделать вывод - пока коридорный Mikrotik был отключен от сети, кухонному было заебись. Два часа - ни единой потери.
Потом я вышел из дома, чтобы поужинать в кафешке с женой. Уходя - вытащил провод из микротика кабинетного, с которым проблем не наблюдаю — не связано с экспериментами, просто руки дошли уже на розетки в гардеробной распечатать наклейки с подписями куда какая розетка ведёт, решил через линк коммутатора понять, где кладовка, а где кабинет. И почти всё это время сеть микротика кухонного работала через жопу! При этом временами чуть-чуть таки работала. Пришёл домой, воткнул провод - захорошело. Но он же никак не зависит от кабинетного! Чего вообще?!
При этом наблюдающий за сетью LXC-контейнер в NAS напрямую подключен к HEX кабелем, а оттуда в коммутатор. И от него до Интернета (icmp 8.8.8.8) за всё это время ни одного пакета не пропало. Этот тест проверяет по сути только локальную кабельную сеть. Проблем с Wi-Fi или выходом в интернет нет. Потери именно в локальной сети, но где именно? Такое ощущение, что у них есть какой-то общий ресурс, за который они дерутся, вопрос только какой именно. Конфликт мак-адресов или петли я бы, наверное, поймал с помощью arping
почти в самом начале отладки.
Порты коммутатора
Посадил вчера в полночь коридорный Mikrotik, в другой порт, с которого подавалось питание, доступ в сеть ему не настраивал. После этого стало хуже кухонному. Они находились в разных VLAN’ах, коридорный был логически изолирован от остальной сети.
Брак Mikrotik
Купил третий Mikrotik CAP ac за много денег (15 500 рублей, жуть). Я поторопился и не сделал самого важного - сброс к заводским и настройку заново. Мало ли что натыкал, но судя по /export - ничего. С горем пополам - хвост кабеля в 3-4см это больно - воткнул новый Mikrotik на место кухонного. Коридорный отключил. Кухонному вроде хорошо. Ну, ночь так поработают, понаблюдаю, попробую коридорный с кухонным поменять ещё, а потом как-то продавать один из них.
Как только включил новый Mikrotik в сеть, в кабинете, который идеально работал, началась какая-то херня. Ну ладно, спишу на перезагрузки, перетыкания кабелей и тыканья в port isolation на коммутаторе в процессе отладки.
Прокладка между стулом и клавиатурой
Сдался, отбросил гордость подальше, открыл авито, вбил в поиск “настройка mikrotik”, описал человеку ситуацию, скинул ссылку на тред об этом в mastodon.
Созвонился, поговорили аж полчаса. Тот закинул несколько идей, одна звучала жизнеспособно:
- Забэкапить конфиги, в смысле прям текстом.
- Проверить что версия firmware соответствует RouterOS, при необходимости дообновить.
- Сбросить к заводским, снести лишнее, вернуть нужное. Ручками, по кусочкам.
- И так с каждым роутером по очереди.
Второй идеей было что-то там пошевелить в настройках VLAN то ли на коммутаторе, то ли на HEX, но вроде у меня и так всё было как он предлагал, так что не я придал особо значения.
Жена
Заметил, что когда жена выходила из дома без меня и период её отсутствия совпал с практически полной пропажей потерь пакетов в сети на графиках. Попросил её полностью выключить Wi-Fi в настройках телефона и выключить рабочий ноутбук, вот прям выключить, а не увести в спящий режим. На два часа потери прекратились. Я уж думал всё, разводиться, но снова начались. Странное совпадение.
Какое-то из устройств в сети
Решил что по одному отрубать всё долго, поэтому выключил все Wi-Fi интерфейсы на всех роутерах. Был выходной, в принципе сильно не мешало. Статистика продолжала собираться, но принципиально ситуация не изменилась.
Коммутатор
А виноват был коммутатор. При очередном эксперименте выключил кухонный и коридорный Mikrotik для наблюдения за кабинетным, который тоже стал хреновничать. И что я получил? На вид - отвалилась вся коммутация, коммутатор будто завис. Достал 15-метровый патч-корд, полез на стремянку к коммутатору, взял ноутбук, сел грустненько копаться, пока проблема доступа между коммутатором и кабинетным микротиком воспроизводилась. И так пощупал и сяк пощупал и конфиг забэкапил ещё разок, сел его ревьюить, ничего в глаза не бросалось.
И тут случайно между делом глаз зацепился за главную страничку настроек коммутатора в браузере, когда лишние вкладки закрывал, а там - STP: disabled. Два месяца это кривое дефолтное значение мучило мне мозги. Уже неделя прошла после включения, ноль потерь, всё идеально.
Нерешённые проблемы
- Macbook 2015 года не видит 802.11ax 5ghz сеть.
- iPhone 12 и 13 не видят 802.11ax 5ghz сеть, при этом старикашка SE 2020 - видит.
- Нет MQTT брокера для управления зоопарком умных устройств.
- Нет отдельного сегмента сети для умных устройств.
- Нет изолированной гостевой сети.
- Нет mesh для беспроводной сети для людей.
- Не нравится в отдельных настройках одного микротика прописывать DNS и статические DHCP-leases для устройств в сети. Поглядываю на dnsmasq, но вносить ещё одну сущность в сеть лень. Чисто эстетическая хотелка, которая не вписывается в микротиковский подход.