2010-12-22

Question of the day: STP filtering

Задача:
запретить все не-IP протоколы в vlan10. разрешить stp и ip.


решение:


mac access-list extended ANY
 permit any any
mac access-list extended STP+ARP
 permit any any lsap 0x4242 0x0
 permit any any 0x10B 0x0
 permit any any 0x806 0x0

vlan access-map IPONLY 10
 action forward
 match mac address STP+ARP
vlan access-map IPONLY 20
 action drop
 match mac address ANY
vlan access-map IPONLY 30
 action forward
!
vlan filter IPONLY vlan-list 10

коментарии:
ANY - любой не-IP трафик (т.е. любой трафик который свич не маршрутизирует/не обрабатывает персональными списками доступа. например для 3560 IPv6 под этот список не попадает, а на 3550 - попадает).
STP+ARP- явно разрешен STP по ssap/dsap 0x42, ARP по ethertype 0x806, и PVST в SNAP инкапсуляции с ethertype 0x10b
затем в vlan access-map разрешаем STP+ARP, запрещаем весь не айпи, разрешаем все прочее (потенциально ipv6).

вопрос: все ли ок?

ответ:
не совсем.
было обнаружено что между двумя 3560 все супер.
но между 3560 и 3550 при такой настройке не проходит STP!

SW3550#sh span vla 10 de | in Fast|eceived
 Port 5 (FastEthernet0/5) of VLAN0010 is designated forwarding
   BPDU: sent 47, received 0
 Port 13 (FastEthernet0/13) of VLAN0010 is designated forwarding
   BPDU: sent 47, received 0
 Port 16 (FastEthernet0/16) of VLAN0010 is designated forwarding
   BPDU: sent 47, received 0
SW3550#
SW3550#conf t
SW3550(config)#no vlan filter IPONLY vlan 10
SW3550(config)#^Z
SW3550#sh span vla 1 de | in Fast|eceived
 Port 5 (FastEthernet0/5) of VLAN0010 is designated forwarding
   BPDU: sent 61, received 0
 Port 13 (FastEthernet0/13) of VLAN0010 is root forwarding
   BPDU: sent 60, received 2
 Port 16 (FastEthernet0/16) of VLAN0010 is alternate blocking
   BPDU: sent 60, received 1
т.е мы видим что с примененным vlan filter счетчик полученных bpdu не растет! но если vlan-filter снять - все приходит в норму.
проверим почему это происходит:
SW3550#debug spann bpdu receive 
Spanning Tree BPDU Received debugging is on
SW3550#
*Mar  1 02:27:26.563: STP: VLAN0010 rx BPDU: config protocol = ieee, packet from FastEthernet0/13  , linktype SSTP , enctype 3, encsize 22 
*Mar  1 02:27:26.563: STP: enc 01 00 0C CC CC CD 00 19 E8 B7 9E 92 00 32 AA AA 03 00 00 0C 01 0B 
*Mar  1 02:27:26.567: STP: Data     000000000060100019E8B79E800000000060100019E8B79E8080120000140002000A00
*Mar  1 02:27:26.567: STP: VLAN0010 Fa0/13:0000 00 00 00 60010019E8B79E80 00000000 60010019E8B79E80 8012 0000 1400 0200 0A00
*Mar  1 02:27:26.567: STP(1) port Fa0/13 supersedes 0
расшифруем строку "STP: enc 01 00 0C CC CC CD 00 19 E8 B7 9E 92 00 32 AA AA 03 00 00 0C 01 0B ":
0100.0ccc.cccd - mac адрес используемый для STP.
0019.E8B7.9E92 - src mac bpdu
0032 - длина кадра (50байт)
AA AA - SSAP/DSAP (!)
далее идут код команды и тело bpdu.
но проблема уже найдена! мы получаем bpdu с неверным SSAP/DSAP!
Гугл нам подсказывает, что SAP 0xAA используется протоколами CDP/VTP/DTP и другими проприетарными протоколами cisco.
исправим конфиг:
mac access-list extended STP+ARP
 permit any any lsap 0xaaaa 0x0
vlan filter IPONLY vlan-list 10
и убедимся что bpdu проходят:
SW3550#clear spanning-tree counters 
SW3550# show span vla 1 det | in Fast|eceived
 Port 5 (FastEthernet0/5) of VLAN0010 is designated forwarding 
   BPDU: sent 2, received 0
 Port 13 (FastEthernet0/13) of VLAN0010 is root forwarding 
   BPDU: sent 2, received 2
 Port 16 (FastEthernet0/16) of VLAN0010 is alternate blocking 
   BPDU: sent 2, received 1

еще маленький эксперимент:
SW3560# debug spann bpdu receive
*Mar  1 02:49:01.021: STP: VLAN0023 rx BPDU: config protocol = ieee, packet from FastEthernet0/15  , linktype SSTP , enctype 3, encsize 22 
*Mar  1 02:49:01.021: STP: enc 01 00 0C CC CC CD EC 44 76 A4 64 11 00 32 AA AA 03 00 00 0C 01 0B 
*Mar  1 02:49:01.021: STP: Data     00000000008017EC4476A46400000000008017EC4476A4640080110000140002000A00
*Mar  1 02:49:01.029: STP: VLAN0023 Fa0/15:0000 00 00 00 8017EC4476A46400 00000000 8017EC4476A46400 8011 0000 1400 0200 0A00
*Mar  1 02:49:01.029: STP(23) port Fa0/15 supersedes 0
*Mar  1 02:49:01.625: STP: VLAN0001 rx BPDU: config protocol = ieee, packet from FastEthernet0/13  , linktype IEEE_SPANNING , enctype 2, encsize 17 
*Mar  1 02:49:01.625: STP: enc 01 80 C2 00 00 00 EC 44 76 A4 64 0F 00 26 42 42 03 
*Mar  1 02:49:01.625: STP: Data     00000000008001EC4476A46400000000008001EC4476A46400800F0000140002000A00
*Mar  1 02:49:01.633: STP: VLAN0001 Fa0/13:0000 00 00 00 8001EC4476A46400 00000000 8001EC4476A46400 800F 0000 1400 0200 0A00
*Mar  1 02:49:01.633: STP(1) port Fa0/13 supersedes 0
что мы видим?
мы видим что 3560 обмениваются bpdu двух видов: один называется linktype SSTP, и использует SAP 0xAA, второй называется IEEE_SPANNING, и использует SAP 0xAA O_o.

