Lab 31 – SDN 5: Fabrics (OpenFabric) e full mesh instradato
Dipendenze
Sezione intitolata “Dipendenze”- Lab precedenti:
- Rete fisica: il trunk dei nodi porta le VLAN 81, 82 e 83, una per ogni collegamento tra due nodi.
- Nodi:
desopve01,desopve02,desopve03. - Credenziali:
root/<password-lab>→ Appendice B.
Obiettivi
Sezione intitolata “Obiettivi”- Capire cos’è una fabric: una rete instradata tra i nodi, con un indirizzo per nodo e un protocollo di routing che trova da solo i percorsi.
- Creare una fabric OpenFabric dalla GUI su collegamenti punto-punto senza indirizzi propri.
- Verificare adiacenze, database e rotte con
vtysheip route. - Misurare la riconvergenza quando un collegamento cade, e capire il ruolo dei timer.
- Usare la fabric come underlay della zona VXLAN.
Come funziona
Sezione intitolata “Come funziona”Che cos’è una fabric
Sezione intitolata “Che cos’è una fabric”Una fabric collega i nodi con una rete instradata invece che con un’unica rete di livello 2:
- ogni nodo ha un indirizzo
/32tutto suo, l’equivalente di un router ID (qui 10.80.80.1-3), su un’interfaccia di loopback; - i collegamenti tra i nodi sono punto-punto e non hanno una subnet propria (unnumbered): il nodo usa il suo
/32anche lì; - un protocollo di routing dinamico si scambia gli indirizzi dei nodi e lo stato dei collegamenti, e installa le rotte; se un collegamento cade, il traffico passa da un altro nodo.
Il caso tipico è il full mesh: tre nodi collegati direttamente tra loro, due cavi per nodo, senza switch. È la configurazione che la guida di Proxmox VE propone per la rete di Ceph in cluster piccoli. La stessa fabric si usa come underlay per VXLAN ed EVPN.
I tipi di fabric di Proxmox VE 9.2
Sezione intitolata “I tipi di fabric di Proxmox VE 9.2”Il menu Add Fabric offre quattro protocolli; in questo lab si usa OpenFabric.
| Protocollo | In breve |
|---|---|
| OpenFabric | variante di IS-IS pensata per le fabric dei data center: si configurano solo prefisso, nodi e interfacce |
| OSPF | il classico protocollo link-state, con il concetto di area |
| BGP | sessioni BGP tra i nodi della fabric |
| WireGuard | tunnel cifrati tra i nodi, anche verso nodi esterni |
Il laboratorio: tre VLAN come tre cavi
Sezione intitolata “Il laboratorio: tre VLAN come tre cavi” VLAN 81 desopve01 ───────── desopve02 10.80.80.1 10.80.80.2 \ / VLAN 82 VLAN 83 \ / desopve03 10.80.80.3Ogni VLAN ha solo due membri, quindi si comporta come un cavo diretto. Con una differenza importante: spegnere l’interfaccia su un nodo non stacca il cavo dall’altra parte. L’altro capo si accorge del guasto solo quando smette di ricevere i messaggi del vicino, come quando si guasta un transceiver o uno switch in mezzo.
Procedura
Sezione intitolata “Procedura”1. I collegamenti punto-punto
Sezione intitolata “1. I collegamenti punto-punto”Su ogni nodo due sottointerfacce VLAN di vmbr1, senza indirizzo, prima della riga source di /etc/network/interfaces. Prima di modificare il file se ne fa una copia, su ogni nodo: cp /etc/network/interfaces /root/interfaces.bak-lab31. Per desopve01 (collegamenti con 02 e 03):
auto vmbr1.81iface vmbr1.81 inet manual#fabric punto-punto
auto vmbr1.82iface vmbr1.82 inet manual#fabric punto-puntoSu desopve02 le VLAN 81 e 83, su desopve03 le VLAN 82 e 83. Poi su ogni nodo ifreload -a.
Sui nodi con la zona EVPN del lab 30, ifreload stampa un avviso innocuo: tenta di cancellare una rotta della VRF che non esiste più.
warning: vrf_evpnz: post-up cmd 'ip route del vrf vrf_evpnz unreachable default metric 4278198272' failed: returned 2 (RTNETLINK answers: No such process)2. La fabric OpenFabric
Sezione intitolata “2. La fabric OpenFabric”Datacenter → SDN → Fabrics → Add Fabric → OpenFabric: Name fab1, IPv4 Prefix 10.80.80.0/24, l’intervallo da cui verranno gli indirizzi dei nodi. Hello e CSNP interval restano ai valori predefiniti (si cambiano al punto 6).

