VxLAN fabriek. Deel 1

Hallo habr. Ek is tans die kursusleier vir "Netwerkingenieur" by OTUS.
In afwagting van die begin van 'n nuwe inskrywing vir die kursus "Netwerkingenieur", Ek het 'n reeks artikels oor VxLAN EVPN-tegnologie voorberei.

Daar is 'n groot hoeveelheid materiaal oor die werking van VxLAN EVPN, so ek wil verskeie take en praktyke vir die oplossing van probleme in 'n moderne datasentrum versamel.

VxLAN fabriek. Deel 1

In die eerste deel van die VxLAN EVPN-tegnologiesiklus wil ek 'n manier oorweeg om L2-konneksie tussen gashere bo-op 'n netwerkfabriek te organiseer.

Alle voorbeelde sal uitgevoer word op Cisco Nexus 9000v, saamgestel in die Spine-Leaf-topologie. Ons sal nie in hierdie artikel stilstaan ​​by die opstel van die onderlaagnetwerk nie.

  1. Onderlaag netwerk
  2. BGP loer vir adres-familie l2vpn evpn
  3. NVE opstelling
  4. Onderdruk-arp

Onderlaag netwerk

Die topologie wat gebruik word is soos volg:

VxLAN fabriek. Deel 1

Kom ons stel adressering op alle toestelle:

Spine-1 - 10.255.1.101
Spine-2 - 10.255.1.102

Leaf-11 - 10.255.1.11
Leaf-12 - 10.255.1.12
Leaf-21 - 10.255.1.21

Host-1 - 192.168.10.10
Host-2 - 192.168.10.20

Kom ons kyk of daar IP-verbinding tussen alle toestelle is:

Leaf21# sh ip route
<........>
10.255.1.11/32, ubest/mbest: 2/0                      ! Leaf-11 доступСн Ρ‡Π΅Π΅Ρ€Π· Π΄Π²Π° Spine
    *via 10.255.1.101, Eth1/4, [110/81], 00:00:03, ospf-UNDERLAY, intra
    *via 10.255.1.102, Eth1/3, [110/81], 00:00:03, ospf-UNDERLAY, intra
10.255.1.12/32, ubest/mbest: 2/0                      ! Leaf-12 доступСн Ρ‡Π΅Π΅Ρ€Π· Π΄Π²Π° Spine
    *via 10.255.1.101, Eth1/4, [110/81], 00:00:03, ospf-UNDERLAY, intra
    *via 10.255.1.102, Eth1/3, [110/81], 00:00:03, ospf-UNDERLAY, intra
10.255.1.21/32, ubest/mbest: 2/0, attached
    *via 10.255.1.22, Lo0, [0/0], 00:02:20, local
    *via 10.255.1.22, Lo0, [0/0], 00:02:20, direct
10.255.1.101/32, ubest/mbest: 1/0
    *via 10.255.1.101, Eth1/4, [110/41], 00:00:06, ospf-UNDERLAY, intra
10.255.1.102/32, ubest/mbest: 1/0
    *via 10.255.1.102, Eth1/3, [110/41], 00:00:03, ospf-UNDERLAY, intra

Kom ons kyk of die VPC-domein geskep is en beide skakelaars die konsekwentheidskontrole geslaag het en die instellings op beide nodusse is identies:

Leaf11# show vpc 

vPC domain id                     : 1
Peer status                       : peer adjacency formed ok
vPC keep-alive status             : peer is alive
Configuration consistency status  : success
Per-vlan consistency status       : success
Type-2 consistency status         : success
vPC role                          : primary
Number of vPCs configured         : 0
Peer Gateway                      : Disabled
Dual-active excluded VLANs        : -
Graceful Consistency Check        : Enabled
Auto-recovery status              : Disabled
Delay-restore status              : Timer is off.(timeout = 30s)
Delay-restore SVI status          : Timer is off.(timeout = 10s)
Operational Layer3 Peer-router    : Disabled

vPC status
----------------------------------------------------------------------------
Id    Port          Status Consistency Reason                Active vlans
--    ------------  ------ ----------- ------                ---------------
5     Po5           up     success     success               1

BGP loer

Uiteindelik kan ons voortgaan met die opstel van die Overlay-netwerk.

As deel van die artikel is dit nodig om 'n netwerk tussen gashere te organiseer, soos getoon in die diagram hieronder:

VxLAN fabriek. Deel 1

Om 'n Overlay-netwerk te konfigureer, moet jy BGP op die Spine- en Leaf-skakelaars aktiveer met ondersteuning vir die l2vpn evpn-familie:

feature bgp
nv overlay evpn

Vervolgens moet u BGP-loer tussen blaar en ruggraat instel. Om die konfigurasie te vereenvoudig en die verspreiding van roete-inligting te optimaliseer, stel ons Spine op as 'n Route-Reflector-bediener. Ons sal alle Leaf in die konfigurasie deur sjablone skryf om die instelling te optimaliseer.

So die instellings op Spine lyk soos volg:

router bgp 65001
  template peer LEAF 
    remote-as 65001
    update-source loopback0
    address-family l2vpn evpn
      send-community
      send-community extended
      route-reflector-client
  neighbor 10.255.1.11
    inherit peer LEAF
  neighbor 10.255.1.12
    inherit peer LEAF
  neighbor 10.255.1.21
    inherit peer LEAF

Die opstelling op die Leaf-skakelaar lyk soortgelyk:

router bgp 65001
  template peer SPINE
    remote-as 65001
    update-source loopback0
    address-family l2vpn evpn
      send-community
      send-community extended
  neighbor 10.255.1.101
    inherit peer SPINE
  neighbor 10.255.1.102
    inherit peer SPINE

Op Spine, kontroleer loer met alle blaarskakelaars:

Spine1# sh bgp l2vpn evpn summary
<.....>
Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.255.1.11     4 65001       7       8        6    0    0 00:01:45 0
10.255.1.12     4 65001       7       7        6    0    0 00:01:16 0
10.255.1.21     4 65001       7       7        6    0    0 00:01:01 0

Soos u kan sien, was daar geen probleme met BGP nie. Kom ons gaan voort met die opstel van VxLAN. Verdere konfigurasie sal slegs aan die kant van die blaarskakelaars uitgevoer word. Spine tree slegs op as die kern van die netwerk en is slegs betrokke by die oordrag van verkeer. Alle werk op inkapseling en paddefinisie vind slegs op Blaarskakelaars plaas.

NVE opstelling

NVE - virtuele netwerkkoppelvlak

Voordat ons met die opstelling begin, laat ons 'n paar terminologie bekendstel:

VTEP - Vitual Tunnel End Point, die toestel waarop die VxLAN-tonnel begin of eindig. VTEP is nie noodwendig enige netwerktoestel nie. 'n Bediener wat VxLAN-tegnologie ondersteun, kan ook as 'n bediener optree. In ons topologie is alle blaarskakelaars VTEP.

VNI - Virtual Network Index - netwerk identifiseerder binne VxLAN. Jy kan 'n analogie met VLAN teken. Daar is egter 'n paar verskille. Wanneer 'n stof gebruik word, word VLAN's slegs uniek binne een blaarskakelaar en word nie oor die netwerk versend nie. Maar elke VLAN kan geassosieer word met 'n VNI-nommer wat reeds oor die netwerk versend is. Hoe dit lyk en hoe dit gebruik kan word, sal hieronder bespreek word.

Aktiveer die kenmerk vir VxLAN-tegnologie om te werk en die vermoΓ« om VLAN-nommers met 'n VNI-nommer te assosieer:

feature nv overlay
feature vn-segment-vlan-based

Kom ons stel die NVE-koppelvlak op, wat verantwoordelik is vir die werking van VxLAN. Hierdie koppelvlak is verantwoordelik vir die inkapseling van rame in VxLAN-opskrifte. Jy kan 'n analogie teken met die Tunnel-koppelvlak vir GRE:

interface nve1
  no shutdown
  host-reachability protocol bgp ! ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ BGP для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ
  source-interface loopback0    ! интСрфСйс  с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ отправляСм ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ loopback0

Op die Leaf-21 skakelaar word alles sonder probleme geskep. As ons egter die uitvoer van die opdrag nagaan show nve peers, dan sal dit leeg wees. Hier moet jy terugkeer na die VPC-opstelling. Ons sien dat Leaf-11 en Leaf-12 gepaar en verenig word deur 'n VPC-domein. Dit lei tot die volgende situasie:

Host-2 stuur een raam na Leaf-21 sodat dit dit oor die netwerk na Host-1 versend. Leaf-21 sien egter dat die MAC-adres van Host-1 toeganklik is deur twee VTEP's tegelyk. Wat moet Leaf-21 in hierdie geval doen? Dit beteken immers dat 'n lus in die netwerk kan verskyn.