вопрос: что это значит, и как это понимать?

UPDATE: ответ: читаю http://www.cisco.com/en/US/tech/tk389/tk621/technologies_tech_note09186a00801d11a0.shtml
ищу слова shared spanning tree, sstp, vlan 1, non-vlan 1 и наслаждаюсь.

2010-12-19

Question of the day

вопрос:
сколько команд нужно для того что бы:
* сделать коммутатор корнем stp для влана 10 (pvst+)
* установить интервал между отправкой bpdu в 1 сек
* установить таймер перехода между состояниями в 7 сек
* установить срок жизни bpdu в 10 сек

ответ:
одна


spanning-tree vlan 10 root primary diameter 5 hello 1

эта команда сгенерирует 4 команды:



spanning-tree vlan 68 priority 24576
spanning-tree vlan 68 hello-time 1
spanning-tree vlan 68 forward-time 7
spanning-tree vlan 68 max-age 10

вопрос 2:
по какому алгоритму рассчитываются исходя из нашей одной введенной команды таймеры в результирующих четырех? :)

2010-12-18

Question of the day

вопрос:
как списком доступа разрешить или запретить трафик протокола vrrp?

ответ:
по номеру протокола: vrrp является протоколом ip 112
access-list 101 permit 112 any any

2010-12-16

Беспроводный эксперимент

что сегодня случилось с моим ноутом:


root@t00l ~ # lspci | grep -i net
02:00.0 Network controller: Intel Corporation WiFi Link 5100
03:00.0 Network controller: Intel Corporation WiMAX/WiFi Link 5150
04:00.0 Ethernet controller: Atheros Communications AR8131 Gigabit Ethernet (rev c0)

root@t00l ~ # ip link | sed 's/..:..:..:..:../xx:xx:xx:xx:xx:xx/'
1: lo: mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback xx:xx:xx:xx:xx:xx:00 brd 00:00:00:00:00:00
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether xx:xx:xx:xx:xx:xx:55 brd ff:ff:ff:ff:ff:ff
3: wmx0: mtu 1400 qdisc pfifo_fast state DOWN qlen 20
    link/ether xx:xx:xx:xx:xx:xx:a6 brd ff:ff:ff:ff:ff:ff
9: wlan0: mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether xx:xx:xx:xx:xx:xx:c8 brd ff:ff:ff:ff:ff:ff
10: wlan1: mtu 1500 qdisc mq state DOWN qlen 1000
    link/ieee802.11/radiotap xx:xx:xx:xx:xx:xx:56 brd ff:ff:ff:ff:ff:ff
то есть теперь у моего ноута 2 (два) комплекта 802.11a/b/g/n радио-интерфейсов :)
плюс интерфейс wimax :)

резюме:
1) установка прошла почти без проблем. 
проблемой было только разместить антену внутри корпуса. конечно уровень сигнала ниже чем у штатного интерфейса, но над этой проблемой я еще подумаю :).
2) с двумя радио rfkill switch сходит с ума :)
аппаратная кнопа/индикатор не в состоянии ни включить ни выключить радио, но явно пытается это делать сразу с двумя:
[  299.359827] iwlagn 0000:03:00.0: RF_KILL bit toggled to disable radio.
[  299.359868] iwlagn 0000:02:00.0: RF_KILL bit toggled to disable radio.
[  299.360414] iwlagn 0000:03:00.0: Not sending command - RF KILL
[  299.360422] iwlagn 0000:03:00.0: Error sending REPLY_RXON: enqueue_hcmd failed: -5
[  299.363068] iwlagn 0000:03:00.0: Error setting new RXON (-5)
[  299.396605] iwlagn 0000:02:00.0: Not sending command - RF KILL
[  299.396616] iwlagn 0000:02:00.0: Error sending REPLY_RXON: enqueue_hcmd failed: -5
[  299.399242] iwlagn 0000:02:00.0: Error setting new RXON (-5)
но проблема решается перезагрузкой модуля iwlagn или консолькой rfkill. (индикатор не горит в любом случае).
3) в убунте есть поддержка железа (ядреный модуль i2400m и firmware к нему). но нет юзерспейса - wimax-tools.
надо либо качать с linuxwimax.org и собирать руками, либо забить (ждать от шаттлворта погоды).
4) при неактивном радио энергопотребление выросло приблизительно на ватт :(

2010-12-15

Question of the day

вопрос:
как можно проверить использует ли tcp соединение установленное с роутера (например bgp или ldp) автентификацию md5? какой используется mss? tos? настройки ttl security?

ответ:
поможет нам комада show tcp tcb
сначала найдем идентификатор tcp соединения show tcp brief

R4#sh tcp brief 
TCB       Local Address               Foreign Address             (state)
677F8C10  150.1.4.4.44000             150.1.5.5.179               ESTAB
66E70510  150.1.4.4.646               150.1.5.5.39519             ESTAB

здесь есть и bgp, и ldp. теперь посмотрим на bgp соединение:
R4#sh tcp tcb 677F8C10 Connection state is ESTAB, I/O status: 1, unread input bytes: 0             Connection is ECN Disabled, Mininum incoming TTL 0, Outgoing TTL 255 Local host: 150.1.4.4, Local port: 44000 Foreign host: 150.1.5.5, Foreign port: 179 Connection tableid (VRF): 0 Enqueued packets for retransmit: 0, input: 0  mis-ordered: 0 (0 bytes) Event Timers (current time is 0x5996008): Timer          Starts    Wakeups            Next Retrans             6          0             0x0 TimeWait            0          0             0x0 AckHold             4          2             0x0 SendWnd             0          0             0x0 KeepAlive           0          0             0x0 GiveUp              0          0             0x0 PmtuAger            0          0             0x0 DeadWait            0          0             0x0 Linger              0          0             0x0 ProcessQ            0          0             0x0 iss:  360807196  snduna:  360807901  sndnxt:  360807901     sndwnd:  16384 irs: 2140376393  rcvnxt: 2140377228  rcvwnd:      16124  delrcvwnd:    260 SRTT: 165 ms, RTTO: 1172 ms, RTV: 1007 ms, KRTT: 0 ms minRTT: 0 ms, maxRTT: 300 ms, ACK hold: 200 ms Status Flags: active open Option Flags: nagle, md5 IP Precedence value : 6 Datagrams (max data segment is 516 bytes): Rcvd: 11 (out of order: 0), with data: 7, total data bytes: 834 Sent: 12 (retransmit: 0, fastretransmit: 0, partialack: 0, Second Congestion: 0), with data: 7, total data bytes: 704  Packets received in fast path: 0, fast processed: 0, slow path: 0  Packets send in fast path: 0  fast lock acquisition failures: 0, slow path: 0

2010-12-14

Question of the day

вопрос:
как можно сделать, что б все сообщения которые приходят на приостановленную на роутере telnet сессию (ctrl-shift-6, x), отобразились при возобновлении сессии (resume)?

ответ:
запустить
service telnet-zeroize
на стороне роутера-клиента.
эта команда заставляет роутер при получении сигнала ctrl-shift-6 x устанавливать размер tcp окна telnet соединения в 0, что эфективно приводит к тому что мы перестаем получать сообщения с удаленной стороны (сессия замораживается).
при resume размер окна восстанавливается, и удаленный роутер присылает нам все что хотел нам сказать :)

