W swoim tajnym laboratorium wybudowałem sieć taką jak poniżej na obrazku. Miał to na celu połączyć sprzętowe routery cisco z „nie sprzętowym” routerem postawionym na debianie. Dokładnie to debian z kernelem 2.6.32-5-686, quagga wersji 0.99.17-2+squeeze2. Nie miałem planu co dokładnie chce osiągnąć, oprócz działającego BGP w sieci mieszanej. No ale i tutaj, kochana nauka jaką jest informatyka, mnie nie zawiodła i sama mi wymyśliła troublesooting :D 

 

 

Ale po kolei. Po podłączeniu sprzętu według schematu na rysunku przyszedł czas jego konfiguracji.
Machnąłem najprostsze BGP jakie może być (bez żadnych list ACL by najpierw na czysto mieć działające BGP, a dopiero później dokładać kolejne rzeczy ) :

ISP1

router bgp 6001

no synchronization

bgp log-neighbor-changes

neighbor 1.1.1.2 remote-as 6003

neighbor 1.1.1.2 password tajnehaslo1

 

ISP2

router bgp 6002

no synchronization

bgp log-neighbor-changes

neighbor 2.2.2.2 remote-as 6003

neighbor 2.2.2.2 password tajnehaslo2

ROUTER-LINUX

bgpd.conf

router bgp 6003

neighbor 1.1.1.1 remote-as 6001

neighbor 1.1.1.1 password tajnehaslo1

neighbor 2.2.2.1 remote-as 6002

neighbor 2.2.2.1 password tajnehaslo2

 

Na jednym sesja się ustanowiła, a na drugim miałem problem właśnie z md5 i otrzymywałem na konsoli różne komunikaty np.

%TCP-6-BADAUTH: Invalid MD5 digest from

by zobaczyłem co się dokładnie dzieje wydałem polecenie :

debug ip tcp transactions

tam zobaczyłem, że połączenie jest najzwyczajniej w świecie resetowane. W sumie opisane jest to w RFC 2385

 

*Mar 1 01:38:40.941: TCB818BAB10 created

*Mar 1 01:38:40.941: TCB818BAB10 setting property TCP_WINDOW_SIZE (0) 819E5390

*Mar 1 01:38:40.941: TCB818BAB10 setting property TCP_TOS (11) 819E5388

*Mar 1 01:38:40.941: TCP: Random local port generated 11204

*Mar 1 01:38:40.941: TCB818BAB10 bound to 1.1.1.1.11204

*Mar 1 01:38:40.941: TCP: sending SYN, seq 1490962352, ack 0

*Mar 1 01:38:40.941: TCP0: Connection to 1.1.1.2:639, advertising MSS 1460

*Mar 1 01:38:40.945: TCP0: state was CLOSED -> SYNSENT [11204 -> 1.1.1.2(639)]

*Mar 1 01:38:40.945: TCP0: state was SYNSENT -> CLOSED [11204 -> 1.1.1.2(639)]

R3#

*Mar 1 01:38:40.945: TCP0: bad seg from 1.1.1.2 -- closing connection: port 11204 seq 0 ack 1490962353 rcvnxt 0 rcvwnd 0 len 0

*Mar 1 01:38:40.945: TCP0: connection closed - remote sent RST

*Mar 1 01:38:40.945: TCB 0x818BAB10 destroyed

 

Na debianie po połączeniu się na localhoście na port 2605, czyli na demona bgpd, miałem :

 

bgpd# sh ip bgp summ

BGP router identifier 192.168.33.1, local AS number 6003

RIB entries 0, using 0 bytes of memory

Peers 2, using 5040 bytes of memory

 

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd

1.1.1.1 4 6001 5 6 0 0 0 00:03:37 0

2.2.2.1 4 6002 0 0 0 0 0 never Active

 

Total number of neighbors 2

 

Zacząłem szukać i znalazłem by na interfejsie z którym jest problem, wydać polecenie ethtool -k interfejs, żeby sprawdzić co jest wyłączone, a co nie i odpowiednie rzeczy wyłączyć czyli tcp segmentation offload i scatter gather :

ethtool -k eth0

Offload parameters for eth0:

rx-checksumming: on

tx-checksumming: on

scatter-gather: on

tcp-segmentation-offload: on

udp-fragmentation-offload: off

generic-segmentation-offload: on

generic-receive-offload: off

large-receive-offload: off

ntuple-filters: off

receive-hashing: off

 

ethtool -K eth0 tso off

ethtool -K eth0 sg off

 

Niestety u mnie one nic nie dały.

Dokopałem się poprzez google, że to jakiś bug w cisco tzn. występuje on gdy połączczone są routery cisco z nie-routerami cisco (bug CSCsb51019, nie sprawdzałem dokładnie o co chodzi ).

Po zmianie IOSa na routerze cisco wszystko było ok.

bgpd# sh ip bgp summ

BGP router identifier 192.168.33.1, local AS number 6003

RIB entries 0, using 0 bytes of memory

Peers 2, using 5040 bytes of memory

 

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd

1.1.1.1 4 6001 6 7 0 0 0 00:04:19 0

2.2.2.1 4 6002 2 3 0 0 0 00:00:15 0

 

Total number of neighbors 2