По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Выходим на новый уровень. Для изучения следующей темы вы уже должны хорошо понимать связующее дерево. Связующее дерево (Spanning Tree Protocol STP) — это важная тема. Есть много вещей, которые могут пойти не так, и в этой статье мы рассмотрим ряд инструментов, которые мы можем использовать для защиты нашей топологии связующего дерева. Для профессионалов PortFast: мы видели это в статье о spanning tree и rapid spanning tree. Он настроит порт доступа как пограничный порт, поэтому он переходит в режим forwarding немедленно. BPDU Guard: это отключит (err-disable) интерфейс, который имеет настроенный PortFast, если он получает BPDU. BPDUFilter: это будет подавлять BPDU на интерфейсах. Root Guard: это предотвратит превращение соседнего коммутатора в корневой мост, даже если он имеет лучший идентификатор моста. UplinkFast: мы видели это в статье о связующем дереве. Он улучшает время конвергенции. BackboneFast: мы также видели это в статье о связующем дереве. Оно улучшает время конвергенции, если у вас есть сбой косвенной связи. UplinkFast и BackboneFast не требуются для rapid spanning tree, поскольку оно уже реализовано по умолчанию. Мы начнем с BPDUguard: В топологии выше мы имеем идеально работающую топологию остовного дерева. По умолчанию связующее дерево будет отправлять и получать BPDU на всех интерфейсах. В нашем примере у нас есть компьютер, подключенный на интерфейсе fa0/2 коммутатора B. Есть кто-то, кто с враждебными намерениями мог бы запустить инструмент, который сгенерирует BPDU с превосходящим ID моста. Что же произойдет- так это то, что наши коммутаторы будут считать, что корневой мост теперь может быть достигнут через коммутатор B, и у нас будет повторный расчет связующего дерева. Звучит не очень хорошо, правда? Можно поставить человека (хакера) в середине топологии для атаки так, чтобы никто не знал. Представьте себе, что хакер подключает свой компьютер к двум коммутаторам. Если хакер станет корневым мостом, то весь трафик от коммутатора А или коммутатора C к коммутатору В будет проходить через него. Он запустит Wireshark и подождет, пока произойдет чудо. BPDUguard гарантирует, что, когда мы получаем BPDU на интерфейс, интерфейс перейдет в режим err-disable. Чтобы продемонстрировать работу BPDUguard будем использовать два коммутатора. Настроем интерфейс fa0/16 коммутатора B так, что он перейдет в режим err-disable, если он получит BPDU от коммутатора C. SwitchB(config)#interface fa0/16 SwitchB(config-if)#spanning-tree bpduguard enable Вот как вы включаете его в интерфейсе. Имейте в виду, что обычно вы никогда не будете делать это между коммутаторами. Вы должны настроить это на интерфейсах в режиме доступа, которые подключаются к компьютерам. А-а... вот и наш интерфейс. SwitchB(config-if)#no spanning-tree bpduguard SwitchB(config-if)#shutdown SwitchB(config-if)#no shutdown Избавиться от BPDUguard можно используя команды shut/no shut, чтобы сделать интерфейс снова рабочим. SwitchB(config)#spanning-tree portfast bpduguard Вы также можете использовать команду spanning-tree portfast bpduguard. Это позволит глобально активировать BPDUguard на всех интерфейсах, которые имеют включенный portfast. SwitchB(config)#spanning-tree portfast default Portfast также может быть включен глобально для всех интерфейсов, работающих в режиме доступа. Это полезная команда, позволяющая проверить свою конфигурацию. Вы видите, что portfast и BPDUGuard были включены глобально. BPDUGuard переведет интерфейс в режим err-disable. Кроме того, можно фильтровать сообщения BPDU с помощью BPDUfilter. BPDUfilter может быть настроен глобально или на уровне интерфейса и есть разница: Глобальный: если вы включите bpdufilter глобально, любой интерфейс с включенным portfast станет стандартным портом. Интерфейс: если вы включите BPDUfilter на интерфейсе, он будет игнорировать входящие BPDU и не будет отправлять никаких BPDU. Вы должны быть осторожны, когда включаете BPDUfilter на интерфейсах. Вы можете использовать его на интерфейсах в режиме доступа, которые подключаются к компьютерам, но убедитесь, что вы никогда не настраиваете его на интерфейсах, подключенных к другим коммутаторам. Если вы это сделаете, вы можете получить цикл. Для демонстрации работы BPDUfilter мы будем снова использовать коммутатор B и коммутатор C. SwitchB(config)#interface fa0/16 SwitchB(config-if)#spanning-tree portfast trunk SwitchB(config-if)#spanning-tree bpdufilter enable Он перестанет посылать BPDU и будет игнорировать все, что будет получено. SwitchB#debug spanning-tree bpdu Вы не увидите никаких интересных сообщений, но если вы включите отладку BPDU, то заметите, что он больше не отправляет никаких BPDU. Если вы хотите, вы также можете включить отладку BPDU на коммутаторе C, и вы увидите, что нет ничего от коммутатора B. SwitchB(config)#interface fa0/16 SwitchB(config-if)#no spanning-tree bpdufilter enable Давайте избавимся от команды BPDUfilter на уровне интерфейса. SwitchB(config)#spanning-tree portfast bpdufilter default Вы также можете использовать глобальную команду для BPDUfilter. Это позволит включить BPDUfilter на всех интерфейсах, которые имеют portfast. Еще один вариант, с помощью которого мы можем защитить наше связующее дерево, - это использовать RootGuard. Проще говоря, RootGuard позаботится о том, чтобы вы не принимали определенный коммутатор в качестве корневого моста. BPDU отправляются и обрабатываются нормально, но, если коммутатор внезапно отправляет BPDU с идентификатором верхнего моста, вы не будете принимать его в качестве корневого моста. Обычно коммутатор D становится корневым мостом, потому что у него есть лучший идентификатор моста, к счастью, у нас есть RootGuard на коммутатое C, так что этого не произойдет! Рассмотрим с вами конфигурацию с коммутатором B и коммутатором C. SwitchB(config)#spanning-tree vlan 1 priority 4096 Давайте убедимся, что коммутатор C не является корневым мостом. Вот как мы включаем RootGuard на интерфейсе. SwitchB#debug spanning-tree events Spanning Tree event debugging is on Не забудьте включить отладку, если вы хотите увидеть события. SwitchC(config)#spanning-tree vlan 1 priority 0 Давайте перенастроим коммутатор B, изменив приоритет на наименьшее возможное значение 0 на коммутаторе C. Он теперь должен стать корневым мостом. Вот так коммутатор B не будет принимать коммутатор C в качестве корневого моста. Это заблокирует интерфейс для этой VLAN. Вот еще одна полезная команда, чтобы проверить, работает ли RootGuard. Связующее дерево становится все более безопасным с каждой минутой! Однако есть еще одна вещь, о которой мы должны подумать… Если вы когда-либо использовали волоконные кабели, вы могли бы заметить, что существует другой разъем для передачи и приема трафика. Если один из кабелей (передающий или принимающий) выйдет из строя, мы получим однонаправленный сбой связи, и это может привести к петлям связующего дерева. Существует два протокола, которые могут решить эту проблему: LoopGuard UDLD Давайте начнем с того, что внимательно рассмотрим, что произойдет, если у нас произойдет сбой однонаправленной связи. Представьте себе, что между коммутаторами волоконно-оптические соединения. На самом деле имеется другой разъем для передачи и приема. Коммутатор C получает BPDU от коммутатора B, и в результате интерфейс стал альтернативным портом и находится в режиме блокировки. Теперь что-то идет не так... transmit коннектор на коммутаторе B к коммутатору C был съеден мышами. В результате коммутатор C не получает никаких BPDU от коммутатора B, но он все еще может отправлять трафик для переключения между ними. Поскольку коммутатор C больше не получает BPDU на свой альтернативный порт, он перейдет в forwarding режим. Теперь у нас есть one way loop (петля в один конец), как указано зеленой стрелкой. Один из методов, который мы можем использовать для решения нашего однонаправленного сбоя связи — это настройка LoopGuard. Когда коммутатор отправляет, но не получает BPDU на интерфейсе, LoopGuard поместит интерфейс в состояние несогласованности цикла и заблокирует весь трафик! Мы снова будем использовать эту топологию для демонстрации LoopGuard. SwitchA(config)#spanning-tree loopguard default SwitchB(config)#spanning-tree loopguard default SwitchC(config)#spanning-tree loopguard default Используйте команду spanning-tree loopguard по умолчанию, чтобы включить LoopGuard глобально SwitchB(config)#interface fa0/16 SwitchB(config-if)#spanning-tree portfast trunk SwitchB(config-if)#spanning-tree bpdufilter enable В примере у нас нет никаких волоконных разъемов, поэтому мы не сможем создать однонаправленный сбой связи. Однако мы можем смоделировать его с помощью BPDUfilter на интерфейсе SwitchB fa0/16. Коммутатор C больше не будет получать никаких BPDU на свой альтернативный порт, что заставит его перейти в режим переадресации. Обычно это вызвало бы петлю, но, к счастью, у нас есть настроенный LoopGuard. Вы можете увидеть это сообщение об ошибке, появляющееся в вашей консоли. Проблема решена! SwitchC(config-if)#spanning-tree guard loop Если вы не хотите настраивать LoopGuard глобально, вы т можете сделать это на уровне интерфейса. Другой протокол, который мы можем использовать для борьбы с однонаправленными сбоями связи, называется UDLD (UniDirectional Link Detection). Этот протокол не является частью инструментария связующего дерева, но он помогает нам предотвратить циклы. Проще говоря, UDLD — это протокол второго уровня, который работает как механизм keepalive. Вы посылаете приветственные сообщения, вы их получаете, и все прекрасно. Как только вы все еще посылаете приветственные сообщения, но больше их не получаете, вы понимаете, что что-то не так, и мы блокируем интерфейс. Убедитесь, что вы отключили LoopGuard перед работой с UDLD. Мы будем использовать ту же топологию для демонстрации UDLD. Существует несколько способов настройки UDLD. Вы можете сделать это глобально с помощью команды udld, но это активирует только UDLD для оптоволоконных линий связи! Существует два варианта для UDLD: Normal (default) Aggressive Когда вы устанавливаете UDLD в нормальное состояние, он помечает порт как неопределенный, но не закрывает интерфейс, когда что-то не так. Это используется только для того, чтобы «информировать» вас, но это не предотвратит циклы. Агрессивный - это лучшее решение, когда пропадает связь с соседом. Он будет посылать кадр UDLD 8 раз в секунду. Если сосед не отвечает, интерфейс будет переведен в режим errdisable. SwitchB(config)#interface fa0/16 SwitchB(config-if)#udld port aggressive SwitchC(config)#interface fa0/16 SwitchC(config-if)#udld port aggressive Мы будем использовать коммутатор B и C, чтобы продемонстрировать UDLD. Будем использовать агрессивный режим, чтобы мы могли видеть, что интерфейс отключается, когда что-то не так. Если вы хотите увидеть, что UDLD работает, вы можете попробовать выполнить отладку. Теперь самое сложное будет имитировать однонаправленный сбой связи. LoopGuard был проще, потому что он был основан на BPDUs. UDLD запускает свой собственный протокол уровня 2, используя собственный MAC-адрес 0100.0ccc.сссс. SwitchC(config)#mac access-list extended UDLD-FILTER SwitchC(config-ext-macl)#deny any host 0100.0ccc.cccc SwitchC(config-ext-macl)#permit any any SwitchC(config-ext-macl)#exit SwitchC(config)#interface fa0/16 SwitchC(config-if)#mac access-group UDLD-FILTER in Это творческий способ создавать проблемы. При фильтрации MAC-адреса UDLD он будет думать, что существует сбой однонаправленной связи! Вы увидите много отладочной информации, но конечным результатом будет то, что порт теперь находится в состоянии err-disable. Вы можете проверить это с помощью команды show udld. LoopGuard и UDLD решают одну и ту же проблему: однонаправленные сбои связи. Они частично пересекаются, но есть ряд различий, вот общий обзор: LoopGuardUDLDНастройкиГлобально/на портуГлобально (для оптики)/на портуVLAN?ДаНет, на портуАвтосохранениеДаДа, но вам нужно настроить errdisable timeout.Защита от сбоев STP из-за однонаправленных связейДа - нужно включить его на всех корневых и альтернативных портахДа - нужно включить его на всех интерфейсах.Защита от сбоев STP из-за сбоев программного обеспечения (нет отправки BPDU)ДаНетЗащита от неправильного подключения (коммутационный оптический приемопередающий разъем)НетДа Есть еще одна последняя тема, которую хотелось бы объяснить, это не протокол связующего дерева, но речь идет о избыточных ссылках, поэтому я оставлю ее здесь. Это называется FlexLinks. Вот в чем дело: при настройке FlexLinks у вас будет активный и резервный интерфейс. Мы настроим это на коммутаторе C: Fa0/14 будет активным интерфейсом. Fa0/16 будет интерфейс резервного копирования (этот блокируется!). При настройке интерфейсов в качестве FlexLinks они не будут отправлять BPDU. Нет никакого способа обнаружить петли, потому что мы не запускаем на них связующее дерево. Всякий раз, когда наш активный интерфейс выходит из строя, резервный интерфейс заменяет его. SwitchC(config)#interface fa0/14 SwitchC(config-if)#switchport backup interface fa0/16 Именно так мы делаем интерфейс fa0/16 резервной копией интерфейса fa0/14. Вы можете видеть, что связующее дерево отключается для этих интерфейсов. Проверьте нашу конфигурацию с помощью команды show interfaces switchport backup. Вот и все, что нужно было сделать. Это интересное решение, потому что нам больше не нужно связующее дерево. Ведь в любой момент времени активен только один интерфейс. SwitchC(config)#interface f0/14 SwitchC(config-if)#shutdown Давайте закроем активный интерфейс. Вы можете видеть, что fa0/16 стал активным. Вот и все.
img
Может наступить время, когда вам нужно изменить пароль администратора на вашем Windows Server. Варианты восстановления зависят от того, помните ли вы старый пароль или нет. Если вы регулярно меняете известный пароль администратора, вы можете использовать пользовательский интерфейс Windows. Однако, если вы изменяете неизвестный пароль администратора, вам нужно использовать командную строку. Изменение пароля администратора сервера Windows Server 2008 R2 Если вы уже знаете текущий пароль администратора и можете войти в Windows Server 2008 R2, изменить пароль так же просто, как перейти к списку пользователей и установить новый пароль. Войдите на сервер напрямую или удаленно. Щелкните правой кнопкой мыши на Компьютер и выберите пункт Управление (Manage). Выберите пункт Конфигурация (Configuration) Нажмите Локальные пользователи и группы (Local Users and Groups) -> Пользователи (Users). Найдите и щелкните правой кнопкой мыши на пользователе Администратор. Нажмите Установить пароль (Set Password) -> Продолжить (Proceed). Введите и подтвердите новый пароль. Как сбросить пароль в Windows Server 2008 R2 или 2012 Что делать, когда вам нужно изменить пароль администратора, потому что вы потеряли старый пароль? Если у вас нет старого пароля, вы не можете получить доступ к серверу, чтобы изменить пароли пользователей. Вместо этого вам нужно будет использовать командную строку для сброса пароля администратора. Вставьте установочный диск в компьютер и загрузите его. На экране Язык и другие настройки (Language and other preferences) нажмите Далее. Выберите ссылку Восстановить компьютер (Repair your computer). Выберите установку ОС и нажмите Далее. Нажмите Командная строка (Command Prompt). Введите следующее: MOVE C:WindowsSystem32Utilman.exe C:WindowsSystem32Utilman2.exe Приведенная выше команда создает резервную копию менеджера утилит. COPY C:WindowsSystem32cmd.exe C:WindowsSystem32Utilman.exe Эта команда заменяет Utilman командной строкой. Это необходимо для сброса пароля. Упомянутые выше команды могут различаться в зависимости от пути установки Windows. В нашем примере это на диске C. Если ваша установка находится на другом разделе диска, измените команду соответствующим образом. Перезагрузите систему. Выберите значок Ease of Access. Введите следующее: net user administrator * Введите и подтвердите желаемый пароль. После завершения вы сможете войти в систему как администратор. Однако не забудьте отменить изменения в Utilman. Для этого: Перезагрузите компьютер снова с установочного диска. Откройте командную строку. Запустите следующее: MOVE C:WindowsSystem32Utilman2.exe C:WindowsSystem32Utilman.exe Как восстановить пароль Windows Server 2012 с диска восстановления пароля Если вы создали диск восстановления пароля (Password Recovery Disk) для своего сервера, вставьте USB-накопитель в сервер и перезагрузите систему. При появлении запроса на вход нажмите ссылку Сбросить пароль (Reset Password). В мастере забытых паролей нажимайте кнопку Далее, пока вам не будет предложено указать местоположение диска с паролями. Выберите диск для сброса пароля и следуйте инструкциям, чтобы установить новый пароль. Перезагрузите компьютер и войдите под новым паролем.
img
Семантическое управление версиями (или семвер) – это формальное соглашение для определения номера версии новых выпусков программного обеспечения. Стандарт помогает пользователям программного обеспечения понять серьезность изменений в каждом новом дистрибутиве. Проект, использующий семантическое управление версиями, объявляет основной номер версии (major), дополнительный номер версии (minor) и номер исправления (patch) для каждого выпуска. Строка версии 1.2.3 указывает на основную версию под номером 1, дополнительную версию под номером 2 и исправление под номером 3. Номера версий такого формата широко используются как программными пакетами, так и исполняемыми файлами конечных пользователей, такими как приложения и игры. Однако не каждый проект точно следует стандарту, установленному semver.org. Спецификация была создана для решения проблем, вызванных несовместимостью методов управления версиями между программными пакетами, используемыми в качестве зависимостей. Под «пакетом» и «зависимостью» мы подразумеваем библиотеку кода, предназначенную для использования в другом программном проекте и распространяемую диспетчером пакетов, таким как npm, composer или nuget. Это именно то применение семантического управления версиями, которое мы рассматриваем в этой статье. Major, Minor и Patch Важно понимать значение трех задействованных компонентов. Вместе они намечают путь разработки проекта и соотносят влияние каждого нового выпуска на конечных пользователей. Major number (основной номер версии) – основной номер указывает на текущую версию общедоступного интерфейса пакета. Он увеличивается каждый раз, когда вы вносите изменения, которые требуют от существующих пользователей вашего пакета обновления их собственной работы. Minor number (дополнительный номер версии) – дополнительный номер указывает на текущую функциональную версию вашего программного обеспечения. Он увеличивается всякий раз, когда вы добавляете новую функцию, но не меняете интерфейс вашего пакета. Он сообщает пользователям о том, что были внесены значительные изменения, но пакет полностью совместимым с предыдущими версиями с предыдущим дополнительным номером. Patch number (номер исправления) – номер исправления увеличивается каждый раз, когда вы вносите какое-то незначительное изменение, которое не влияет на общедоступный интерфейс или общую функциональность вашего пакета. Его чаще всего используют для исправления ошибок. Потребители всегда должны иметь возможность не задумываясь установить последнюю версию исправлений. Семантическая структура версии выпуска лучше всего моделируется в виде дерева. Наверху у вас изменения общедоступного интерфейса, каждое из которых отображается на основном номере. Каждая основная версия имеет свой собственный набор дополнительных версий, в которые добавляются новые функции без нарушения совместимости с предыдущими версиями. И наконец, дополнительные версии могут время от времени отлаживаться путем исправления некоторых ошибок. Откуда начинать? Большинство проектов должны начинаться с версии 1.0.0. Вы публикуете свой первый общедоступный интерфейс и первоначальный неизмененный набор функций. И поскольку вам еще не приходилось вносить никаких исправления, то и версия исправления – 0. Теперь давайте посмотрим, что же происходит, когда вы вносите изменения в свой пакет. После вашего первоначального выпуска вы получаете отчет об ошибке от пользователя. Когда вы выпустите исправление, то правильный номер версии уже будет 1.0.1. Если бы вы затем выпустили еще одну версию с исправлением ошибок, то вы бы увеличили номер исправления до 2, т.е. номер версии уже был бы 1.0.2. Тем временем вы также работали над новой интересной функцией. Это совершенно необязательно, поэтому пользователям не нужно ничего делать для обновления. Вы выпускаете эту версию как 1.1.0. – создана новая функциональная среда, но ее еще ни разу не исправляли. К сожалению, скоро приходят отчеты об ошибках, и среди ваших пользователей начинает распространяться версия 1.1.1. Несколько месяцев спустя вы решили провести реорганизацию кода всего проекта. Некоторые функции были удалены или теперь доступны через объединенный интерфейс. Если вы выпустите эту работу, то люди, использующие текущую версию вашего пакета, должны будут внести серьезные изменения в свой проект. Пришло время опубликовать 2.0.0. в вашем репозитории пакетов. Поддержание старых веток Увеличение какого-либо номера в вашей строке версий не создает точку невозврата. После публикации 1.1.1 вы могли обнаружить ошибку, присутствующую в 1.0.2. Используя ветки в вашей системе контроля версий, вы можете произвести исправления в обеих версиях. В итоге вы получите 1.1.2 и 1.0.3. Точно также вы можете поддерживать ветку 1.х вашего проекта, несмотря на выпуск 2.0.0. Может показаться странным публиковать 1.1.2 после 2.0.1, но это вполне нормальная практика. Семантическое управление версиями не создает линейный постоянно увеличивающийся номер версии; наоборот, оно предназначено для использования в качестве части модели разработки ветвления, которое использует простоту установки исправлений, предлагаемую системами управления исходным кодом, такими как Git. Опубликованные версии должны быть неизменяемыми. После того, как вы создали версию 2.4.3, вы не можете «обновить» его, просто добавив дополнительный код в ту же строку версии. Вы должны присваивать новый номер версии каждому выпуску, чтобы пользователи всегда могли получить доступ к каждой конкретной версии вашего пакета. Обработка пакетов, находящихся в стадии разработки Как правило, вы всегда обновляете основную версию своего пакета всякий раз, когда вносятся изменения, несовместимые с предыдущими версиями. Когда вы находитесь в стадии разработки, то ваша кодовая база может дорабатываться очень быстро, что приводит к публикации множества основных версий. Вы можете этого избежать, рекламируя свой проект как 0.y.z. Значение 0 в качестве основной версии означает, что ваш пакет неустойчив. Обычные правила в отношении совместимости с предыдущими версиями тут не применяются, поэтому вы можете выпускать новые версии, увеличивая только дополнительный номер и номер исправления. Это значит, что вы можете использовать 1.0.0 для обозначения первой «завершенной» версии вашего программного обеспечения. Вы также можете добавить дополнительные «идентификаторы» в конец строки версии, используя дефис в качестве разделителя: 1.0.0-alpha.1. Вы можете использовать такой вариант для того, чтобы четко обозначить альфа- и бета-версии. Точно также вы можете включить метаданные сборки, добавив символ +: 1.1.0-alpha.1+linux_x86. Заключение Согласованное использование семантического управления версиями помогает пользователям быть уверенными в вашем проекте. Они могут четко видеть, как развивается ваша кодовая база и нужно ли им самим провести какую-то работу, чтобы идти в ногу со временем. Объявление строки семантической версии необходимо при публикации в диспетчере наиболее популярных пакетов. Тем не менее, в конечном счете, вам решать, какие номера вы устанавливаете для каждого нового выпуска. Соблюдение стандарта четко сообщает о ваших намерениях пользователям и сводит к минимуму риск непреднамеренного нарушения чужой работы.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59