Question of the day

вопрос:
что значит команда bgp: neighbor x.x.x.x local-as X no-prepend replace-as dual-as?

ответ:
на маршрутизаторе может быть запущен ровно один процесс bgp, и этот процесс имеет номер автономной системы real as.
если необходимо построить bgp сесиию под другим номером (лабораторные условия, стремные vpn, смена номеров при организационных изменениях/объединениях сетей), используется конструкция local-as. но это можно без проблем узнать у гугла :)


теперь краткое резюме функций по примеру:

router bgp 11
 neighbor 3.3.3.3 remote-as 3
 neighbor 2.2.2.2 remote-as 2
 network 10.11.0.0 mask 255.255.255.0

от соседа 3.3.3.3 приходит маршрут 10.3.0.0/16.

  1.  neighbor 2.2.2.2 local-as 1
    1. сессия с 2.2.2.2 строится от имени автономной системы local-as.
    2. к as-path маршрута 10.3.0.0/16 полученного от 3.3.3.3 будут добавлены ДВЕ автономные системы: 11 и 1 (real-as и local-as), сначала real-as, потом local-as 
    3. к as-path локально порожденного маршрута 10.11.0.0/16 будут добавлены ДВЕ автономные системы: 11 и 1 (real-as и local-as), сначала real-as, потом local-as 
  2. neighbor 2.2.2.2 local-as 1 no-prepend
    1. сессия с 2.2.2.2 строится от имени автономной системы local-as.
    2. к as-path маршрута 10.3.0.0/16 полученного от 3.3.3.3 будет добавлена ТОЛЬКО LOCAL-AS. 
    3. к as-path локально порожденного маршрута 10.11.0.0/16 будут добавлены ДВЕ автономные системы: 11 и 1 (real-as и local-as), сначала real-as, потом local-as 
  3. neighbor 2.2.2.2 local-as 1 no-prepend replace-as
    1. сессия с 2.2.2.2 строится от имени автономной системы local-as.
    2. к as-path маршрута 10.3.0.0/16 полученного от 3.3.3.3 будет добавлена ТОЛЬКО LOCAL-AS. 
    3. к as-path локально порожденного маршрута 10.11.0.0/16 будет добавлена ТОЛЬКО LOCAL-AS. 
  4. neighbor 2.2.2.2 local-as 1 no-prepend replace-as dual-as
    1. сессия с 2.2.2.2 будет пытаться строится от обоих автономных систем. т.е. роутер попытается отправить OPEN с real-as, если получит NOTIFICATION 2/2, то повторно отправит OPEN с local-as. для соседа хранится история принятых as, и порядок попыток может менятся.
    2. к as-path маршрута 10.3.0.0/16 полученного от 3.3.3.3 будет добавлена ТОЛЬКО LOCAL-AS. 
    3. к as-path локально порожденного маршрута 10.11.0.0/16 будет добавлена ТОЛЬКО LOCAL-AS. 

Question of the day: PACL vs VACL

дана топология:

R1 fa0/0 ----- fa0/1 SW1

конфиг R1:

hostname R1
!
int fa0/0
  ip add 10.0.0.1 255.255.255.0
  no shutdown
!
ip domain-name example.com
crypto key generate rsa 


конфиг SW1

hostname SW1
!
int vlan 1
 ip add 10.0.0.2 255.255.255.0
!
interface FastEthernet0/1
 switchport access vlan 1
 switchport mode access
 ip access-group pacl in
 spanning-tree portfast
!
vlan access-map vacl 10
 action drop
 match ip address vacl
vlan access-map vacl 20
 action forward
!
vlan filter vacl vlan-list 1
!
ip access-list extended pacl
 deny   icmp any any log
 permit ip any any log
ip access-list extended vacl
 permit tcp any any eq telnet log
 deny ip any any log
!
ip domain-name example.com
crypto key generate rsa 


вопрос 1: что мы увидим, выполнив на R1 команду ping 10.0.0.2?
вопрос 2: что мы увидим, выполнив на R1 команду telnet 10.0.0.2?
вопрос 3: что мы увидим, выполнив на R1 команду ssh 10.0.0.2?

ответы:
1) пинги заблокированы access-group на порту:
R1#ping 10.0.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)


