Startseite MPLS - grobe Basics
Eintrag
Abbrechen

MPLS - grobe Basics

Wenn ISPs Kunden miteinander verbinden, wird meistens Multi Protocol Label Switching verwendet. Die Technik basiert auf “Labels”. Pakete werden nicht mehr an Hand von Routinginformationen versendet, sondern an Hand von Labels. Labels werden automatisch generiert und können sich im Laufe der Zeit wieder verändern. Das ist nicht weiter tragisch. MPLS alleine bringt nicht wirklich viel. Spannend wird die Geschichte erst in Verbund mit “VPN”. MPLS-VPN auf Layer 3 bringen dem Konstrukt erst Sinn. MPLS kann so ziemlich jedes Protokoll tunneln. Ob das für jedes Protokoll Sinn ergibt sei dahingestellt.

Um MPLS benutzen zu können, muss der Provider entsprechende Hardware bereitstellen und ein “MPLS-Backbone” betreiben.

Im Folgenden wird ein sehr kleines Beispiel-MPLS-Backbone konfiguriert. Die Konfiguration basiert auf Cisco Hardware und entsprechender Syntax. Die Label werden über Loopback-Interfaces versendet, daher ist es wichtig, dass diese Adressen für die MPLS-Systeme erreichbar sind. Der Aufbau sieht im groben so aus:

Netzwerkplan

Im ersten Schritt wird für Konnektivität gesorgt, d. h. IP-Adressen und Loopbacks werden konfiguriert. IP-Adressen wurden an Hand von privaten IPv4 Adressen gewählt. Ich gehe davon aus, dass jeder weiß, wie das geht. Exemplarisch für den ISPE1-Router:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
interface GigabitEthernet0/0
 description ->CE-B1
 ip address 172.16.22.1 255.255.255.128
 !
end

interface GigabitEthernet1/0
 description ->CE-A1
 ip address 172.16.11.1 255.255.255.128
 !
end

interface GigabitEthernet2/0
 description ->ISP1
 ip address 192.168.0.1 255.255.255.252
 !
end

interface Loopback0
 ip address 192.168.1.1 255.255.255.255
 !
end

Die ISP-Router sind untereinander jeweils mit einem Transitnetz verbunden (/30). Das Ganze muss mit IPv4 eingerichtet werden, da das LDP-Protokoll noch kein IPv6 nativ versteht.

Anschließen erfolgt das Routing durch ein geeignetes Routingprotokoll im Provider Netz. Es gibt hier diverse Möglichkeiten, im Beispiel ist ein klassisches OSPF konfiguriert. Das OSPF ist “out-of-the-box”, keine Filter, kein Area-Design, keine Passwörter, nur network-Statements. Wir gehen davon aus, dass wir die private AS-Nummer “65520” benutzen.

Beispiel am Router “ISPE1”:

1
2
3
4
5
6
router ospf 65520
 log-adjacency-changes
 network 172.16.11.0 0.0.0.255 area 0
 network 172.16.22.0 0.0.0.255 area 0
 network 192.168.0.0 0.0.0.255 area 0
 network 192.168.1.1 0.0.0.255 area 0

Beispiel am Router “ISP1”:

1
2
3
4
router ospf 65520
 log-adjacency-changes
 network 192.168.0.0 0.0.0.255 area 0
 network 192.168.1.0 0.0.0.255 area 0

Anschließend kann ein ping vom Loopback0 des ISPE1 auf Loopback0 des ISPE2 getestet werden:

1
2
3
4
5
6
7
PE1#ping 192.168.1.4 source lo0

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.4, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 168/249/364 ms

Sobald alle Loopbacks erreichbar sind, wird MPLS konfiguriert. MPLS wird nur auf Interfaces eingerichtet, die zum Backbone “zeigen”. Facing-Customer-Interfaces bekommen keine MPLS-Konfiguration.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
ISPE1(config)#mpls ldp router-id lo0
ISPE1(config)#mpls label protocol ldp
ISPE1(config)#ip cef
ISPE1(config)#int g2/0
ISPE1(config-if)#mpls ip

ISP1(config)#mpls ldp router-id lo0
ISP1(config)#mpls label protocol ldp
ISP1(config)#ip cef
ISP1(config)#int g0/0
ISP1(config-if)#mpls ip
ISP1(config-if)#int g1/0
ISP1(config-if)#mpls ip
*May 25 20:39:10.727: %LDP-5-NBRCHG: LDP Neighbor 192.168.1.2:0 (1) is UP
ISP2(config)#mpls ldp router-id lo0
ISP2(config)#mpls label protocol ldp
ISP2(config)#ip cef
ISP2(config)#int g0/0
ISP2(config-if)#mpls ip
ISP2(config-if)#int g1/0
ISP2(config-if)#mpls ip

*May 25 20:42:35.891: %LDP-5-NBRCHG: LDP Neighbor 192.168.1.3:0 (1) is UP
ISPE2(config)#mpls ldp router-id lo0
ISPE2(config)#mpls label protocol ldp
ISPE2(config)#ip cef
ISPE2(config)#int g2/0
ISPE2(config-if)#mpls ip
*May 25 20:46:38.939: %LDP-5-NBRCHG: LDP Neighbor 192.168.1.4:0 (1) is UP

Damit ist MPLS konfiguriert. Pakete werden jetzt an Hand von Labels geroutet. Sinn macht das derzeit noch nicht.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
ISP1#sh mpls forwarding-table
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
16         Pop Label  192.168.1.3/32   0             Gi1/0      192.168.0.6
17         Pop Label  192.168.1.1/32   0             Gi0/0      192.168.0.1
18         Pop Label  172.16.22.0/25   0             Gi0/0      192.168.0.1
19         Pop Label  172.16.11.0/25   0             Gi0/0      192.168.0.1
20         Pop Label  192.168.0.8/30   0             Gi1/0      192.168.0.6
21         16         192.168.1.4/32   0             Gi1/0      192.168.0.6
22         19         172.16.22.128/25 0             Gi1/0      192.168.0.6
23         21         172.16.11.128/25 0             Gi1/0      192.168.0.6


ISP1#sh mpls ldp neighbor
    Peer LDP Ident: 192.168.1.1:0; Local LDP Ident 192.168.1.2:0
        TCP connection: 192.168.1.1.646 - 192.168.1.2.51986
        State: Oper; Msgs sent/rcvd: 15/15; Downstream
        Up time: 00:00:55
        LDP discovery sources:
          GigabitEthernet0/0, Src IP addr: 192.168.0.1
        Addresses bound to peer LDP Ident:
          172.16.22.1     172.16.11.1     192.168.0.1     192.168.1.1
    Peer LDP Ident: 192.168.1.3:0; Local LDP Ident 192.168.1.2:0
        TCP connection: 192.168.1.3.53167 - 192.168.1.2.646
        State: Oper; Msgs sent/rcvd: 15/15; Downstream
        Up time: 00:00:54
        LDP discovery sources:
          GigabitEthernet1/0, Src IP addr: 192.168.0.6
        Addresses bound to peer LDP Ident:
          192.168.0.9     192.168.1.3     192.168.0.6

Damit steht die Infrastruktur. Dies ist lediglich ein Beispiel. Für eventuell auftretende Schäden bin ich nicht verantwortlich, jeder konfiguriert auf eigene Gefahr.