3. I nodi della fabric
Sezione intitolata “3. I nodi della fabric”-
Selezionata la fabric, Add Node: Node
desopve01, IPv410.80.80.1e, nella tabella, le due interfacce punto-puntovmbr1.81evmbr1.82. Le interfacce con un indirizzo già configurato sono segnate da un avviso: un’interfaccia unnumbered usa l’indirizzo del nodo.
-
Gli altri due nodi da riga di comando:
root@desopve01 pvesh create /cluster/sdn/fabrics/node/fab1 --node_id desopve02 --protocol openfabric \--ip 10.80.80.2 --interfaces name=vmbr1.81 --interfaces name=vmbr1.83pvesh create /cluster/sdn/fabrics/node/fab1 --node_id desopve03 --protocol openfabric \--ip 10.80.80.3 --interfaces name=vmbr1.82 --interfaces name=vmbr1.83cat /etc/pve/sdn/fabrics.cfgOutput openfabric_fabric: fab1ip_prefix 10.80.80.0/24openfabric_node: fab1_desopve01interfaces name=vmbr1.81interfaces name=vmbr1.82ip 10.80.80.1openfabric_node: fab1_desopve02interfaces name=vmbr1.81interfaces name=vmbr1.83ip 10.80.80.2openfabric_node: fab1_desopve03interfaces name=vmbr1.82interfaces name=vmbr1.83ip 10.80.80.3root@desopve01 pvesh set /cluster/sdn -
La fabric con i tre nodi e le loro interfacce:

4. Cosa genera l’SDN
Sezione intitolata “4. Cosa genera l’SDN”-
L’indirizzo del nodo sta su un’interfaccia
dummy_fab1, la loopback della fabric, e lo stesso/32compare sulle interfacce punto-punto:root@desopve01 ip -br -4 addr show dummy_fab1Output dummy_fab1 UNKNOWN 10.80.80.1/32root@desopve01 ip -br -4 addr show vmbr1.81Output vmbr1.81@vmbr1 UP 10.80.80.1/32 -
In FRR c’è un’istanza
router openfabriccon l’identificativo del nodo (NET) derivato dall’indirizzo. La loopback è passive: annunciata, ma senza adiacenze. Una route-map fa usare il/32del nodo come sorgente per le rotte della fabric.# estratto di /etc/frr/frr.conf su desopve01router openfabric fab1net 49.0001.0100.8008.0001.00exit!interface dummy_fab1ip router openfabric fab1openfabric passiveexit!interface vmbr1.81ip router openfabric fab1exit!interface vmbr1.82ip router openfabric fab1exit!access-list pve_openfabric_fab1_ips permit 10.80.80.0/24!route-map pve_openfabric permit 100match ip address pve_openfabric_fab1_ipsset src 10.80.80.1exit!ip protocol openfabric route-map pve_openfabric -
Per fare da transito, un nodo deve inoltrare i pacchetti. L’SDN attiva l’inoltro solo sulle interfacce della fabric e lascia spento quello generale:
root@desopve02 sysctl -n net.ipv4.ip_forward net.ipv4.conf.vmbr1/81.forwarding net.ipv4.conf.vmbr1/83.forwardingOutput 011
5. Adiacenze, database e rotte
Sezione intitolata “5. Adiacenze, database e rotte”-
Ogni nodo vede i due vicini. Holdtime è il tempo dopo il quale un vicino muto viene considerato perso:
root@desopve01 vtysh -c "show openfabric neighbor"Output Area fab1:System Id Interface L State Holdtime SNPAdesopve02 vmbr1.81 2 Up 29 2020.2020.2020desopve03 vmbr1.82 2 Up 30 2020.2020.2020 -
Il database contiene la descrizione (LSP) di ognuno dei tre nodi; ogni nodo calcola da lì i percorsi migliori:
root@desopve01 vtysh -c "show openfabric database"Output Area fab1:IS-IS Level-2 link-state database:LSP ID PduLen SeqNumber Chksum Holdtime ATT/P/OLdesopve01.00-00 * 123 0x00000002 0x13b8 1183 0/0/0desopve02.00-00 123 0x00000002 0x7c48 1172 0/0/0desopve03.00-00 123 0x00000002 0xdae2 1128 0/0/03 LSPsroot@desopve01 ip route | grep 10.80.80Output 10.80.80.2 nhid 72 via 10.80.80.2 dev vmbr1.81 proto openfabric src 10.80.80.1 metric 20 onlink10.80.80.3 nhid 73 via 10.80.80.3 dev vmbr1.82 proto openfabric src 10.80.80.1 metric 20 onlink -
Gli indirizzi dei nodi si raggiungono direttamente, in un salto:
root@desopve01 ping -c3 -W1 -I 10.80.80.1 10.80.80.3Output 3 packets transmitted, 3 received, 0% packet loss, time 2065msroot@desopve01 traceroute -n -w1 -q1 -s 10.80.80.1 10.80.80.3Output 1 10.80.80.3 0.396 ms
6. Guasti e riconvergenza
Sezione intitolata “6. Guasti e riconvergenza”Per ogni prova un ping ogni 100 ms da desopve01 (sorgente 10.80.80.1) a desopve03 (10.80.80.3), in un secondo terminale: ping -i 0.1 -c 400 -q -I 10.80.80.1 10.80.80.3. Poi si spegne il collegamento VLAN 82 tra i due e lo si riaccende dopo qualche decina di secondi con ip link set vmbr1.82 up, sul nodo (o sui nodi) dove era stato spento.
-
Guasto da un solo lato, timer predefiniti. Si spegne
vmbr1.82solo sudesopve03, mentre sudesopve01resta accesa:root@desopve03 ip link set vmbr1.82 downOutput 600 packets transmitted, 335 received, 44.1667% packet loss, time 61696msSi perdono 265 ping, circa 26 secondi:
desopve01continua a mandare versodesopve03dalla VLAN 82 finché il vicino non scade (holdtime di circa 30 s). Lo stesso succede alle risposte se si spegne l’interfaccia solo sudesopve01: èdesopve03a non accorgersene. -
Timer più stretti. L’holdtime è un multiplo dell’hello interval. Portando l’hello a 1 secondo dalla configurazione della fabric, l’holdtime scende a 10 s:
root@desopve01 pvesh set /cluster/sdn/fabrics/fabric/fab1 --protocol openfabric --hello_interval 1pvesh set /cluster/sdngrep -A3 "^interface vmbr1.81" /etc/frr/frr.confOutput interface vmbr1.81ip router openfabric fab1openfabric hello-interval 1exitroot@desopve01 vtysh -c "show openfabric neighbor" | grep UpOutput desopve02 vmbr1.81 2 Up 10 2020.2020.2020desopve03 vmbr1.82 2 Up 10 2020.2020.2020La stessa prova da un solo lato:
400 packets transmitted, 338 received, +27 errors, 15.5% packet loss, time 53488msOra si perdono 62 ping, circa 6 secondi. Gli errors sono gli ICMP di destinazione irraggiungibile ricevuti nel frattempo.
-
Collegamento tagliato da entrambi i lati, come quando si stacca davvero un cavo. Ciascun nodo vede l’interfaccia spenta e ricalcola subito i percorsi; dopo un secondo
desopve03si raggiunge attraversodesopve02:root@desopve01 ip link set vmbr1.82 downroot@desopve03 ip link set vmbr1.82 downroot@desopve01 ip route get 10.80.80.3Output 10.80.80.3 via 10.80.80.2 dev vmbr1.81 src 10.80.80.1 uid 0Output 400 packets transmitted, 384 received, 4% packet loss, time 40516ms16 ping persi: 1,6 secondi.
Una prima prova di questo tipo, fatta subito dopo il ripristino di un altro guasto, aveva perso 9 secondi, con la rotta per qualche istante finita sul gateway predefinito: la fabric non si era ancora assestata. Le misure vanno ripetute a regime.
7. La fabric come underlay della VXLAN
Sezione intitolata “7. La fabric come underlay della VXLAN”-
La zona
vxzdel lab 29 passa dalla lista dei peer sulla VLAN 61 alla fabric:root@desopve01 pvesh set /cluster/sdn/zones/vxz --fabric fab1 --delete peerspvesh set /cluster/sdn
-
Ora il tunnel parte dalla loopback della fabric verso quelle degli altri nodi:
# estratto di /etc/network/interfaces.d/sdn su desopve01auto vxlan_vnvx1iface vxlan_vnvx1vxlan-id 10062vxlan-local-tunnelip 10.80.80.1vxlan_remoteip 10.80.80.2vxlan_remoteip 10.80.80.3mtu 1450root@desopve01 pct exec 291 -- ping -c3 -W1 10.62.62.12Output 3 packets transmitted, 3 received, 0% packet loss, time 2056msroot@desopve01 tcpdump -lnni vmbr1.82 -c2 udp port 4789Output 22:02:00.587760 IP 10.80.80.1.47640 > 10.80.80.3.4789: VXLAN, flags [I] (0x08), vni 10062IP 10.62.62.11 > 10.62.62.12: ICMP echo request, id 382, seq 1, length 6422:02:00.588181 IP 10.80.80.3.48661 > 10.80.80.1.4789: VXLAN, flags [I] (0x08), vni 10062IP 10.62.62.12 > 10.62.62.11: ICMP echo reply, id 382, seq 1, length 64 -
Con il collegamento 01-03 tagliato da entrambi i lati, il tunnel tra i due container passa da
desopve02(si vede suvmbr1.81) e il ping tra i guest continua:root@desopve01 tcpdump -lnni vmbr1.81 -c2 "udp port 4789 and host 10.80.80.3"Output 22:02:17.378878 IP 10.80.80.1.47640 > 10.80.80.3.4789: VXLAN, flags [I] (0x08), vni 10062IP 10.62.62.11 > 10.62.62.12: ICMP echo request, id 383, seq 75, length 6422:02:17.380197 IP 10.80.80.3.48661 > 10.80.80.1.4789: VXLAN, flags [I] (0x08), vni 10062IP 10.62.62.12 > 10.62.62.11: ICMP echo reply, id 383, seq 75, length 64Output 250 packets transmitted, 246 received, 1.6% packet loss, time 25188msSono stati persi 4 ping, 0,4 secondi, senza toccare nulla nei guest né nella zona. Finita la prova si riaccende il collegamento su entrambi i nodi e si controlla che i vicini siano di nuovo tutti su:
root@desopve01 ip link set vmbr1.82 uproot@desopve03 ip link set vmbr1.82 uproot@desopve01 vtysh -c "show openfabric neighbor" -
Anche il controller EVPN ha il campo SDN Fabric. In questo laboratorio resta sulla lista dei peer della VLAN 61, così la zona
evpnzdel lab 30 non cambia.
8. E Ceph?
Sezione intitolata “8. E Ceph?”Con un full mesh fisico, la guida Full Mesh Network for Ceph Server di Proxmox VE usa proprio una fabric: le reti public e cluster di Ceph diventano il prefisso della fabric, e ogni monitor e OSD usa il /32 del suo nodo. Se un cavo si rompe, Ceph continua a passare per il terzo nodo. In questo laboratorio Ceph resta sulle VLAN 50 e 51 del lab 17: spostare una rete Ceph in uso richiede di ricreare i monitor, ed esula da questo lab.
9. Il resto della rete non è cambiato
Sezione intitolata “9. Il resto della rete non è cambiato”ceph healthHEALTH_OKpvecm status | grep Quorate:Quorate: Yespct exec 121 -- ping -c2 -W1 10.10.10.1222 packets transmitted, 2 received, 0% packet loss, time 1001msping -c2 -W1 10.100.10.232 packets transmitted, 2 received, 0% packet loss, time 1004mspct exec 302 -- ping -c2 -W1 10.71.71.112 packets transmitted, 2 received, 0% packet loss, time 1044msVerifica e test
Sezione intitolata “Verifica e test”| Prova | Hello | Ping persi (ogni 100 ms) |
|---|---|---|
| Collegamento spento da un solo lato | 3 s (predefinito) | 265 su 600, circa 26 s |
| Collegamento spento da un solo lato | 1 s | 62 su 400, circa 6 s |
| Collegamento tagliato da entrambi i lati | 1 s | 16 su 400, circa 1,6 s |
| VXLAN sulla fabric, collegamento tagliato | 1 s | 4 su 250, circa 0,4 s |
| Ceph, Corosync, VLAN dei guest, migrazione, EVPN | – | invariati |
Stato finale del lab
Sezione intitolata “Stato finale del lab”- Collegamenti punto-punto su
vmbr1, senza indirizzo: VLAN 81 (01-02), 82 (01-03), 83 (02-03). - Fabric
fab1(OpenFabric, prefisso 10.80.80.0/24, hello 1 s):desopve0110.80.80.1,desopve0210.80.80.2,desopve0310.80.80.3, sulle interfaccedummy_fab1. - Zona
vxz: ora usa la fabricfab1come underlay, al posto della lista dei peer. CT 291 e 292 invariati. - Zona
evpnz: invariata, con il controller sui peer della VLAN 61 (vmbr1.61). - Backup delle configurazioni di rete dei nodi in
/root/interfaces.bak-lab31.
Cosa hai imparato
Sezione intitolata “Cosa hai imparato”- Una fabric dà a ogni nodo un indirizzo
/32e instrada tra i nodi su collegamenti punto-punto, trovando da sola i percorsi alternativi. - Proxmox VE 9.2 crea fabric OpenFabric, OSPF, BGP e WireGuard dalla GUI e genera interfacce, FRR e inoltro.
- Un guasto visto da entrambi i capi si recupera in circa un secondo; uno visto da un solo capo dura quanto l’holdtime, che si riduce abbassando l’hello interval.
- Zone VXLAN e controller EVPN possono usare una fabric come underlay, e il traffico dei guest ne eredita la ridondanza.
- Il full mesh per Ceph è un uso tipico della fabric.