Om hierdie situasie op te los, moet ons Leaf-11 en Leaf-12 ook as een toestel binne die fabriek optree. Dit word redelik eenvoudig opgelos. Voeg die sekondΓͺre adres by op die Loopback-koppelvlak waaruit ons die tonnel bou. SekondΓͺre adres moet dieselfde wees op beide VTEP's.

interface loopback0
 ip add 10.255.1.10/32 secondary

Dus, uit die oogpunt van ander VTEP's, kry ons die volgende topologie:

VxLAN fabriek. Deel 1

Dit wil sΓͺ, nou sal die tonnel gebou word tussen die IP-adres van Leaf-21 en die virtuele IP tussen twee Leaf-11 en Leaf-12. Nou sal daar geen probleme wees om die MAC-adres vanaf twee toestelle te leer nie, en verkeer kan van een VTEP na 'n ander oorgedra word. Watter van die twee VTEP's die verkeer sal verwerk, word besluit deur die roeteringtabel op Spine te gebruik:

Spine1# sh ip route
<.....>
10.255.1.10/32, ubest/mbest: 2/0
    *via 10.255.1.11, Eth1/1, [110/41], 1d01h, ospf-UNDERLAY, intra
    *via 10.255.1.12, Eth1/2, [110/41], 1d01h, ospf-UNDERLAY, intra
10.255.1.11/32, ubest/mbest: 1/0
    *via 10.255.1.11, Eth1/1, [110/41], 1d22h, ospf-UNDERLAY, intra
10.255.1.12/32, ubest/mbest: 1/0
    *via 10.255.1.12, Eth1/2, [110/41], 1d01h, ospf-UNDERLAY, intra

Soos u hierbo kan sien, is die adres 10.255.1.10 onmiddellik beskikbaar deur twee Next-hops.

Op hierdie stadium het ons die basiese konnektiwiteit hanteer. Kom ons gaan voort met die opstel van die NVE-koppelvlak:
Ons sal Vlan 10 onmiddellik aktiveer en dit assosieer met VNI 10000 op elke Blaar vir gashere. Stel 'n L2-tonnel tussen gashere op

vlan 10                 ! Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ VLAN Π½Π° всСх VTEP ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ хостам
  vn-segment 10000      ! АссоциируСм VLAN с Π½ΠΎΠΌΠ΅Ρ€ VNI 

interface nve1
  member vni 10000      ! ДобавляСм VNI 10000 для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‡Π΅Ρ€Π΅Π· интСрфСйс NVE. для инкапсуляции Π² VxLAN
    ingress-replication protocol bgp    ! ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ для распространСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ хостС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ BGP

Kom ons kyk nou na nve eweknieΓ« en tabel vir BGP EVPN:

Leaf21# sh nve peers
Interface Peer-IP          State LearnType Uptime   Router-Mac
--------- ---------------  ----- --------- -------- -----------------
nve1      10.255.1.10      Up    CP        00:00:41 n/a                 ! Π’ΠΈΠ΄ΠΈΠΌ Ρ‡Ρ‚ΠΎ peer доступСн с secondary адрСса

Leaf11# sh bgp l2vpn evpn

   Network            Next Hop            Metric     LocPrf     Weight Path
Route Distinguisher: 10.255.1.11:32777    (L2VNI 10000)        ! ΠžΡ‚ ΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΈΡˆΠ΅Π» этот l2VNI
*>l[3]:[0]:[32]:[10.255.1.10]/88                                   ! EVPN route-type 3 - ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ нашСго сосСда, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊ ΠΆΠ΅ Π·Π½Π°Π΅Ρ‚ ΠΎΠ± l2VNI10000
                      10.255.1.10                       100      32768 i
*>i[3]:[0]:[32]:[10.255.1.20]/88
                      10.255.1.20                       100          0 i
* i                   10.255.1.20                       100          0 i

Route Distinguisher: 10.255.1.21:32777
* i[3]:[0]:[32]:[10.255.1.20]/88
                      10.255.1.20                       100          0 i
*>i                   10.255.1.20                       100          0 i

Hierbo sien ons roetes slegs EVPN roete-tipe 3. Hierdie tipe roetes praat van eweknie (Leaf), maar waar is ons gashere?
Die ding is dat inligting oor die MAC-gashere via EVPN-roete-tipe 2 oorgedra word

Om ons gashere te sien, moet u EVPN-roete-tipe 2 instel:

evpn
  vni 10000 l2
    route-target import auto   ! Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ автоматичСский Π½ΠΎΠΌΠ΅Ρ€ для route-target
    route-target export auto

Kom ons ping van Host-2 na Host-1:

Firewall2# ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1): 56 data bytes
36 bytes from 192.168.10.2: Destination Host Unreachable
Request 0 timed out
64 bytes from 192.168.10.1: icmp_seq=1 ttl=254 time=215.555 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=254 time=38.756 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=254 time=42.484 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=254 time=40.983 ms

En hieronder kan ons sien dat roete-tipe 2 met gasheer MAC-adres in die BGP-tabel verskyn het - 5001.0007.0007 en 5001.0008.0007

Leaf11# sh bgp l2vpn evpn
<......>

   Network            Next Hop            Metric     LocPrf     Weight Path
Route Distinguisher: 10.255.1.11:32777    (L2VNI 10000)
*>l[2]:[0]:[0]:[48]:[5001.0007.0007]:[0]:[0.0.0.0]/216                      !  evpn route-type 2 ΠΈ mac адрСс хоста 1
                      10.255.1.10                       100      32768 i
*>i[2]:[0]:[0]:[48]:[5001.0008.0007]:[0]:[0.0.0.0]/216                      ! evpn route-type 2 ΠΈ mac адрСс хоста 2
* i                   10.255.1.20                       100          0 i
*>l[3]:[0]:[32]:[10.255.1.10]/88
                      10.255.1.10                       100      32768 i
Route Distinguisher: 10.255.1.21:32777
* i[2]:[0]:[0]:[48]:[5001.0008.0007]:[0]:[0.0.0.0]/216
                      10.255.1.20                       100          0 i
*>i                   10.255.1.20                       100          0 i

Vervolgens kan u gedetailleerde inligting oor Update sien, waarin u inligting oor die MAC-gasheer ontvang het. Hieronder is nie al die opdraguitvoer nie.

Leaf21# sh bgp l2vpn evpn 5001.0007.0007

BGP routing table information for VRF default, address family L2VPN EVPN
Route Distinguisher: 10.255.1.11:32777        !  ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» Update с MAC Host. НС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс VPC, Π° адрСс Leaf
BGP routing table entry for [2]:[0]:[0]:[48]:[5001.0007.0007]:[0]:[0.0.0.0]/216,
 version 1507