2) телнет работает, несмотря на vacl :)
R1#telnet 10.0.0.2
Trying 10.0.0.2 ... Open
User Access Verification
Password:


3) 
R1#ssh 10.0.0.2
% No user specified nor available for SSH client


шутка :)


R1#ssh -l admin 10.0.0.2
Password:

трафик проходит.


усложняем задачу.
что будет, если на sw1 выполнить следующие команды:
int fa0/1
no ip access-group pacl in
и повторить действия 1-3?

ответ:
1) icmp проходят - их vacl не блокирует
2) а вот telnet - нет. он заблокирован vacl
3) ssh проходит
R1#ping 10.0.0.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms
R4#telnet 10.0.0.2
Trying 191.1.48.8 ... 
% Connection timed out; remote host not responding

R4#ssh -l admin 10.0.0.2

Password: 

что ж это такое? :)

сделаем еще один маленький эксперимент, который уж поставит все на свои места :)
int fa0/1
ip access-group pacl in
ip access-list extended vacl
permit tcp any eq telnet any 
что теперь будет если повторить действия 1-3?

ответ:
1) icmp заблокирован pacl
2) telnet заблокирован vacl
3) ssh работает, поскольку ни pacl, ни vacl его не блокирует

R1#ping 10.0.0.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
R4#telnet 10.0.0.2
Trying 10.0.0.2 ...
% Connection timed out; remote host not responding

R4#ssh -l admin 10.0.0.2

Password:

объяснения:
в ситуации 1, проверки VACL на порту fa0/1 не происходит. потому что на порту присвоен PACL.
в ситуации 2, проверка VACL имеет место на порту fa0/1, так как список доступа снят
в ситуации 3, проверка VACL имеет место точно так же как и в ситуации 1, но, теперь ОБРАТНЫЙ трафик от свича к пользователю попадает под список доступа! :)

выводы:
1) на порту в направлении in не может использоваться PACL и VACL одновременно. при заданом PACL проверка VACL не происходит (справедливо для каждого протокола в отдельности).
2) нужно учитывать что трафик порожденный свичем точно также проходит проверку по VACL in :)

Question of the day

вопрос:
какой ethertype используется при туннелировании 802.1q (q-in-q)?

ответ:
смотря кем и при каких настройках.
по 802.1ad для q-in-q должен использоваться 0x88a8
cisco использует 0x8100 (как и для обычного 0x8100).
иногда используются теги 0x9100, 0x9101, 0x9102, 0x9103 для вложеных q-in-q.

Question of the day

вопрос 1:
может ли кадр ethernet/llc быть размером 1536 или больше  октетов?

наводящий вопрос 1.1:
что будет если поле length (а при использовании llc поле type/length кадра ethernet интерпретируется именно как length) будет 1536 или больше  (0x600)? ведь значения type/length начиная с 0x600 и больше должны интерпретироваться как ethertype!

ответ 1:
при длине больше 1536 поле length будет иметь фиксированное значение 0x8870.
получатель по ethertype 0x8870 определяет тип jumbo frame, а длину кадра - по фактически принятым данным.

вопрос 2:
какое значение будет иметь поле type/length кадра ethernet при переносе пакета IP размером 1500 октетов? а пакета размером 1510 октетов? а пакета размером 9000 октетов?

ответ 2:
пакеты IP инкапсулируются в кадры ethernet всегда с ethertype 0x800.
так как заголовок llc не используется, ситуация из вопроса 1 не применима :)

2010-12-09

Question of the day

вопрос:
как можно идентифицировать пакеты hsrp с помощью списка доступа?
(пример: GRE: permit 47 any any; RIP: permit udp any any eq 520)

ответ:
hsrp использует UDP порт1985, следовательно его можно класифицировать таким ace:
permit udp any any eq 1985
источник: hsrp version 1, RFC2281, section 5.1

вопрос:
сколько типов пакетов существует в протоколе hsrp?

ответ:
три: hello, coup, resign (RFC2281, section 5.1)

ответ:
чем отличаются состояния hsrp listen, learn и initial:

ответ:
initial: hsrp не обрабатывает сообщения.
learn: hsrp не знает virtual ip и еще не получил ни одного hello сообщения.
listen: hsrp знает virtual ip, получает(и/или ожидает) hello сообщения, но не является ни active ни standby.


примечание: все вышеописанное в большей степени касается версии 1, т.к. версия 2 не была опубликована в виде rfc, и точных сведений о ней мало.

2010-12-08

Question of the day

вопрос:
что такое ospf poll-interval?

R1(config)#router ospf 1
R1(config-router)#neighbor 1.1.1.1 ?
  cost             OSPF cost for point-to-multipoint neighbor
  database-filter  Filter OSPF LSA during synchronization and flooding for
                   point-to-multipoint neighbor
  poll-interval    OSPF dead-router polling interval
  priority         OSPF priority of non-broadcast neighbor
  

R1(config-router)#neighbor 1.1.1.1 poll-interval ?
  <0-65535>  Seconds


наводящий вопрос:
как часто маршрутизатор отправляет hello-сообщения? :)

ответ:
оказывается не все так просто с hello-interval, и в случае unicast-hello существует два варианта:
* маршрутизатор НЕ в состоянии DOWN, и hello отправляются каждый hello-interval
* маршрутизатор в DOWN, и т.д. в это случае hello отправляются каждый poll-interval
цитирую rfc2328, section 9.5.1

  When sending Hello packets periodically to any neighbor, the
  interval between Hello Packets is determined by the
  neighbor's state.  If the neighbor is in state Down, Hello
  Packets are sent every PollInterval seconds.  Otherwise,
  Hello Packets are sent every HelloInterval seconds.

2010-11-18

Занимательные факты о cisco waas

  • страничка продукта http://cisco.com/go/waas
  • система куплена вместе с компанием actona
  • на WAE есть tcpdump и wireshark:
WAE1#tcpdump -h
tcpdump version 3.8.1 (jlemon)
libpcap version 0.8
Usage: tcpdump [-aAdDeflLnNOpqRStuUvxX] [-c count] [ -C file_size (kB) ]
[ -E algo:secret ] [ -F file ] [ -i interface ] [ -r file ]
[ -s snaplen ] [ -T type ] [ -w file ] [ -y datalinktype ]
[ -M max_log_files ] [ expression ]
WAE1#tcpdump -D
1.eth0
2.eth2
3.eth4
4.eth5
5.any (Pseudo-device that captures on all interfaces)
6.lo
WAE1#tcpdump -i eth4 -n
tcpdump: WARNING: eth4: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth4, link-type EN10MB (Ethernet), capture size 96 bytes
19:38:30.642777 01:00:0c:cc:cc:cd > 00:1e:79:c4:e6:81 sap aa ui/C len=39
 0100 0ccc cccd 001e 79c4 e681 8100 e00a
 0032 aaaa 0300 000c 010b 0000 0000 0080
 0000 02fd a7d6 c000 0000 1380 0a00 1e79
 c4e6 8080 0101
19:38:30.834835 00:1e:79:c4:e6:81 > 01:00:0c:cc:cc:cc sap aa ui/C len=35
19:38:31.849711 01:00:0c:cc:cc:cd > 00:1e:79:c4:e6:81 sap aa ui/C len=39
 0100 0ccc cccd 001e 79c4 e681 8100 e00b
 0032 aaaa 0300 000c 010b 0000 0000 0080
 0b00 1e79 c4e6 8000 0000 0080 0b00 1e79
 c4e6 8080 0100
19:38:32.648268 01:00:0c:cc:cc:cd > 00:1e:79:c4:e6:81 sap aa ui/C len=39
 0100 0ccc cccd 001e 79c4 e681 8100 e00a
 0032 aaaa 0300 000c 010b 0000 0000 0080
 0000 02fd a7d6 c000 0000 1380 0a00 1e79
 c4e6 8080 0101
19:38:33.492675 

WAE1#tethereal -h
TShark 1.0.0
Dump and analyze network traffic.
See http://www.wireshark.org for more information.

Copyright 1998-2008 Gerald Combs and contributors.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Usage: tshark [options] ...

Capture interface:
  -i  interface         name or idx of interface (def: first non-loopback)
  -f filter     packet filter in libpcap filter syntax
  -s snaplen            packet snapshot length (def: 65535)
  -p                       don't capture in promiscuous mode
  -y link-type           link layer type (def: first appropriate)
  -D                       print list of interfaces and exit
  -L                       print list of link-layer types of iface and exit

Capture stop conditions:
  -c packet-count       stop after n packets (def: infinite)
  -a autostop  ...  duration:NUM - stop after NUM seconds
                           filesize:NUM - stop this file after NUM KB
                              files:NUM - stop after NUM files
Capture output:
  -b ringbuffer ... duration:NUM - switch to next file after NUM secs
                           filesize:NUM - switch to next file after NUM KB
                              files:NUM - ringbuffer: replace after NUM files
Input file:
  -r infile             set the filename to read from (no pipes or stdin!)

Processing:
  -R read-filter        packet filter in Wireshark display filter syntax
  -n                        disable all name resolutions (def: all enabled)
  -N name-resolution-flag enable specific name resolution(s): "mntC"
  -d layer-type==selector,decode-as-protocol ...
                           "Decode As", see the man page for details
                           Example: tcp.port==8888,http
Output:
  -w output          set the output filename (or '-' for stdout)
  -C config     start with specified configuration profile
  -F outout-type   set the output file type, default is libpcap
                           an empty "-F" option will list the file types
  -V                       add output of packet tree        (Packet Details)
  -S                       display packets even when writing to a file
  -x                       add output of hex and ASCII dump (Packet Bytes)
  -T pdml|ps|psml|text|fields
                           format of text output (def: text)
  -e field              field to print if -Tfields selected (e.g. tcp.port);
                           this option can be repeated to print multiple fields
  -E option=value set options for output when -Tfields selected:
     header=y|n            switch headers on and off
     separator=/t|/s| select tab, space, printable character as separator
     quote=d|s|n           select double, single, no quotes for values
  -t ad|a|r|d|dd|e         output format of time stamps (def: r: rel. to first)
  -l                       flush standard output after each packet
  -q                       be more quiet on stdout (e.g. when using statistics)
  -X key:value         eXtension options, see the man page for details
  -z stats           various statistics, see the man page for details

Miscellaneous:
  -h                       display this help and exit
  -v                       display version info and exit
  -o option:value ...    override preference setting
WAE1#tethereal -i eth4
Running as user "admin" and group "root". This could be dangerous.
Capturing on eth4
  0.000000 00:1b:53:50:0a:c0 -> 00:1b:53:50:0a:c0 LOOP Reply
  0.643978 00:1e:79:c4:e6:81 -> 01:00:0c:cc:cc:cd STP Conf. Root = 32779/00:1e:79:c4:e6:80  Cost = 0  Port = 0x8001
  1.155038 00:1e:79:c4:e6:81 -> 01:00:0c:cc:cc:cd STP Conf. Root = 32768/00:02:fd:a7:d6:c0  Cost = 19  Port = 0x8001
  1.700815 00:1e:79:c4:e6:81 -> 00:1e:79:c4:e6:81 LOOP Reply
  2.648238 00:1e:79:c4:e6:81 -> 01:00:0c:cc:cc:cd STP Conf. Root = 32779/00:1e:79:c4:e6:80  Cost = 0  Port = 0x8001
  3.152556 00:1e:79:c4:e6:81 -> 01:00:0c:cc:cc:c6 packets captured


  • на WAE есть grep
WAE1#sh run | in -h
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
WAE1#

  • логин/пароль по умолчанию весьма оригинальны: admin/default

продолжение следует

2010-11-05

Narbik's Fridays Puzzle

задание придумано Нарбиком, и опубликовано в групстади. публикую для тех кто не знает что такое групстади :)

топология:

R1 ---- R2

конфиг:

hostname R1
!
int fa0/0
 descr -- to R2
 ip add 10.1.1.1 255.255.255.0
 no sh
