OSPF jest uważany za jeden z najbardziej skomplikowanych protokołów routingu, być może nawet bardziej skomplikowany od BGP. Obsługuje 5 różnych rodzajów topologii fizycznych oraz 6 rodzajów obszarów. Ponadto, posiada ponad 10 różnych pakietów LSA oraz mnóstwo opcji konfiguracyjnych.
Na podstawowym poziomie OSPF jest stosunkowo łatwy w wdrożeniu. Jednak diabeł, jak zwykle, tkwi w szczegółach, zwłaszcza gdy mamy specyficzne wymagania co do jego zachowania.
Przejdźmy teraz do omówienia 5 przypadków zachowania i konfiguracji OSPF, które mogą okazać się nieoczywiste.
Adresy loopback rozgłaszane jako /32
Zdarza się, że potrzebujemy zadresować interfejs pętli zwrotnej z maską inną niż /32. Dzieje się tak na przykład, gdy chcemy mieć pewność, że dana podsieć będzie zawsze widoczna w tablicy routingu. Założenia dotyczące zachowania takich portów są jednak nieco inne w protokole OSPF.
Zgodnie z RFC 2328 adres interfejsu pętli zwrotnej powinien być rozgłaszany jako Typ 3 (sieć typu stub), maska ustawiona na 0xffffff (trasa do hosta), a koszt wynosi 0.
Tyle teorii. Sprawdźmy teraz, jak to wygląda w praktyce. Skonfigurujmy 2 bezpośrednio ze sobą połączone routery.
R1#show run
interface Loopback0
ip address 1.1.1.1 255.255.255.0
!
interface GigabitEthernet 0/0
ip address 10.0.0.1 255.255.255.0
!
router ospf 1
router-id 1.1.1.1
network 1.1.1.0 0.0.0.255 area 0
network 10.0.0.0 0.0.0.255 area 0R2#show run
interface Loopback0
ip address 2.2.2.2 255.255.255.0
!
interface GigabitEthernet 0/0
ip address 10.0.0.2 255.255.255.0
!
router ospf 1
router-id 2.2.2.2
network 2.2.2.0 0.0.0.255 area 0
network 10.0.0.0 0.0.0.255 area 0Jak widać, konfiguracja spełnia wszystkie założenia. Routery R1 i R2 posiadają interfejsy Loopback z adresami skonfigurowanymi z maską /24.
Sprawdźmy teraz zawartość tablicy routingu oraz jakie trasy otrzymujemy od sąsiada.
R2#show ip route
1.0.0.0/32 is subnetted, 1 subnets
O 1.1.1.1/32 [110/2] via 10.0.0.1, 00:17:48, GigabitEthernet0/0
2.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 2.2.2.0/24 is directly connected, Loopback0
L 2.2.2.2/32 is directly connected, Loopback0
10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 10.0.0.0/24 is directly connected, GigabitEthernet0/0
L 10.0.0.2/32 is directly connected, GigabitEthernet0/0R2#show ip ospf database router
OSPF Router with ID (2.2.2.2) (Process ID 1)
Router Link States (Area 0)
LS age: 1249
Options: (No TOS-capability, DC)
LS Type: Router Links
Link State ID: 2.2.2.2
Advertising Router: 2.2.2.2
LS Seq Number: 80000003
Checksum: 0x050e
Length: 48
Number of Links: 2
Link connected to: a Stub Network
(Link ID) Network/subnet number: 2.2.2.2
(Link Data) Network Mask: 255.255.255.255
Number of TOS metrics: 0
TOS 0 Metrics: 1
Link connected to: a Transit Network
(Link ID) Designated Router address: 10.0.0.1
(Link Data) Router Interface address: 10.0.0.2
Number of TOS metrics: 0
TOS 0 Metrics: 1
LS age: 1249
Options: (No TOS-capability, DC)
LS Type: Router Links
Link State ID: 1.1.1.1
Advertising Router: 1.1.1.1
LS Seq Number: 80000003
Checksum: 0x150b
Length: 48
Number of Links: 2
Link connected to: a Stub Network
(Link ID) Network/subnet number: 1.1.1.1
(Link Data) Network Mask: 255.255.255.255
Number of TOS metrics: 0
TOS 0 Metrics: 1Jak widać, nasze adresy loopback zostały rozgłoszone zgodnie z wytycznymi z RFC, jako adresy hostów z maską /32. Jak więc zmienić to zachowanie na pożądane? Rozwiązanie problemu jest bardzo proste. Wystarczy zmienić typ sieci interfejsu pętli zwrotnej na point-to-point.
R1#show run
interface Loopback0
ip address 1.1.1.1 255.255.255.0
ip ospf network point-to-pointR2#show ip route
1.0.0.0/24 is subnetted, 1 subnets
O 1.1.1.0/24 [110/2] via 10.0.0.1, 00:17:48, GigabitEthernet0/0
R2#show ip ospf database router
Link connected to: a Stub Network
(Link ID) Network/subnet number: 1.1.1.0
(Link Data) Network Mask: 255.255.255.0
Number of TOS metrics: 0
TOS 0 Metrics: 1Polecenie network nie rozgłasza sieci
Polecenie network w konfiguracji OSPF bywa jednym z najbardziej mylących.
Większość osób, nawet początkujących w dziedzinie sieci, wie, że aby rozgłaszać sieć w OSPF, trzeba ją redystrybuować z innego protokołu lub dodać poleceniem network.
Jednak prawda jest taka, że polecenie network nie określa, które dokładnie sieci mają być rozgłaszane. To polecenie dodaje interfejsy do procesu OSPF, których adresy mieszczą się w określonym zakresie. Dopiero z aktywowanego interfejsu pobierana jest informacja, które sieci powinny być rozgłaszane.
Przyjrzyjmy się prostemu przykładowi składającemu się z 3 routerów pracujących w jednym obszarze. Konfiguracja nie jest skomplikowana, ale warto zwrócić uwagę, że użyłem różnych wariantów polecenia network.