Paths: (2 available, best #2)
Flags: (0x000202) (high32 00000000) on xmit-list, is not in l2rib/evpn, is not i
n HW

  Path type: internal, path is valid, not best reason: Neighbor Address, no labe
led nexthop
  AS-Path: NONE, path sourced internal to AS
    10.255.1.10 (metric 81) from 10.255.1.102 (10.255.1.102)    ! с ΠΊΠ΅ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ строим VxLAN Ρ‚ΠΎΠ½Π½Π΅Π»ΡŒ
      Origin IGP, MED not set, localpref 100, weight 0
      Received label 10000         ! НомСр VNI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ассоциирован с VLAN, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится Host
      Extcommunity: RT:65001:10000 SOO:10.255.1.10:0 ENCAP:8        ! Π’ΡƒΡ‚ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ RT сформировался автоматичСски Π½Π° основС Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² AS ΠΈ VNI
      Originator: 10.255.1.11 Cluster list: 10.255.1.102
<........>

Kom ons kyk hoe die rame lyk wanneer hulle deur die fabriek gevoer word:

VxLAN fabriek. Deel 1

Onderdruk-ARP

Wonderlik, ons het nou L2-kommunikasie tussen die gashere en ons kan daar klaarmaak. Maar nie alles so eenvoudig nie. Solank ons ​​min gashere het, sal daar geen probleme wees nie. Maar kom ons stel ons 'n situasie voor waar ons honderde en duisende gashere het. Watter probleem kan ons in die gesig staar?

Hierdie probleem is BUM (uitsaai, onbekende eenuitsending, multiuitsending) verkeer. In die raamwerk van hierdie artikel sal ons die opsie oorweeg om uitsaaiverkeer te bekamp.
Die hoofuitsendinggenerator in Ethernet-netwerke is die gashere self via die ARP-protokol.

Nexus implementeer die volgende meganisme vir die hantering van ARP-versoeke - onderdruk-arp.
Hierdie kenmerk werk so:

  1. Host-1 stuur 'n APR-versoek na die uitsaaiadres van sy netwerk.
  2. Die versoek bereik die Leaf-skakelaar en in plaas daarvan om hierdie versoek verder na die fabriek na Host-2 deur te gee, antwoord die Leaf homself en dui die verlangde IP en MAC aan.

Die Uitsaai-versoek het dus nie na die fabriek gegaan nie. Maar hoe kan dit werk as Leaf net die MAC-adres ken?

Alles is redelik eenvoudig, EVPN-roete-tipe 2, benewens die MAC-adres, kan 'n MAC/IP-kombinasie oordra. Om dit te doen, moet jy 'n IP-adres in die VLAN on Leaf opstel. Die vraag ontstaan, watter IP moet ek stel? Op nexus is dit moontlik om 'n verspreide (dieselfde) adres op alle skakelaars te skep:

feature interface-vlan

fabric forwarding anycast-gateway-mac 0001.0001.0001    ! Π·Π°Π΄Π°Π΅ΠΌ virtual mac для создания распрСдСлСнного шлюза ΠΌΠ΅ΠΆΠ΄Ρƒ всСми ΠΊΠΎΠΌΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ

interface Vlan10
  no shutdown
  ip address 192.168.10.254/24          ! Π½Π° всСх Leaf Π·Π°Π΄Π°Π΅ΠΌ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ IP
  fabric forwarding mode anycast-gateway    ! Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Virtual mac

Dus, vanuit die oogpunt van gashere, sal die netwerk soos volg lyk:

VxLAN fabriek. Deel 1

Gaan BGP l2route evpn na

Leaf11# sh bgp l2vpn evpn
<......>

   Network            Next Hop            Metric     LocPrf     Weight Path
Route Distinguisher: 10.255.1.11:32777    (L2VNI 10000)
*>l[2]:[0]:[0]:[48]:[5001.0007.0007]:[0]:[0.0.0.0]/216
                      10.255.1.21                       100      32768 i
*>i[2]:[0]:[0]:[48]:[5001.0008.0007]:[0]:[0.0.0.0]/216
                      10.255.1.10                       100          0 i
* i                   10.255.1.10                       100          0 i
* i[2]:[0]:[0]:[48]:[5001.0008.0007]:[32]:[192.168.10.20]/248
                      10.255.1.10                       100          0 i
*>i                   10.255.1.10                       100          0 i

<......>

Route Distinguisher: 10.255.1.21:32777
* i[2]:[0]:[0]:[48]:[5001.0008.0007]:[0]:[0.0.0.0]/216
                      10.255.1.20                       100          0 i
*>i                   10.255.1.20                       100          0 i
* i[2]:[0]:[0]:[48]:[5001.0008.0007]:[32]:[192.168.10.20]/248
*>i                   10.255.1.20                       100          0 i

<......>

Uit die uitvoer van die opdrag, kan dit gesien word dat ons in EVPN-roete-tipe 2, benewens die MAC, nou ook die IP-adres van die gasheer sien.

Kom ons keer terug na die instelling van onderdruk-arp. Hierdie instelling is vir elke VNI afsonderlik geaktiveer:

interface nve1
  member vni 10000   
    suppress-arp

Dan is daar 'n bietjie moeilikheid:

  • Hierdie kenmerk vereis spasie in TCAM-geheue. Ek sal 'n voorbeeld gee van die instelling vir onderdruk-arp:

hardware access-list tcam region arp-ether 256

Hierdie instelling sal dubbelwydte vereis. Dit wil sΓͺ, as jy 256 stel, moet jy 512 in TCAM vrystel. Die opstel van TCAM is buite die bestek van hierdie artikel, aangesien die opstel van TCAM net afhang van die taak wat aan jou toegewys is en van een netwerk tot 'n ander kan verskil.

  • Die implementering van onderdruk-arp moet op alle blaarskakelaars gedoen word. Kompleksiteit kan egter ontstaan ​​wanneer gekonfigureer word op blaarpare wat in 'n VPC-domein geleΓ« is. Wanneer TCAM verander word, sal die konsekwentheid tussen die pare verbreek word en een nodus kan buite werking gestel word. Daarbenewens kan 'n toestel herselflaai nodig wees om die TCAM-veranderinginstelling toe te pas.

As gevolg hiervan, moet u noukeurig oorweeg of dit die moeite werd is om hierdie instelling op 'n werkende fabriek in u situasie te implementeer.

Dit sluit die eerste deel van die siklus af. In die volgende deel sal ons dit oorweeg om deur 'n VxLAN-fabriek te roeteer met netwerkskeiding oor verskillende VRF's.

En nou nooi ek almal uit gratis webinar, waarin ek in detail oor die kursus sal praat. Die eerste 20 deelnemers wat vir hierdie webinar registreer, sal binne 1-2 dae na die uitsending 'n Afslagsertifikaat per e-pos ontvang.

Bron: will.com

Voeg 'n opmerking