[{"data":1,"prerenderedAt":237},["ShallowReactive",2],{"blog-post:ru:\u002F2026-09-07-hotel-admin-part-2":3},{"id":4,"title":5,"body":6,"description":228,"extension":229,"meta":230,"navigation":232,"path":233,"seo":234,"stem":235,"__hash__":236},"content\u002F2026-09-07-hotel-admin-part-2.md","Разработчик зачем-то админит гостиницу. Серия 2: меняем корневые свитчи и стараемся ничего не сломать",{"type":7,"value":8,"toc":224},"minimark",[9,26,29,45,68,71,74,81,84,87,90,93,99,102,137,140,143,146,158,161,164,175,182,198,201,204,207],[10,11,12,13,17,18,21,22,25],"p",{},"В какой-то момент я решил, что прежде чем добавлять отдельный VLAN для гостевого Wi-Fi, неплохо бы сначала привести в порядок само ядро сети. На тот момент оно состояло из нескольких ",[14,15,16],"code",{},"D-Link"," разных поколений, старого ",[14,19,20],{},"HPE 1910-24"," и ",[14,23,24],{},"Zyxel GS1900-24HP",". Часть оборудования выполняла понятную работу. Часть, судя по всему, просто исторически оказалась между двумя другими свитчами и продолжала жить там по принципу: \"работает — не трогай.\"",[10,27,28],{},"Из оборудования для замены у меня были:",[30,31,32,39],"ul",{},[33,34,35,36],"li",{},"доставшийся по наследствую обесточенный ",[14,37,38],{},"Eltex MES2428P",[33,40,41,42],{},"2 новых ",[14,43,44],{},"Eltex MES2424P",[10,46,47,48,51,52,54,55,57,58,60,61,64,65,67],{},"План был таков: ",[14,49,50],{},"Zyxel"," заменить на ",[14,53,38],{}," из серверной, два корневых ",[14,56,16],{}," заменить на новые ",[14,59,44],{},", часть старой цепочки убрать совсем, а клиентские линии со старого ",[14,62,63],{},"HPE"," перенести на ",[14,66,24],{},"(этот у меня уже был).",[10,69,70],{},"Казалось бы: сохранил конфиги -> переставил кабели -> готово. Разумеется, нет.",[10,72,73],{},"Для начала выяснилось, что сначала нужно понять, куда вообще ведут все эти кабели. Подписи на портах местами устарели, часть устройств не имела нормальных имён, а некоторые соединения существовали только в старых схемах и уже давно не соответствовали реальности. Поэтому перед заменой я собирал сеть обратно по кусочкам:",[10,75,76,77,80],{},"SNMP, LLDP, таблицы MAC-адресов, DHCP, ARP, состояние портов и немного физического хождения между стойками. Нейронки в этом деле мне здорово помогли, а то парсить SNMP показатели пытаясь смотреть в ключи вида ",[14,78,79],{},"1.3.6.1.2.1.1.5.0","(OID) то еще удовольствие.",[10,82,83],{},"Постепенно появилась таблица:",[10,85,86],{},"старый порт -> реальное устройство -> VLAN -> новый порт.",[10,88,89],{},"Причём кабель в выключенном порту нельзя было автоматически считать ненужным. Но и переносить его вслепую тоже нельзя.",[10,91,92],{},"Отдельным развлечением оказались старые VLAN. На прежних свитчах сохранилось несколько VLAN, в которых уже не было ни одного активного устройства. Копировать их на новое оборудование только потому, что они когда-то существовали, я не стал. В новую конфигурацию перенес только реально используемые сети.",[10,94,95,96,98],{},"Сами ",[14,97,44],{}," сначала настраивал отдельно от production-сети.\nHostname, LLDP, RSTP, приоритеты root bridge, access-порты, tagged и untagged VLAN, PVID, ingress filtering.",[10,100,101],{},"На словах всё это звучит вполне последовательно(ну, когда знаешь все эти аббревиатуры).",[10,103,104,105,108,109,112,113,116,117,120,121,124,125,128,129,132,133,136],{},"На практике даже подключение к консоли оказалось отдельным квестом: FTDI-адаптер, 115200 8N1, ",[14,106,107],{},"screen"," на macOS — и некоторое количество вопросительных знаков вместо нормального приглашения командной строки. В конечном итоге я пользовался утилитой ",[14,110,111],{},"dhcpmasque"," на маке, чтобы имитировать ",[14,114,115],{},"dhcp"," сервер при подключении к свитчу и выдавать нужный мне айпишник этому свитчу по его ",[14,118,119],{},"MAC","-адресу. Адрес я узнавал по ",[14,122,123],{},"DHCPREQUEST"," от свитча, во время его startup, отлавливая через ",[14,126,127],{},"tcpdump",". Хоть в доке ",[14,130,131],{},"Eltex"," и указано, что с завода свитчи настроены на статический адрес - это было не так, они ждали ",[14,134,135],{},"DHCPACK"," поэтому пришлось выкручиваться.",[10,138,139],{},"Очень обнадёживающее начало миграции.",[10,141,142],{},"Management-адреса новых свитчей я не прописывал статически. Для них подготовил DHCP reservations, чтобы после отключения старого устройства новый свитч мог занять его прежний адрес.",[10,144,145],{},"Сам перенос делался поэтапно.",[147,148,149,152,155],"ol",{},[33,150,151],{},"Сначала основной uplink.",[33,153,154],{},"Потом проверка management-доступа, LLDP и связности.",[33,156,157],{},"И только после этого — остальные линии.",[10,159,160],{},"Старые свитчи при этом не сбрасывались и не разбирались. Они оставались готовым физическим rollback: если что-то идёт не так, возвращаем подписанные кабели обратно. Стоит заметить, что как и с прошлой заметкой свитчи эти можно было заменять только ночью, т.к. они корневые и их отключение вырубает сеть всему отелю.",[10,162,163],{},"Что-то, конечно же, пошло не так.",[10,165,166,167,170,171,174],{},"После переноса одного из внешних каналов начал пропадать интернет. Оказалось, со стороны провайдера приходят ",[14,168,169],{},"BPDU"," - ",[14,172,173],{},"STP"," пакеты необходимые сетевому оборудованию для понимания кто здесь главный. Новый Eltex честно обрабатывает их через RSTP и в какой-то момент блокирует порт, т.к. считает себя \"root\"-свитчем, то есть главным. А по правилам Spanning Tree Protocol главным может быть только один свитч(«There can be only one!»).",[10,176,177,178,181],{},"Я забыл, что на старом D-Link включал блокировку BPDU на порту от провайдера 🙈 Повторил эту магию на Eltex, и uplink не заставил себя долго ждать. На внутренних соединениях ",[14,179,180],{},"RSTP"," остался работать как раньше, чтобы не допустить случайных сетевых колец.",[10,183,184,185,188,189,191,192,194,195,197],{},"Потом обнаружился ещё один сюрприз. Кабель, ведущий к одному из access switch'ей(",[14,186,187],{},"Unifi US8","), нормально работал через старый HPE, но вообще не хотел поднимать link при прямом подключении к новому Eltex или Zyxel. Можно было долго объяснять это особенностями совместимости оборудования. Но тот факт, что соединение через HPE поднималось только на 100 Мбит\u002Fс, довольно прозрачно намекал на физическую линию: обжим, патч-панель или неполный набор пар. Ни обжимки, ни кросс-ножа, ни ethernet-тестера у меня с собой не было, поэтому старый ",[14,190,63],{}," пришлось временно оставить в сети. Практически всё остальное с него уже переехало, но сам свитч продолжил работать как довольно большой и энергоёмкий переходник между одним кабелем и UniFi. В итоге корневые D-Link были заменены на ",[14,193,44],{},", клиентские линии переехали на ",[14,196,24],{},", лишний транзитный свитч исчез, а между основными узлами осталась нормальная оптика.",[10,199,200],{},"Главным результатом для меня стали даже не новые свитчи. После этой миграции у сети впервые появилась схема, которой можно было более-менее доверять.",[10,202,203],{},"С реальными портами, VLAN, uplink’ами, исключениями и понятным rollback. После этого можно переходить к следующей непростой задаче: вынести гостевой Wi-Fi в отдельный VLAN. Не переключайтесь.",[10,205,206],{},"На фото:",[147,208,209,217],{},[33,210,211,212],{},"Текущая обезличенная карта сети. На ней уже нет старого HPE, т.к. с кабелем я разобрался. На нём были перепутаны пары. 🤷‍♂️\n",[213,214],"img",{"alt":215,"src":216},"Обезличенная схема сети с портами, VLAN и моделями оборудования","\u002Fassets\u002Fimages\u002Fblog\u002Fhotel-admin\u002Fnetwork-map.png",[33,218,219,220],{},"Тот свитч, что достался мне в наследство. Его я настраивал первым.\n",[213,221],{"alt":222,"src":223},"Коммутатор Eltex MES2428P","\u002Fassets\u002Fimages\u002Fblog\u002Fhotel-admin\u002Feltex-mes2428p.png",{"title":225,"searchDepth":226,"depth":226,"links":227},"",2,[],"Замена корневых свитчей на Eltex, восстановление схемы сети, сюрпризы с BPDU и временный HPE в роли переходника.","md",{"date":231},"2026-09-07",true,"\u002F2026-09-07-hotel-admin-part-2",{"title":5,"description":228},"2026-09-07-hotel-admin-part-2","j_9lc2AJ7V-cUhixhelc8mCG9I_frujM4l4Fj3SzJuo",1788972925289]