R1#show run
interface GigabitEthernet0/0
ip address 10.10.1.1 255.255.255.0
!
interface GigabitEthernet0/1
ip address 10.100.0.1 255.255.0.0
!
router ospf 1
router-id 1.1.1.1
network 10.0.0.0 0.255.255.255 area 0R2#show run
interface GigabitEthernet0/0
ip address 10.10.1.2 255.255.255.0
!
interface GigabitEthernet0/1
ip address 192.168.2.2 255.255.255.0
!
router ospf 1
router-id 2.2.2.2
network 10.10.1.2 0.0.0.0 area 0
network 192.168.2.0 0.0.0.255 area 0R3#show run
interface GigabitEthernet0/0
ip address 172.16.0.1 255.255.255.0
!
interface GigabitEthernet0/1
ip address 192.168.2.3 255.255.255.0
!
router ospf 1
router-id 3.3.3.3
network 192.168.2.3 0.0.0.0 area 0
network 172.16.0.1 0.0.0.0 area 0R2#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
1.1.1.1 1 FULL/BDR 00:00:32 10.10.1.1 GigabitEthernet0/0
3.3.3.3 1 FULL/DR 00:00:35 192.168.2.3 GigabitEthernet0/1
R2#show ip route
10.0.0.0/8 is variably subnetted, 3 subnets, 3 masks
C 10.10.1.0/24 is directly connected, GigabitEthernet0/0
L 10.10.1.2/32 is directly connected, GigabitEthernet0/0
O 10.100.0.0/16 [110/2] via 10.10.1.1, 00:23:34, GigabitEthernet0/0
172.16.0.0/24 is subnetted, 1 subnets
O 172.16.0.0/24 [110/2] via 192.168.2.3, 00:30:06, GigabitEthernet0/1
192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.2.0/24 is directly connected, GigabitEthernet0/1
L 192.168.2.2/32 is directly connected, GigabitEthernet0/1Jak widać, sąsiedztwo pomiędzy routerami jest nawiązane poprawnie. Sieci zostały rozgłoszone z odpowiednimi maskami.
Kiedy proces ID ma znaczenie
Proces ID ma znaczenie W EIGRP, podobnie jak w BGP, numer procesu określa AS, do którego należy router. Na podstawie tej informacji urządzenia wiedzą, czy należą do tego samego obszaru, czy nie.
W OSPF jest inaczej. Możemy z powodzeniem korzystać na jednym routerze z procesu 1 i nawiązać sąsiedztwo z innym, posługującym się procesem 100, w ramach jednej arei. Przynależność do obszaru w OSPF jest definiowana poprzez przypisanie poleceniem network x.x.x.x x.x.x.x area x.
Skoro przed chwilą ustaliliśmy, że możemy używać różnych numerów procesów i wszystko będzie działać, dlaczego twierdzę, że proces ID ma znaczenie?
W OSPF mamy parametr, który nazywa się domain ID. Podobnie jak nieskonfigurowany parametr router ID jest domyślnie brany z interfejsów, tak domyślnie domain ID jest przepisanym numerem procesu OSPF.
Do czego jest stosowane domain ID, dowiesz się z następnego punktu.
Superbackbone
OSPF to protokół hierarchiczny. Posiada obszar 0 nazywany backbone oraz obszary do niego przyległe. Bezpośrednia komunikacja między obszarami nie jest możliwa, cały ruch musi przechodzić przez nasz trzon.
Nietypowym przypadkiem jest sytuacja, gdy korzystamy z usługi MPLS L3VPN i rozgłaszamy trasy do naszego dostawcy za pomocą OSPF-a. Wtedy sieć ISP jest dla nas wirtualnym routerem, do którego rozgłaszamy sieci LAN, a następnie te rozgłoszone prefiksy są dostępne w innych lokalizacjach.
Przeanalizujmy, jak realizowana jest usługa przekazywania tras między obszarami przez ISP. Ze względu na niemożliwość utrzymania tysięcy różnych instancji OSPF w sieci, wszystkie otrzymane trasy są redystrybuowane do MP-BGP, a następnie ponownie przekazywane do OSPF. W wyniku tego trasy z jednego obszaru są widoczne w drugim jako zewnętrzne. Co jednak zrobić, gdy taki stan nie odpowiada nam i chcemy widzieć wszystkie nasze prefiksy z różnych lokalizacji w ramach jednej instancji OSPF?
W takim przypadku dostawcy potrzebna jest odpowiednia konfiguracja identyfikatora domeny.

