Layer-3-Overlay-Unterstützung in cRPD
Überblick
Virtual Routing and Forwarding (VRF)-Instanzen werden in cRPD zusammen mit der Unterstützung von MPLS und Multiprotocol BGP unterstützt, um Overlay-Funktionen bereitzustellen.
Eine Routing-Instanz ist eine Sammlung von Routing-Tabellen, Schnittstellen und Routing-Protokollparametern. Um Layer 3-VPNs zu implementieren, konfigurieren Sie für jedes VPN eine Routing-Instanz. Ein VRF ist ein Netzwerkgerät im Linux-Kernel und das Gerät ist mit table-id. Sie konfigurieren die Routing-Instanzen nur auf PE-Routern. Sie können VRFs im Linux-Netzwerk erstellen. Die Implementierung von VRF-Geräten wirkt sich nur auf Layer 3 und höher aus. Jede VPN-Routing-Instanz besteht aus den folgenden Komponenten:
VRF-Tabelle: Auf jedem PE-Router konfigurieren Sie eine VRF-Tabelle für jedes VPN.
Richtlinienregeln: Diese steuern den Import von Routen in die VRF-Tabelle und den Export von Routen aus der VRF-Tabelle.
Ein oder mehrere Routing-Protokolle, die Routen von CE-Routern in die VRF-Tabelle installieren: Sie können die BGP-, OSPF- und RIP-Routing-Protokolle sowie statische Routen verwenden.
Wenn ein VRF-Gerät erstellt wird, wird es einer Routing-Tabelle zugeordnet. Pakete, die über versklavte Geräte im VRF eingehen, werden in der Routing-Tabelle nachgeschlagen, die dem VRF-Gerät zugeordnet ist. In ähnlicher Weise werden ausgehende Routingregeln verwendet, um Pakete an den VRF-Treiber zu senden, bevor sie an die eigentliche Schnittstelle gesendet werden.
VRF wird verwendet, um Routen zu verwalten und Datenverkehr basierend auf unabhängigen Weiterleitungstabellen in VRF weiterzuleiten. RPD erstellt mehrere Routing-Tabellen für jede Routing-Instanz des Typs vrf. Die Tabellen sind eine für jede Familienadresse. Sie müssen eine Routinginstanz für jedes VPN auf jedem der PE-Router konfigurieren, die am VPN teilnehmen. Sie können Routinginstanzen mithilfe der [edit routing-instances] Hierarchie konfigurieren. Die Routinginstanz des Typs vrf wird nur unter cRPD unterstützt.
Sie können mehrere Instanzen von BFD, BGP, IS-IS, OSPF Version 2 (als OSPF bezeichnet), OSPF Version 3 (OSPFv3) und ICMP-Routererkennung unter einem VRF mithilfe der [edit routing-instances routing-instance-name protocols] Hierarchie erstellen. Sie können das protokollunabhängige Routing mithilfe der edit routing-instances instance-name routing-options Hierarchie konfigurieren.
Layer-3-Overlay unterstützt die folgenden Tunneling-Protokolle in cRPD:
Statische Routen in inet.3
Unicast mit BGP-Bezeichnung
GRE-Tunneling
Statische MPLS-LSPs
Routen, die mit programmierbaren-rpd-APIs programmiert wurden
direct-ebgp-Peering auf MPLS-fähiger Schnittstelle
Konfigurieren von Schnittstellen unter einem VRF
Die Versklavung von Geräten erfolgt durch RPD, d.h. Schnittstellen, die unter der Routing-Instanz konfiguriert sind, werden von RPD über eine an den Kernel gesendete Netlink-Nachricht auf das vrf-Gerät migriert (versklavt).
Wenn eine Schnittstelle unter der Routing-Instanz des Typs vrfkonfiguriert ist, sendet RPD eine Netlink-Benachrichtigung, um die Verbindung zu versklaven, wenn eine solche Verbindung vom Kernel gelernt wurde und die Verbindung nicht mit der richtigen Tabelle verknüpft ist. Wenn der Link nicht existiert oder RPD nichts über den Link erfahren hat, wird der Link basierend auf der Konfiguration korrekt versklavt, wenn der Link erstellt wird oder RPD davon erfährt.
Beispiel: Konfigurieren von Layer 3-VPN (VRF) auf einer cRPD-Instanz
Dieses Beispiel zeigt die VPNv4-Routenauflösung auf PE-Routern und Routenreflektoren durch Konfigurieren der PE-Router mit spezifischen Richtlinien, um den Import von Routen in und den Export von Routen aus der VRF-Tabelle zu steuern, sowie mit Next Hops, die mithilfe von Unicast mit BGP-Bezeichnung erlernt werden. In diesem Beispiel fließt der Datenverkehr von CE1 zu CE2.
Anforderungen
In diesem Beispiel werden die folgenden Hardware- und Softwarekomponenten verwendet:
-
Ubuntu Softwareversion 18.04
-
Linux-Kernel-Version 4.5 oder höher
-
cRPD-Software Release-Version 19.4R1 oder höher
Bevor Sie ein Layer 3-VPN (VRF) konfigurieren, müssen Sie die grundlegenden Komponenten installieren:
-
MPLS-Module auf dem Hostbetriebssystem, auf dem die cRPD-Instanz erstellt wird. Weitere Informationen finden Sie unter Konfigurieren von Einstellungen unter Host OS.
-
Provider-Edge-Router (PE1), ein Provider-Router (P) und Provider-Edge-Router (PE2). Informationen zur Installation finden Sie unter Installieren von cRPD auf Docker.
Überblick
Um die VPNv4-Routenauflösung zu konfigurieren, müssen Sie für jedes VPN auf jedem der am VPN beteiligten PE-Router eine Routinginstanz vom Typ VRF konfigurieren und ihr statische Routen hinzufügen. Die static Anweisung konfiguriert die statischen Routen, die in der vrfblue.inet.0 Routing-Tabelle installiert sind. Es gibt keine Loopback-Schnittstelle oder kein Gerät für jedes VRF-Gerät, das im Linux-Kernel erstellt wird. Die Loopback-Hostadressen werden jedoch direkt zum VRF-Gerät hinzugefügt, was von RPD gelernt werden kann.
Topologie
Abbildung 1 zeigt die Layer-3-VPN-Topologie (VRF)
Konfiguration
- Konfigurieren von PE1-Router mit BGP LU
- Konfiguration eines P-Routers mit BGP-LU
- Konfigurieren eines PE2-Routers mit BGP LU
Konfigurieren von PE1-Router mit BGP LU
Schritt-für-Schritt-Anleitung
Im folgenden Beispiel müssen Sie durch verschiedene Ebenen in der Konfigurationshierarchie navigieren.
-
Erstellen Sie die Tabelle mpls.0.
user@crpd1# set routing-options rib mpls.0 -
Konfigurieren Sie eine Richtlinie, die Routen akzeptiert.
[edit policy-options policy-statement] user@crpd1# set EXPORT_LO term 10 from route-filter 10.2.2.2/32 exact user@crpd1# set EXPORT_LO term 10 then accept user@crpd1# set NH_SELF term 10 then next-hop self -
Konfigurieren Sie eine VRF-Routing-Instanz für PE1 und andere Routing-Instanzparameter.
[edit routing-instances vrfblue] user@crpd1# set routing-options static route 10.1.1.1/32 next-hop 10.10.10.1 user@crpd1# set instance-type vrf user@crpd1# set route-distinguisher 100:100 user@crpd1# set vrf-target target:100:100 -
Konfigurieren Sie die Router-ID.
user@crpd1# set routing-options router-id 10.2.2.2 -
Konfigurieren Sie die BGP-Sitzung.
[edit protocols bgp group] user@crpd1# set underlay type external family inet unicast user@crpd1# set underlay type external export EXPORT_LO neighbor 10.20.20.3 family inet labeled-unicast resolve-vpn user@crpd1# set underlay type external export EXPORT_LO neighbor 10.20.20.3 peer-as 65002 local-as 65001 user@crpd1# set VPN type internal local-address 10.2.2.2 family inet-vpn unicast user@crpd1# set VPN local-as 65005 user@crpd1# set VPN neighbor 10.4.4.4 family inet-vpn unicast -
Konfigurieren Sie die Schnittstelle auf MPLS.
user@crpd1# set protocols mpls interface all
Befund
Bestätigen Sie im Konfigurationsmodus Ihre Konfiguration, indem Sie die show protocols bgp Befehle und show routing-instances eingeben. Wenn in der Ausgabe nicht die beabsichtigte Konfiguration angezeigt wird, wiederholen Sie die Konfigurationsanweisungen in diesem Beispiel, um sie zu korrigieren.
user@crpd1# show routing-instances
vrfblue {
routing-options {
static {
route 10.1.1.1/32 next-hop 10.10.10.1;
}
}
instance-type vrf;
route-distinguisher 100:100;
vrf-target target:100:100;
}
user@crpd1# show protocols bgp
group underlay {
type external;
family inet {
unicast;
}
export EXPORT_LO;
neighbor 10.20.20.3 {
family inet {
labeled-unicast {
resolve-vpn;
}
}
peer-as 65002;
local-as 65001;
}
neighbor 10.20.20.2 {
family inet {
labeled-unicast {
resolve-vpn;
}
}
peer-as 65001;
local-as 65002;
}
neighbor 10.30.30.4 {
family inet {
labeled-unicast {
resolve-vpn;
}
}
peer-as 65003;
local-as 65004;
}
}
group VPN {
type internal;
local-address 10.2.2.2;
family inet-vpn {
unicast;
}
local-as 65005;
neighbor 10.4.4.4 {
family inet-vpn {
unicast;
}
}
}
Wenn Sie mit der Konfiguration des Geräts fertig sind, wechseln Sie in den Konfigurationsmodus.
Konfiguration eines P-Routers mit BGP-LU
Schritt-für-Schritt-Anleitung
Im folgenden Beispiel müssen Sie durch verschiedene Ebenen in der Konfigurationshierarchie navigieren.
-
Erstellen Sie die Tabelle mpls.0.
user@crpd2# set routing-options rib mpls.0 -
Konfigurieren Sie eine Richtlinie, die Routen akzeptiert.
[edit policy-options policy-statement] user@crpd2# set EXPORT_LO term 10 from route-filter 10.3.3.3/32 exact user@crpd2# set EXPORT_LO term 10 then accept user@crpd2# set NH_SELF term 10 then next-hop self -
Konfigurieren Sie die BGP-Sitzung.
[edit protocols bgp group] user@crpd2# set underlay type external export EXPORT_LO neighbor 10.20.20.2 family inet labeled-unicast resolve-vpn user@crpd2# set underlay type external export EXPORT_LO neighbor 10.20.20.2 peer-as 65001 user@crpd2# set underlay type external export EXPORT_LO neighbor 10.20.20.2 local-as 65002 user@crpd2# set underlay type external export EXPORT_LO neighbor 10.30.30.4 family inet labeled-unicast resolve-vpn user@crpd2# set underlay type external export EXPORT_LO neighbor 10.30.30.4 peer-as 65003 user@crpd2# set underlay type external export EXPORT_LO neighbor 10.30.30.4 local-as 65004 -
Konfigurieren Sie die Router-ID.
user@crpd2# set routing-options router-id 10.3.3.3 -
Konfigurieren Sie die Schnittstelle auf MPLS.
user@crpd2# set protocols mpls interface all
Befund
Bestätigen Sie im Konfigurationsmodus Ihre Konfiguration, indem Sie die show protocols bgp Befehle und show policy-options eingeben. Wenn in der Ausgabe nicht die beabsichtigte Konfiguration angezeigt wird, wiederholen Sie die Anweisungen in diesem Beispiel, um die Konfiguration zu korrigieren.
user@crpd2# show protocols bgp
group underlay {
type external;
export EXPORT_LO;
neighbor 10.20.20.2 {
family inet {
labeled-unicast {
resolve-vpn;
}
}
peer-as 65001;
local-as 65002;
}
neighbor 10.30.30.4 {
family inet {
labeled-unicast {
resolve-vpn;
}
}
peer-as 65003;
local-as 65004;
}
}
user@crpd2# show policy-options
policy-statement EXPORT_LO {
term 10 {
from {
route-filter 10.3.3.3/32 exact;
}
then accept;
}
}
policy-statement NH_SELF {
term 10 {
then {
next-hop self;
}
}
}
Konfigurieren eines PE2-Routers mit BGP LU
Schritt-für-Schritt-Anleitung
Im folgenden Beispiel müssen Sie durch verschiedene Ebenen in der Konfigurationshierarchie navigieren.
-
Erstellen Sie die Tabelle mpls.0.
user@crpd3# set routing-options rib mpls.0 -
Konfigurieren Sie eine Richtlinie, die Routen akzeptiert.
[edit policy-options policy-statement] user@crpd3# set EXPORT_LO term 10 from route-filter 10.4.4.4/32 exact user@crpd3# set EXPORT_LO term 10 then accept user@crpd3# set NH_SELF term 10 then next-hop self -
Konfigurieren Sie eine VRF-Routing-Instanz für PE2 und andere Routing-Instanzparameter.
[edit routing-instances vrfblue] user@crpd3# set routing-options static route 10.5.5.5/32 next-hop 10.40.40.5 user@crpd3# set instance-type vrf user@crpd3# set route-distinguisher 100:100 user@crpd3# set vrf-target target:100:100 user@crpd3# set interface all -
Konfigurieren Sie die BGP-Sitzung.
[edit protocols bgp group] user@crpd3# set underlay type external export EXPORT_LO neighbor 10.30.30.3 family inet labeled-unicast resolve-vpn user@crpd3# set underlay type external export EXPORT_LO neighbor 10.30.30.3 peer-as 65004 user@crpd3# set underlay type external export EXPORT_LO neighbor 10.30.30.3 local-as 65003 user@crpd3# set VPN type internal local-address 10.4.4.4 family inet-vpn unicast user@crpd3# set VPN local-as 65005 user@crpd3# set VPN neighbor 10.2.2.2 family inet-vpn unicast -
Konfigurieren Sie die Router-ID.
user@crpd3# set routing-options router-id 10.4.4.4 -
Konfigurieren Sie die Schnittstelle auf MPLS.
user@crpd3# set protocols mpls interface all
Befund
Bestätigen Sie im Konfigurationsmodus Ihre Konfiguration, indem Sie die show protocols bgp Befehle und show routing-instances eingeben. Wenn in der Ausgabe nicht die beabsichtigte Konfiguration angezeigt wird, wiederholen Sie die Anweisungen in diesem Beispiel, um die Konfiguration zu korrigieren.
user@crpd3# show protocols bgp
group underlay {
export EXPORT_LO;
neighbor 10.30.30.3 {
family inet {
labeled-unicast {
resolve-vpn;
}
}
peer-as 65004;
local-as 65003;
}
}
group VPN {
type internal;
local-address 10.4.4.4;
family inet-vpn {
unicast;
}
local-as 65005;
neighbor 10.2.2.2 {
family inet-vpn {
unicast;
}
}
}
user@crpd3# show routing-instances
vrfblue {
routing-options {
static {
route 10.5.5.5/32 next-hop 10.40.40.5;
}
}
interface all;
instance-type vrf;
route-distinguisher 100:100;
vrf-target target:100:100;
}
Verifizierung
- Überprüfen der VPNv4-Auflösung auf PE1
- Überprüfen von BGP LU auf P
- Überprüfen der VPNv4-Auflösung auf PE2
Überprüfen der VPNv4-Auflösung auf PE1
Zweck
So überprüfen Sie VPNv4-Routen auf PE1:
Aktion
Geben Sie im Betriebsmodus den show route table vrfblue.inet.0 10.5.5.5 folgenden Befehl ein:
user@crpd1> show route table vrfblue.inet.0 10.5.5.5
vrfblue.inet.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
10.5.5.5/32 *[BGP/170] 00:00:14, localpref 100, from 10.4.4.4
AS path: I, validation-state: unverified
> to 10.20.20.3 via pe1-p, Push 299808, Push 299792(top)
Geben Sie im Betriebsmodus den show route table mpls.0 folgenden Befehl ein:
user@crpd1> show route table mpls.0
mpls.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
299808 *[VPN/170] 00:01:45
> to 10.10.10.1 via pe1-ce1, Pop
299808(S=0) *[VPN/170] 00:01:45
> to 10.10.10.1 via pe1-ce1, Pop
299824 *[VPN/170] 00:01:45
receive table vrfblue.inet.0, Pop
Geben Sie im Bash-Modus den ip route list table 5 5.5.5.5 folgenden Befehl ein:
user@crpd1> ip route list table 5 10.5.5.5
10.5.5.5 encap mpls 299792/299808 via 10.20.20.3 dev pe1-p proto 22
Geben Sie im Bash-Modus den ip -f mpls route folgenden Befehl ein:
user@crpd1> ip -f mpls route
299808 via inet 10.10.10.1 dev pe1-ce1 proto 22
Bedeutung
Sie können anzeigen, dass PE1 eine Route unter vrfblue.inet.0 CE2 hat, die von PE2 mit nexthop 10.4.4.4 gelernt und mithilfe von BGP LU vom P-Router aufgelöst wird.
Überprüfen von BGP LU auf P
Zweck
So überprüfen Sie VPNv4-Routen auf P:
Aktion
Geben Sie im Bash-Modus den ip -f mpls route show folgenden Befehl ein:
user@crpd2> ip -f mpls route show
299776 via inet 10.20.20.2 dev p-pe1 proto 22 299792 via inet 10.30.30.4 dev p-pe2 proto 22
Geben Sie im Betriebsmodus den show route table mpls.0 folgenden Befehl ein:
user@crpd2> show route table mpls.0
mpls.0: 8 destinations, 8 routes (8 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
0 *[MPLS/0] 01:40:42, metric 1
Receive
1 *[MPLS/0] 01:40:42, metric 1
Receive
2 *[MPLS/0] 01:40:42, metric 1
Receive
13 *[MPLS/0] 01:40:42, metric 1
Receive
299776 *[VPN/170] 01:19:24
> to 10.20.20.2 via p-pe1, Pop
299776(S=0) *[ VPN/170] 01:19:24
> to 10.20.20.2 via p-pe1, Pop
299792 *[VPN/170] 01:19:20
> to 10.30.30.4 via p-pe2, Pop
299792(S=0) *[VPN/170] 01:19:20
> to 10.30.30.4 via p-pe2, Pop
Bedeutung
Sie können die MPLS- und VPN-Routen von P zu PE1 und von P zu PE2 anzeigen.
Überprüfen der VPNv4-Auflösung auf PE2
Zweck
So überprüfen Sie VPNv4-Routen auf PE2:
Aktion
Geben Sie im Betriebsmodus den show route table vrfblue.inet.0 10.1.1.1 folgenden Befehl ein:
user@crpd3> show route table vrfblue.inet.0 10.1.1.1
vrfblue.inet.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
10.1.1.1/32 *[BGP/170] 00:00:26, localpref 100, from 10.2.2.2
AS path: I, validation-state: unverified
> to 10.30.30.3 via pe2-p, Push 299808, Push 299776(top)
Geben Sie im Betriebsmodus den show route table mpls.0 folgenden Befehl ein:
user@crpd3> show route table mpls.0
mpls.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
0 *[MPLS/0] 01:34:39, metric 1
Receive
1 *[MPLS/0] 01:34:39, metric 1
Receive
2 *[MPLS/0] 01:34:39, metric 1
Receive
13 *[MPLS/0] 01:34:39, metric 1
Receive
299808 *[VPN/170] 00:00:43
> to 10.40.40.5 via pe2-ce2, Pop
299808(S=0) *[VPN/170] 00:00:43
> to 10.40.40.5 via pe2-ce2, Pop
299824 *[VPN/170] 00:00:43
receive table vrfblue.inet.0, Pop
Geben Sie im Bash-Modus den ip route list table 5 10.1.1.1 folgenden Befehl ein:
user@crpd3> ip route list table 5 10.1.1.1
10.1.1.1 encap mpls 299776/299808 via 10.30.30.3 dev pe2-p proto 22
Geben Sie im Bash-Modus den ip -f mpls route folgenden Befehl ein:
user@crpd3> ip -f mpls route
299808 via inet 10.40.40.5 dev pe2-ce2 proto 22
Bedeutung
Auf dem PE2-Router zeigt PE1 die Routen für die VRF-Tabelle vrfblue.inet.0 unter Verwendung von BGP LU etwa 10.1.1.1 als VPNv4-Präfix mit nexthop als 10.2.2.2 an.