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.