Jeżeli wartości domain-id na routerach brzegowych ISP są identyczne, mówimy o superbackbone. Trasy przekazywane z MP-BGP z tego obszaru do naszego obszaru 0 będą traktowane jako interarea, a nie jako zewnętrzne.
Router-ID musi być identyczny jak w BGP
Kiedy na jednym urządzeniu mamy uruchomione zarówno protokoły BGP, jak i OSPF, identyfikator routera (router-id) w obu instancjach musi być taki sam. Jest to bardzo subtelny przypadek, ponieważ bardzo łatwo przeoczyć błędy w konfiguracji. W poniższym przykładzie pokazana jest konfiguracja routerów R3 i ISP-1. Zwróć szczególną uwagę na to, jakie prefiksy są widoczne w obu tabelach routingu.

R3#show run
interface GigabitEthernet0/3
ip address 10.3.13.3 255.255.255.0
!
router ospf 1
router-id 3.3.3.3
redistribute bgp 6499 subnets
network 2.2.2.0 0.0.0.255 area 0
network 3.3.3.0 0.0.0.255 area 0
network 10.2.3.0 0.0.0.255 area 0
network 10.3.4.0 0.0.0.255 area 0
!
router bgp 6499
bgp router-id 99.99.99.99
bgp log-neighbor-changes
neighbor 10.3.13.133 remote-as 6500
address-family ipv4
redistribute ospf 1 metric 10
neighbor 10.3.13.133 activate
exit-address-familyR3#show ip route
O*E2 0.0.0.0/0 [110/1] via 10.3.4.4, 00:18:43, GigabitEthernet0/0
[110/1] via 10.2.3.2, 00:18:43, GigabitEthernet0/1
1.0.0.0/32 is subnetted, 1 subnets
O 1.1.1.1 [110/3] via 10.3.4.4, 00:18:43, GigabitEthernet0/0
[110/3] via 10.2.3.2, 00:18:43, GigabitEthernet0/1
2.0.0.0/32 is subnetted, 1 subnets
O 2.2.2.2 [110/2] via 10.2.3.2, 00:18:43, GigabitEthernet0/1
3.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 3.3.3.0/24 is directly connected, Loopback0
L 3.3.3.3/32 is directly connected, Loopback0
4.0.0.0/32 is subnetted, 1 subnets
O 4.4.4.4 [110/2] via 10.3.4.4, 00:18:43, GigabitEthernet0/0
5.0.0.0/24 is subnetted, 1 subnets
O E2 5.5.5.0 [110/120] via 10.3.4.4, 00:18:43, GigabitEthernet0/0
[110/120] via 10.2.3.2, 00:18:43, GigabitEthernet0/1
8.0.0.0/32 is subnetted, 1 subnets
O E2 10.0.0.0/8 [110/120] via 10.3.4.4, 00:18:43, GigabitEthernet0/0
[110/120] via 10.2.3.2, 00:18:43, GigabitEthernet0/1
O 10.1.2.0/24 [110/2] via 10.2.3.2, 00:18:43, GigabitEthernet0/1
O 10.1.4.0/24 [110/2] via 10.3.4.4, 00:18:43, GigabitEthernet0/0
C 10.2.3.0/24 is directly connected, GigabitEthernet0/1
L 10.2.3.3/32 is directly connected, GigabitEthernet0/1
C 10.3.4.0/24 is directly connected, GigabitEthernet0/0
L 10.3.4.3/32 is directly connected, GigabitEthernet0/0
C 10.3.13.0/24 is directly connected, GigabitEthernet0/3
L 10.3.13.3/32 is directly connected, GigabitEthernet0/3
100.0.0.0/32 is subnetted, 1 subnets
B 100.100.100.100 [20/10] via 10.3.13.133, 00:23:13
101.0.0.0/32 is subnetted, 1 subnets
B 101.101.101.101 [20/10] via 10.3.13.133, 00:23:13
172.1.0.0/24 is subnetted, 1 subnets
O E2 172.1.5.0 [110/120] via 10.3.4.4, 00:18:43, GigabitEthernet0/0
[110/120] via 10.2.3.2, 00:18:43, GigabitEthernet0/1ISP-1#show run
interface Loopback0
ip address 100.100.100.100 255.255.255.255
!
interface Loopback1
ip address 101.101.101.101 255.255.255.255
!
interface GigabitEthernet0/3
ip address 10.3.13.133 255.255.255.0
duplex auto
speed auto
media-type rj45
!
router bgp 6500
bgp log-neighbor-changes
neighbor 10.3.13.3 remote-as 6499
!
address-family ipv4
redistribute connected metric 10
neighbor 10.3.13.3 activate
exit-address-familyISP-1#show ip route
1.0.0.0/32 is subnetted, 1 subnets
B 1.1.1.1 [20/10] via 10.3.13.3, 00:22:28
2.0.0.0/32 is subnetted, 1 subnets
B 2.2.2.2 [20/10] via 10.3.13.3, 00:22:28
3.0.0.0/24 is subnetted, 1 subnets
B 3.3.3.0 [20/0] via 10.3.13.3, 00:27:55
4.0.0.0/32 is subnetted, 1 subnets
B 4.4.4.4 [20/10] via 10.3.13.3, 00:22:28
10.0.0.0/8 is variably subnetted, 6 subnets, 2 masks
B 10.1.2.0/24 [20/10] via 10.3.13.3, 00:22:28
B 10.1.4.0/24 [20/10] via 10.3.13.3, 00:22:28
B 10.2.3.0/24 [20/0] via 10.3.13.3, 00:27:55
B 10.3.4.0/24 [20/0] via 10.3.13.3, 00:27:55
C 10.3.13.0/24 is directly connected, GigabitEthernet0/3
L 10.3.13.133/32 is directly connected, GigabitEthernet0/3
100.0.0.0/32 is subnetted, 1 subnets
C 100.100.100.100 is directly connected, Loopback0
101.0.0.0/32 is subnetted, 1 subnets
C 101.101.101.101 is directly connected, Loopback1Na pierwszy rzut oka wszystko wydaje się być w porządku z obu stron. Prefixy zostały wymienione poprzez BGP w obu kierunkach. Jednak po dokładniejszym porównaniu tablic, zauważalne jest brakujące trasy. Konkretnie brakuje nam tras, które były widoczne w OSPF jako trasy nauczone z innego protokołu.
Podsumowanie
Omówiliśmy 5 przypadków, w których zachowanie OSPF lub jego konfiguracja nie były całkowicie oczywiste. Czy znasz wszystkie te przypadki? Może masz znajomość innych nieoczywistych zachowań OSPF-a? Koniecznie podziel się nimi w komentarzu!