/ 4.-stp / 07-hands-on-lab.md
07-hands-on-lab.md
  1  # Практика
  2  
  3  > Наверное, большинство ошибок в Packet Tracer допущено в части кода, отвечающего за симуляцию STP, будте готовы. В случае сомнения сохранитесь, закройте PT и откройте заново
  4  
  5  Итак, переходим к практике. Для начала внесем некоторые изменения в топологию — добавим избыточные линки. Учитывая сказанное в самом начале, вполне логично было бы сделать это в московском офисе в районе серверов — там у нас свич msk-arbat-asw2 доступен только через asw1, что не есть гуд. Мы отбираем \(пока, позже возместим эту потерю\) гигабитный линк, который идет от msk-arbat-dsw1 к msk-arbat-asw3, и подключаем через него asw2. Asw3 пока подключаем в порт Fa0/2 dsw1. Перенастраиваем транки:
  6  
  7  > msk-arbat-dsw1\(config\)\#interface gi1/2 
  8  
  9  > msk-arbat-dsw1\(config-if\)\#description msk-arbat-asw2 
 10  
 11  > msk-arbat-dsw1\(config-if\)\#switchport trunk allowed vlan 2,3 
 12  
 13  > msk-arbat-dsw1\(config-if\)\#int fa0/2 
 14  
 15  > msk-arbat-dsw1\(config-if\)\#description msk-arbat-asw3 
 16  
 17  > msk-arbat-dsw1\(config-if\)\#switchport mode trunk 
 18  
 19  > msk-arbat-dsw1\(config-if\)\#switchport trunk allowed vlan 2,101-104
 20  
 21  
 22  > msk-arbat-asw2\(config\)\#int gi1/2 
 23  
 24  > msk-arbat-asw2\(config-if\)\#description msk-arbat-dsw1 
 25  
 26  > msk-arbat-asw2\(config-if\)\#switchport mode trunk 
 27  
 28  > msk-arbat-asw2\(config-if\)\#switchport trunk allowed vlan 2,3 
 29  
 30  > msk-arbat-asw2\(config-if\)\#no shutdown
 31  
 32  Не забываем вносить все изменения в документацию!
 33  
 34  ![](https://habrastorage.org/getpro/habr/post_images/6cf/e25/20f/6cfe2520ffacd459babe1bad42beeb6c.png)
 35  
 36  [Скачать актуальную версию документа](http://dl.dropbox.com/u/47476169/Habr/V4/Network_Planning_v4.xlsx)
 37  
 38  Теперь посмотрим, как в данный момент у нас _самонастроился_ STP. Нас интересует только VLAN0003, где у нас, судя по схеме, петля.
 39  
 40  ```text
 41  msk-arbat-dsw1>en
 42  msk-arbat-dsw1#show spanning-tree vlan 3
 43  ```
 44  
 45  Разбираем по полочкам вывод команды
 46  
 47  ![](https://habrastorage.org/getpro/habr/post_images/2f3/4f1/c0f/2f34f1c0fbf7a97e7b970aa692565606.png)
 48  
 49  Итак, какую информацию мы можем получить? Так как по умолчанию на современных цисках работает PVST+ \(т.е. для каждого влана свой процесс STP\), и у нас есть более одного влана, выводится информация по каждому влану в отдельности, каждая запись предваряется номером влана. Затем идет вид STP: ieee значит PVST, rstp — Rapid PVST, mstp то и значит. Затем идет секция с информацией о корневом свиче: установленный на нем приоритет, его mac-адрес, стоимость пути от текущего свича до корневого, порт, который был выбран в качестве корневого \(имеет лучшую стоимость\), а также настройки таймеров STP. Далее- секция с той же информацией о текущем свиче \(с которого выполняли команду\). Затем- таблица состояния портов, которая состоит из следующих колонок \(слева направо\):
 50  
 51  * собственно, порт
 52  * его роль \(Root- корневой порт, Desg- назначенный порт, Altn- дополнительный, Back- резервный\)
 53  * его статус \(FWD- работает, BLK- заблокирован, LIS- прослушивание, LRN- обучение\)
 54  * стоимость маршрута до корневого свича
 55  * Port ID в формате: приоритет порта.номер порта
 56  * тип соединения
 57  
 58  Итак, мы видим, что Gi1/1 корневой порт, это дает некоторую вероятность того, что на другом конце линка корневой свич. Смотрим по схеме, куда ведет линк: ага, некий msk-arbat-asw1.
 59  
 60  ```text
 61  msk-arbat-asw1#show spanning-tree vlan 3
 62  ```
 63  
 64  И что же мы видим?
 65  
 66  ```text
 67  VLAN0003
 68   Spanning tree enabled protocol ieee
 69   Root ID    Priority    32771
 70              Address     0007.ECC4.09E2
 71              This bridge is the root
 72              Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec
 73  ```
 74  
 75  Вот он, наш корневой свич для VLAN0003.
 76  
 77  А теперь посмотрим на схему. Ранее, мы увидели в состоянии портов , что dsw1 блокирует порт Gi1/2, разрывая таким образом петлю. Но является ли это оптимальным решением? Нет, конечно. Сейчас наша новая сеть работает точь-в-точь как старая- трафик от asw2 идет только через asw1. Выбор корневого маршрутизатора никогда не нужно оставлять на совесть глупого STP. Исходя из схемы, наиболее оптимальным будет выбор в качестве корневого свича dsw1- таким образом, STP заблокирует линк между asw1 и asw2. Теперь это все надо объяснить недалекому протоколу. А для него главное что? Bridge ID. И он неслучайно складывается из двух чисел. Приоритет- это как раз то слагаемое, которое отдано на откуп сетевому инженеру, чтобы он мог повлиять на результат выбора корневого свича. Итак, наша задача сводится к тому, чтобы уменьшить \(меньше-лучше, думает STP\) приоритет нужного свича, чтобы он стал Root Bridge. Есть два пути:
 78  
 79  1\) вручную установить приоритет, заведомо меньший, чем текущий:
 80  
 81  ```text
 82  msk-arbat-dsw1>enable
 83  msk-arbat-dsw1#configure terminal
 84  msk-arbat-dsw1\(config\)#spanning-tree vlan 3 priority ?
 85   <0-61440>  bridge priority in increments of 4096
 86  msk-arbat-dsw1\(config\)#spanning-tree vlan 3 priority 4096
 87  ```
 88  
 89  Теперь он стал корневым для влана 3, так как имеет меньший Bridge ID:
 90  
 91  ```text
 92  msk-arbat-dsw1#show spanning-tree vlan 3
 93  VLAN0003
 94   Spanning tree enabled protocol ieee
 95   Root ID    Priority    4099
 96              Address     000B.BE2E.392C
 97              This bridge is the root
 98              Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec
 99  ```
100  
101  2\) дать умной железке решить все за тебя:
102  
103  ```text
104  msk-arbat-dsw1\(config\)#spanning-tree vlan 3 root primary
105  ```
106  
107  Проверяем:
108  
109  ```text
110   msk-arbat-dsw1#show spanning-tree vlan 3
111   VLAN0003
112    Spanning tree enabled protocol ieee
113    Root ID    Priority    24579
114               Address     000B.BE2E.392C
115               This bridge is the root
116               Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec
117  ```
118  
119  Мы видим, что железка поставила какой-то странный приоритет. Откуда взялась эта круглая цифра, спросите вы? А все просто- STP смотрит минимальный приоритет \(т.е. тот, который у корневого свича\), и уменьшает его на два шага инкремента \(который составляет 4096, т.е. в итоге 8192\). Почему на два? А чтобы была возможность на другом свиче дать команду spanning-tree vlan n root secondary \(назначает приоритет=приоритет корневого-4096\), что позволит нам быть уверенными, что, если с текущим корневым свичом что-то произойдет, его функции перейдут к этому, “запасному”. Вероятно, вы уже видите на схеме, как лампочка на линке между asw2 и asw1 пожелтела? Это STP разорвал петлю. Причем именно в том месте, в котором мы хотели. Sweet! Зайдем проверим: лампочка — это лампочка, а конфиг — это факт.
120  
121  ```text
122   msk-arbat-asw2#show spanning-tree vlan 3
123   VLAN0003
124    Spanning tree enabled protocol ieee
125    Root ID    Priority    24579
126               Address     000B.BE2E.392C
127               Cost        4
128               Port        26\(GigabitEthernet1/2\)
129               Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec
130  
131    Bridge ID  Priority    32771  \(priority 32768 sys-id-ext 3\)
132               Address     000A.F385.D799
133               Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec
134               Aging Time  20
135  
136   Interface        Role    Sts    Cost      Prio.Nbr Type
137   ---------------- ---- --- --------- -------- --------------------------------
138   Fa0/1            Desg    FWD    19        128.1    P2p
139   Gi1/1            Altn    BLK    4         128.25   P2p
140   Gi1/2            Root    FWD    4         128.26   P2p
141  ```
142  
143  Теперь полюбуемся, как работает STP: заходим в командную строку на ноутбуке PTO1 и начинаем бесконечно пинговать наш почтовый сервер \(172.16.0.4\). Пинг сейчас идет по маршруту ноутбук-asw3-dsw1-gw1-dsw1\(ну тут понятно, зачем он крюк делает — они из разных вланов\)-asw2-сервер. А теперь поработаем Годзиллой из SimСity: нарушим связь между dsw1 и asw2, вырвав провод из порта \(замечаем время, нужное для пересчета дерева\).
144  
145  Пинги пропадают, STP берется за дело, и за _каких-то_ 30 секунд коннект восстанавливается. Годзиллу прогнали, пожары потушили, связь починили, втыкаем провод обратно. Пинги опять пропадают на 30 секунд! Мда-а-а, как-то не очень быстро, особенно если представить, что это происходит, например, в процессинговом центре какого-нибудь банка.
146  
147  Но у нас есть ответ медленному PVST+! И ответ этот — Быстрый PVST+ \(так и называется, это не шутка: Rapid-PVST\). Посмотрим, что он нам дает. Меняем тип STP на всех свичах в москве командой конфигурационного режима: spanning-tree mode rapid-pvst
148  
149  Снова запускаем пинг, вызываем Годзиллу... Эй, где пропавшие пинги? Их нет, это же Rapid-PVST. Как вы, наверное, помните из теоретической части, эта реализация STP, так сказать, “подстилает соломку” на случай падения основного линка, и переключается на дополнительный \(alternate\) порт очень быстро, что мы и наблюдали. Ладно, втыкаем провод обратно. Один потерянный пинг. Неплохо по сравнению с 6-8, да?
150  
151  ## EtherChannel
152  
153  Помните, мы отобрали у офисных работников их гигабитный линк и отдали его в пользу серверов? Сейчас они, бедняжки, сидят, на каких-то ста мегабитах, прошлый век! Попробуем расширить канал, и на помощь призовем EtherChannel. В данный момент у нас соединение идет от fa0/2 dsw1 на Gi1/1 asw3, отключаем провод. Смотрим, какие порты можем использовать на asw3: ага, fa0/20-24 свободны, кажется. Вот их и возьмем. Со стороны dsw1 пусть будут fa0/19-23. Соединяем порты для EtherChannel между собой. На asw3 у нас на интерфейсах что-то настроено, обычно в таких случаях используется команда конфигурационного режима default interface range fa0/20-24, сбрасывающая настройки порта \(или портов, как в нашем случае\) в дефолтные. Packet tracer, увы, не знает такой хорошей команды, поэтому в ручном режиме убираем каждую настройку, и тушим порты \(лучше это сделать, во избежание проблем\)
154  
155  ```text
156  msk-arbat-asw3\(config\)#interface range fa0/20-24
157  msk-arbat-asw3\(config-if-range\)#no description
158  msk-arbat-asw3\(config-if-range\)#no switchport access vlan
159  msk-arbat-asw3\(config-if-range\)#no switchport mode
160  msk-arbat-asw3\(config-if-range\)#shutdown
161  ```
162  
163  ну а теперь волшебная команда
164  
165  ```text
166  msk-arbat-asw3\(config-if-range\)#channel-group 1 mode on
167  ```
168  
169  то же самое на dsw1:
170  
171  ```text
172  msk-arbat-dsw1\(config\)#interface range fa0/19-23
173  msk-arbat-dsw1\(config-if-range\)#channel-group 1 mode on
174  ```
175  
176  поднимаем интерфейсы asw3, и вуаля: вот он, наш EtherChannel, раскинулся аж на 5 физических линков. В конфиге он будет отражен как interface Port-channel 1. Настраиваем транк \(повторить для dsw1\):
177  
178  ```text
179  msk-arbat-asw3\(config\)#int port-channel 1
180  msk-arbat-asw3\(config-if\)#switchport mode trunk
181  msk-arbat-asw3\(config-if\)#switchport trunk allowed vlan 2,101-104
182  ```
183  
184  Как и с STP, есть некая трудность при работе с etherchannel в Packet Tracer’e. Настроить-то мы, в принципе, можем по вышеописанному сценарию, но вот проверка работоспособности под большим вопросом: после отключения одного из портов в группе, трафик перетекает на следующий, но как только вы вырубаете второй порт — связь теряется и не восстанавливается даже после включения портов.
185  
186  Отчасти в силу только что озвученной причины, отчасти из-за ограниченности ресурсов мы не сможем раскрыть в полной мере эти вопросы и посему оставляем бОльшую часть на самоизучение.
187