!
int lo0
 ip add 2.2.2.2 255.255.0.0
!
router eigrp 1
 network 10.0.0.0
 redistribute static

и

hostname R2
!
int fa0/0
 descr -- to R1
 ip add 10.1.1.2 255.255.255.0
 no sh
!
router eigrp 1
 network 10.0.0.0

задание:
* на R2 должен появится маршрут на лупбек R1, причем как D EX
* R2 настраивать нельзя
* R1 должен использовать именно redistribute static
* на R1 нельзя использовать: ip route, route-map, access-list, prefix-list, event manager :(


UPDATE:ответ:


R1(config)#ip default-network 2.0.0.0
R1(config)#end
R1#sh ip route static
     2.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
S       2.0.0.0/8 [1/0] via 2.2.0.0
R1#sh ip route 2.0.0.0 255.0.0.0
Routing entry for 2.0.0.0/8
  Known via "static", distance 1, metric 0
  Redistributing via eigrp 1
  Advertised by eigrp 1
  Routing Descriptor Blocks:
  * 2.2.0.0
      Route metric is 0, traffic share count is 1

R2#sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

D EX 2.0.0.0/8 [170/2297856] via 10.1.1.1, 00:00:04, Serial0/0/1
     10.0.0.0/24 is subnetted, 1 subnets
C       10.1.1.0 is directly connected, Serial0/0/1



правда, косвенно, у нас появляется статический маршрут на R1, но ведь 
а) мы его не добавляли; 
б) мы его даже удалить не можем :)

2010-10-23

Question of the day

вопрос:

дана топология: PC1 --- SW1 --- PC2
PC1 - компьютер, генерирующий ip-трафик отмаркированный dscp 46
PC2 - компьютер, на котором запущен снифер
SW1 - коммутатор 3560 с дефолтным конфигом

вопрос: какие значения DSCP будут видны у пакетов полученных на PC2??

вопрос 2: а если на коммутаторе включить mls qos?


вопрос 3: а если на портах коммутатора в которые включены PC1 и PC2 прописать mls qos trust?


ответ: 46
пока не включен mls qos коммутатор "не замечает" маркировки qos, соответственно и не меняет ее


ответ 2: 0
по-умолчанию все порты коммутатора untrusted, соотвественно все пакеты будут перемаркированы под cos0/dscp be(по-умолчанию)


ответ 3:
это зависит от того чему верит коммутатор. по-умолчанию, mls qos trust доверяет меткам dscp, потому dscp не будет изменен, PC2 получит кадры с dscp 46

2010-10-19

Question of the day

вопрос:
в каких ролях(режимах) коммутатор генерирует BPDU?

ответ:
в режиме pvst bpdu генерируются только корневым коммутатором (аналогично - 802.1d)
в режимах rapid-pvst, mstp - bpdu генерируются всеми комутаторами (802.1w, 802.1s, rapid-pvst).


естественно вы можете мне возразить, что ответ по pvst это противоречит принципам работы stp, но тут есть различие между "генерацией" bpdu, и "ретрансляцией" bpdu:
1) корневой коммутатор порождает конфигурационное bpdu и отправляет на всех designated портах
2) все коммутаторы получившие конфигурационный bpdu на своих root портах, пересылают его дальше со всех своих designated портов, меняя BID, Path Cost и Message Age.


контроль:
представим себе топологию:
SW1 --- SW2 --- R1
где SW1 - корневой коммутатор.



SW1# debug spanning-tree bpdu transmit

11w3d: STP: VLAN0001 Fa0/1 tx BPDU: config protocol=ieee
    Data : 0000 00 00 00 80010019E8B79E80 00000000 80010019E8B79E80 8001 0000 1400 0200 0F00
11w3d: STP: VLAN0001 Fa0/1 tx BPDU: config protocol=ieee
    Data : 0000 00 00 00 80010019E8B79E80 00000000 80010019E8B79E80 8001 0000 1400 0200 0F00

bpdu генерируются и отправляются каждые 2 сек.


SW2# debug spanning-tree bpdu transmit
SW2#
SW2# show spanning-tree interface fa0/2 detail
 Port 2 (FastEthernet0/2) of VLAN0001 is forwarding
   Port path cost 4, Port priority 128, Port Identifier 128.02.
   Designated root has priority 32769, address 0019.e8b7.9e80
   Designated bridge has priority 32769, address 0024.13db.d400
   Designated port id is 128.02, designated path cost 19
   Timers: message age 0, forward delay 0, hold 0
   Number of transitions to forwarding state: 1
   Link type is point-to-point by default
   BPDU: sent 2, received 0
SW2# show spanning-tree interface fa0/2 detail
 Port 2 (FastEthernet0/2) of VLAN0001 is forwarding
   Port path cost 4, Port priority 128, Port Identifier 128.02.
   Designated root has priority 32769, address 0019.e8b7.9e80
   Designated bridge has priority 32769, address 0024.13db.d400
   Designated port id is 128.02, designated path cost 19
   Timers: message age 0, forward delay 0, hold 0
   Number of transitions to forwarding state: 1
   Link type is point-to-point by default
   BPDU: sent 4, received 0
SW2#

как мы видим, количество отправленных bpdu растет, но debug их не показывает :)
усложним задачу:

SW1# configure terminal
SW1(config)# interface fa0/1

11w3d: STP: VLAN0001 Fa0/1 tx BPDU: config protocol=ieee
    Data : 0000 00 00 00 80010019E8B79E80 00000000 80010019E8B79E80 8001 0000 1400 0200 0F00
SW1(config-if)# spanning-tree bpdufilter enable
SW1(config-if)#

отправка bpdu прекратилась (больше нет портов в роли designated). посмотрим что происходит теперь на SW2:



SW2#
SW2# show spanning-tree interface fa0/2 detail
 Port 2 (FastEthernet0/2) of VLAN0001 is forwarding
   Port path cost 4, Port priority 128, Port Identifier 128.02.
   Designated root has priority 32769, address 0019.e8b7.9e80
   Designated bridge has priority 32769, address 0024.13db.d400
   Designated port id is 128.02, designated path cost 19
   Timers: message age 0, forward delay 0, hold 0
   Number of transitions to forwarding state: 1
   Link type is point-to-point by default
   BPDU: sent 12, received 0
SW2# show spanning-tree interface fa0/2 detail
 Port 2 (FastEthernet0/2) of VLAN0001 is forwarding
   Port path cost 4, Port priority 128, Port Identifier 128.02.
   Designated root has priority 32769, address 0019.e8b7.9e80
   Designated bridge has priority 32769, address 0024.13db.d400
   Designated port id is 128.02, designated path cost 19
   Timers: message age 0, forward delay 0, hold 0
   Number of transitions to forwarding state: 1
   Link type is point-to-point by default
   BPDU: sent 12, received 0
SW2#
SW2#
2w5d: STP: VLAN0001 Fa0/2 tx BPDU: config protocol=ieee
    Data : 0000 00 00 01 8001002413DBD400 00000000 8001000024.13db.d4002413DBD400 8002 0000 1400 0200 0F00
SW2#show spanning-tree interface fa0/2 detail
 Port 25 (GigabitEthernet0/1) of VLAN0001 is forwarding 
   Port path cost 4, Port priority 128, Port Identifier 128.02.
   Designated root has priority 32769, address 0024.13db.d400
   Designated bridge has priority 32769, address 0024.13db.d400
   Designated port id is 128.02, designated path cost 0
   Timers: message age 0, forward delay 0, hold 0
   Number of transitions to forwarding state: 1
   Link type is point-to-point by default
   BPDU: sent 13, received 0
SW2#
2w5d: STP: VLAN0001 Fa0/2 tx BPDU: config protocol=ieee
    Data : 0000 00 00 01 8001002413DBD400 00000000 8001002413DBD400 8002 0000 1400 0200 0F00
мы видим что сначала счетчик bpdu не растет. через 20 секунд - начинает расти. попутно мы видим что в выводе команды show spanning-tree detail изменился корневой коммутатор :)
т.е. пока SW2 не решил что SW1 исчез (прошел max age) - он не генерировал bpdu. что и требовалось доказать :)

2010-10-18

Question of the day

дано:

два роутера соединены fa0/0 интерфейсами. их конфиг:



hostname R1
!
ipv6 unicast-routing
!
int fa0/0
  ipv6 address 2001:1::1/64
  no shutdown
!




hostname R2
!
ipv6 unicast-routing
!
int fa0/0
  ipv6 address autoconfig
  no shutdown
!


вопрос 1:
получит ли R2 адрес ipv6 на интерфейс fa0/0 адрес автоматически?

вопрос 2:
что нужно прописать на R1 что б ответ на вопрос 1 стал утвердительным? :)
a. ничего
b. ipv6 nd prefix 2001:1::/64
c. ipv6 nd ra suppress
d. ipv6 nd advertisement-interval 5
e. ipv6 nd dad
f. не c
g. b и c
h. b и не c
i.. b,c,d,e
j. b, c, d и не e
k. ни один из вариантов (или их комбинаций) не является правильным

вопрос 3:
что произойдет если на R2 ввести команды:

R2(config)# int fa0/0
R2(config-if)# ipv6 address 2001:1::1/64
R2(config-if)# do ping 2001:1::1


ответы:

1. нет, R2 не получит адрес автоматически, т.к. не получает информацию о наличии роутера и о префиксе линка.

2. достаточно "не c", но большинство вариантов включающих "no ipv6 nd ra suppress" будут работать :)
по-умолчанию R1 будет отправлять только NA (neighbor advertisement) сообщения. для того что б R2 смог сделать IPv6 SLAA (state-less autoconfiguration) нужно что б R1 отправлял RA(router advertisement), которые по-умолчанию отключены(supressed).

3. при указанном конфиге, маршрутизаторы используют механизм IPv6 ND DAD:

R1# show ipv6 interface fa0/0
FastEthernet0/0 is up, line protocol is up
  IPv6 is enabled, link-local address is FE80::222:90FF:FEAF:10D8 
  No Virtual link-local address(es):
  Stateless address autoconfig enabled
  Global unicast address(es):
    2001:1::222:90FF:FEAF:10D8, subnet is 2001:1::/64 [EUI/CAL/PRE]
      valid lifetime 2591879 preferred lifetime 604679
  Joined group address(es):
    FF02::1
    FF02::2
    FF02::1:FFAF:10D8
  MTU is 1500 bytes
  ICMP error messages limited to one every 100 milliseconds
  ICMP redirects are enabled
  ICMP unreachables are sent
  ND DAD is enabled, number of DAD attempts: 1
  ND reachable time is 30000 milliseconds (using 15789)
  Hosts use stateless autoconfig for addresses.
потому мы можем наблюдать следующую цепочку событий:
1) мы назначаем адрес на интерфейс
2) роутер выполняет проверку DAD, отправляя NS(neighbor solicitaion) сообщение
3) если роутер получает ответ на NS, адрес уже занят
4) роутер маркирует адрес как DUP
R2(config-if)# do debug ipv6 nd
R2(config-if)# ipv6 address 2001:1::1/64
R2(config-if)#
*Oct 18 13:30:13.029: IPv6-Address: Prefix change 0x1 -> 0x4
*Oct 18 13:30:13.029: IPv6-Address: Updating prefix 2001:1::/64 to FastEthernet0/0
*Oct 18 13:30:13.029: IPv6-Address: Address 2001:1::1 configured on FastEthernet0/0
*Oct 18 13:30:13.029: IPv6-Addrmgr-ND: DAD request for 2001:1::1 on FastEthernet0/0
*Oct 18 13:30:13.033: ICMPv6-ND: Sending NS for 2001:1::1 on FastEthernet0/0
*Oct 18 13:30:13.037: ICMPv6-ND: Received NA for 2001:1::1 on FastEthernet0/0 from 2001:1::1
PC1(config-if)#
*Oct 18 13:30:13.037: %IPV6_ND-4-DUPLICATE: Duplicate address 2001:1::1 on FastEthernet0/0

естественно, наиболее интересным элементом вопроса является то, кого именно мы пропингуем по адресу 2001:1::1 :)
к счастью(или к сожалению), маршрутизатор не использует адреса маркированые как DUP, т.е. не отправляет по ним NA (и таким образом невозможно разрешение IPv6 адреса в MAC данного роутера), и вообще игнорирует его присутствие в конфиге.
таким образом адрес 2001:1::1 будет соответствовать первому роутеру использовавшему данный адрес, т.е. R1:

R2(config-if)#do show run interface fa0/
Building configuration...

Current configuration : 115 bytes
!
interface FastEthernet0/0
 ipv6 address 2001:1::1/64
 ipv6 address autoconfig
end

R2(config-if)#do show ipv6 interface
FastEthernet0/0 is up, line protocol is up
  IPv6 is enabled, link-local address is FE80::222:90FF:FEAF:10D8 
  No Virtual link-local address(es):
  Stateless address autoconfig enabled
  Global unicast address(es):
    2001:1::1, subnet is 2001:1::/64 [DUP]
    2001:1::222:90FF:FEAF:10D8, subnet is 2001:1::/64 [EUI/CAL/PRE]
      valid lifetime 2591879 preferred lifetime 604679
  Joined group address(es):
    FF02::1
    FF02::2
    FF02::1:FFAF:10D8
  MTU is 1500 bytes
  ICMP error messages limited to one every 100 milliseconds
  ICMP redirects are enabled
  ICMP unreachables are sent
  ND DAD is enabled, number of DAD attempts: 1
  ND reachable time is 30000 milliseconds (using 15789)
  Hosts use stateless autoconfig for addresses.
R2(config-if)# do show ipv6 route
IPv6 Routing Table - Default - 3 entries
Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
       B - BGP, M - MIPv6, R - RIP, I1 - ISIS L1
       I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary, D - EIGRP
       EX - EIGRP external
       O - OSPF Intra, OI - OSPF Inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
C   2001:1::/64 [0/0]
     via FastEthernet0/0, directly connected
L   2001:1::222:90FF:FEAF:10D8/128 [0/0]
     via FastEthernet0/0, receive
L   FF00::/8 [0/0]
     via Null0, receive
R2(config-if)# do sh ipv6 ro 2001:1::1
Routing entry for 2001:1::/64
  Known via "connected", distance 0, metric 0, type connected
  Route count is 1/1, share count 0
  Routing paths:
    directly connected via FastEthernet0/0
      Last updated 00:24:58 ago

R2(config-if)# do sh ipv6 ro 2001:1::222:90FF:FEAF:10D8    
Routing entry for 2001:1::222:90FF:FEAF:10D8/128
  Known via "connected", distance 0, metric 0, type receive
  Route count is 1/1, share count 0
  Routing paths:
    receive via FastEthernet0/0
      Last updated 00:25:09 ago

...
R1(config-if)#do debug ipv icmp
  ICMP Packet debugging is on
R1(config-if)#
*Oct 18 13:20:59.409: ICMPv6: Received echo request, Src=2001:1::222:90FF:FEAF:10D8, Dst=2001:1::1
*Oct 18 13:20:59.413: ICMPv6: Sent echo reply, Src=2001:1::1, Dst=2001:1::222:90FF:FEAF:10D8
*Oct 18 13:20:59.413: ICMPv6: Received echo request, Src=2001:1::222:90FF:FEAF:10D8, Dst=2001:1::1
*Oct 18 13:20:59.413: ICMPv6: Sent echo reply, Src=2001:1::1, Dst=2001:1::222:90FF:FEAF:10D8
*Oct 18 13:20:59.417: ICMPv6: Received echo request, Src=2001:1::222:90FF:FEAF:10D8, Dst=2001:1::1
*Oct 18 13:20:59.417: ICMPv6: Sent echo reply, Src=2001:1::1, Dst=2001:1::222:90FF:FEAF:10D8
*Oct 18 13:20:59.417: ICMPv6: Received echo request, Src=2001:1::222:90FF:FEAF:10D8, Dst=2001:1::1
*Oct 18 13:20:59.421: ICMPv6: Sent echo reply, Src=2001:1::1, Dst=2001:1::222:90FF:FEAF:10D8
*Oct 18 13:20:59.421: ICMPv6: Received echo request, Src=2001:1::222:90FF:FEAF:10D8, Dst=2001:1::1
*Oct 18 13:20:59.421: ICMPv6: Sent echo reply, Src=2001:1::1, Dst=2001:1::222:90FF:FEAF:10D8do R1(config-if)#
как мы видим, на R2 не появился Local маршрут, и маршруты на локальный SLAA-адрес и на адрес 2001:1::1 ярко отличаются (receive для Local, directly connected для удаленного).

2010-10-14

Question of the day [MSTP]

вопрос:

как передаются MSTP(802.1s) BPDU?
естественно, вопрос не имеет односложного ответа, потому приведу уточняющие вопросы:

a) сколько BPDU будет генерироваться в домене MSTP при наличии 30 инстанций MST, и 3000 vlan'ов?
b) в каком влане передаются BPDU разных инстанций?
c) поддерживается ли инкапсуляция ISL или только 802.1q?


ответы:


a) MSTP использует ровно один BPDU независимо от количества инстанций.
фактически BPDU состоит из общей части, содержащей информацию о таймерах, версии, и множество "расширений", по одному на каждую инстанцию + для CIST. расширения содержат информацию о корнях/айди/костах каждого дерева.


b) на транковых портах MSTP BPDU передается в нативном влане (независимо от номера - просто без тега). если транк не поддерживает нативный влан, используется 1й влан (независимо от того какие вланы на транке разрешены).


c) фактически поддерживаются обе инкапсуляции.


приложения:
native_mstp.pcap
isl_mstp.pcap
dot1q_mstp.pcap