Progetto per il corso di Network and System Defence dell'Università di Roma Tor Vergata
Autori
- 👨💻 Matteo Coni (matricola 0333880 )
- 👨💻 Marco Purificato (matricola 0350312)
- 👨💻 Roberto Fardella (matricola 0334186)
Protocollo EGP (Exterior Gateway Protocol) di tipo distance vector che si basa sulle informazioni passate dai downstream neighbors, ovvero le informazioni ricevute dai router vicini, per la configurazione delle tabelle di routing IP.
Si riferiscono due tipologie di BGP, a seconda se viene eseguito tra sistemi autonomi od all'interno di un AS, rispettivamente eBGP ed iBGP.
Il protocollo OSPF (Open Shortest Path First) è un protocollo gateway interno utilizzato per distribuire le informazioni di routing in un sistema autonomo. A differenza di protocolli di routing tradizionali come RIP, si basa sulla tecnologia "Link State". Esso usa l'IP multicast per inviare gli aggiornamenti degli stati del collegamento (link state): ciò garantisce un minor consumo delle risorse di elaborazione sui router che non sono in ascolto dei pacchetti OSPF; gli aggiornamenti non sono inviati a intervalli fissi, ma solo nel caso in cui siano state apportate modifiche al routing. Inoltre consente un migliore bilanciamento del carico e consente una definizione logica delle reti in cui i router possono essere suddivisi in aree.
AS100
is a transit Autonomous System providing network access to two customers:AS200
andAS300
Configure eBGP peering with
AS200
andAS300
Configure iBGP peering between border routers
Configure OSPF
Configure LDP/MPLS in the core network
Per garantire che il routing all'interno dell'AS avvenga in modo ordinato, evitando loop di routing e mantenendo la coerenza della tabella di routing una rotta appresa tramite iBGP non viene mai propagata ad altri peer iBGP non adiacenti. In particolar modo essendo la topologia dell'AS200
non full mesh di sessioni iBGP ed essendo sprovvista di BGP Route Reflector, si utilizza il protocollo MPLS con LDP.
MPLS è un protocollo per la distribuzione delle rotte la quale idea chiave è quella di associare un identificatore, chiamato label, ad ogni pacchetto per semplificare il loro routing e migliorare l'efficienza del loro trasporto attraverso la rete.
Per aggiungere il supporto al protocollo MPLS in maniera persistente, è necessario seguire i passi sotto descritti:
-
Aprire la shell all'interno della macchina virtuale GNS3 VM
-
Aprire il file
/etc/modules
con:nano /etc/modules
-
Inserire le seguenti righe:
mpls-router mpls-iptunnel
E' possibile poi riavviare e controllare la corretta installazione con il comando
show mpls status
Se viene mostrato il messaggio MPLS support enabled: yes
, il processo è andato a buon fine.
Dopo aver preconfigurato i moduli kernel per il protocollo MPLS, si procede con la configurazione delle singole stazioni all'interno dell'Autonomous System
-
Si procede con la configurazione delle interfacce
eth0
,eth1
e di loopbacklo
interface eth0 ip address 10.0.22.2/30 exit ! interface eth1 ip address 10.0.23.1/30 mpls enable exit ! interface lo ip address 1.1.0.1/8 ip address 1.255.0.1/32 mpls enable exit !
Si configura il protocollo OSPF
router ospf ospf router-id 1.255.0.1 network 1.1.0.0/16 area 0 network 1.255.0.1/32 area 0 network 10.0.23.0/30 area 0 exit !
Si configura il protocollo BGP
router bgp 100 neighbor 1.3.0.1 remote-as 100 neighbor 1.3.0.1 update-source 1.1.0.1 neighbor 1.255.0.3 remote-as 100 neighbor 1.255.0.3 update-source 1.255.0.1 neighbor 10.0.22.1 remote-as 200 ! address-family ipv4 unicast network 1.0.0.0/8 neighbor 1.3.0.1 next-hop-self neighbor 1.255.0.3 next-hop-self exit-address-family exit !
Si configura ora MPLS: dove per prima cosa si abilitano le interfacce che possono accettare i pacchetti MPLS e si impostano il numero di label che possono essere usate, tramite l'aggiunta al file
/etc/sysctl.conf
dei seguenti parametrinet.mpls.conf.lo.input = 1 net.mpls.conf.eth1.input = 1 net.mpls.platform_labels = 100000
per applicare le modifiche si utilizza il comando
sysctl -p
successivamente si configura LDP (Label Distribution Protocol), protocollo utilizzato per la distribuzione dei label all'interno di una rete MPLS, sul router
mpls ldp router-id 1.255.0.1 ordered-control ! address-family ipv4 discovery transport-address 1.255.0.1 ! interface eth1 exit ! interface lo exit ! exit-address-family ! exit !
-
Si procede con la configurazione delle interfacce
eth0
,eth1
e di loopbacklo
interface eth0 ip address 10.0.23.2/30 mpls enable exit ! interface eth1 ip address 10.0.24.1/30 mpls enable exit ! interface lo ip address 1.2.0.1/16 ip address 1.255.0.2/32 mpls enable exit !
Si configura il protocollo OSPF
router ospf ospf router-id 1.255.0.2 network 0.0.0.0/0 area 0 network 1.2.0.0/16 area 0 network 1.255.0.2/32 area 0 network 10.0.23.0/30 area 0 network 10.0.24.0/30 area 0 exit !
Si configura MPLS: per prima cosa si abilitano le interfacce che possono accettare i pacchetti MPLS e si impostano il numero di label che possono essere usate, tramite l'aggiunta al file
/etc/sysctl.conf
dei seguenti parametrinet.mpls.conf.lo.input = 1 net.mpls.conf.eth0.input = 1 net.mpls.conf.eth1.input = 1 net.mpls.platform_labels = 100000
per applicare le modifiche si utilizza il comando
sysctl -p
successivamente si configura il protocollo LDP sul router
mpls ldp router-id 1.255.0.2 ordered-control ! address-family ipv4 discovery transport-address 1.255.0.2 ! interface eth0 exit ! interface eth1 exit ! interface lo exit ! exit-address-family ! exit !
-
Si procede con la configurazione delle interfacce
eth0
,eth1
e di loopbacklo
interface eth0 ip address 10.0.33.1/30 exit ! interface eth1 ip address 10.0.24.2/30 mpls enable exit ! interface lo ip address 1.255.0.3/32 ip address 1.3.0.1/16 mpls enable exit !
Si configura il protocollo OSPF
router ospf ospf router-id 1.255.0.3 network 1.3.0.0/16 area 0 network 1.255.0.3/32 area 0 network 10.0.24.0/30 area 0 exit !
Si configura il protocollo BGP
router bgp 100 neighbor 1.1.0.1 remote-as 100 neighbor 1.1.0.1 update-source 1.3.0.1 neighbor 1.255.0.1 remote-as 100 neighbor 1.255.0.1 update-source 1.255.0.3 neighbor 10.0.33.2 remote-as 300 ! address-family ipv4 unicast network 1.0.0.0/8 neighbor 1.1.0.1 next-hop-self neighbor 1.255.0.1 next-hop-self exit-address-family exit !
Si configura MPLS: per prima cosa si abilitano le interfacce che possono accettare i pacchetti MPLS e si impostano il numero di label che possono essere usate, tramite l'aggiunta al file
/etc/sysctl.conf
dei seguenti parametrinet.mpls.conf.lo.input = 1 net.mpls.conf.eth1.input = 1 net.mpls.platform_labels = 100000
per applicare le modifiche si utilizza il comando
sysctl -p
successivamente si configura il protocollo LDP sul router
mpls ldp router-id 1.255.0.3 ordered-control ! address-family ipv4 discovery transport-address 1.255.0.3 ! interface eth1 exit ! interface lo exit ! exit-address-family ! exit !
AS200
is a customer AS connected toAS100
, which provides transit services.
Setup eBGP peering with
AS100
Configure iBGP peering
Configure internal routing as you wish (with or without OSPF)
R203
is not a BGP speaker
It has a default route towards R202
It has a public IP address from the IP address pool of
AS200
It is the Access Gateway for the LAN attached to it
Configure dynamic NAT
Configure a simple firewall to allow just connections initiated from the LAN
Client-200
is sensitive, so it must be configured to use Mandatory Access Control and it's a OpenVPN client.
Di seguito si procede con la configurazione delle singole stazioni all'interno dell'Autonomous System
-
Si procede con la configurazione delle interfacce
eth0
,eth1
e di loopbacklo
interface eth0 ip address 10.0.22.1/30 exit ! interface eth1 ip address 10.0.21.2/30 exit ! interface lo ip address 2.1.0.1/8 ip address 2.255.0.1/32 exit !
Si configura il protocollo OSPF
router ospf ospf router-id 2.255.0.1 network 2.0.0.0/8 area 0 network 2.1.0.0/16 area 0 network 2.255.0.1/32 area 0 network 10.0.21.0/30 area 0 exit !
Si configura il protocollo BGP
router bgp 200 neighbor 2.255.0.2 remote-as 200 neighbor 2.255.0.2 update-source 2.255.0.1 neighbor 10.0.22.2 remote-as 100 ! address-family ipv4 unicast network 2.0.0.0/8 network 2.1.0.0/16 neighbor 2.255.0.2 next-hop-self exit-address-family exit !
-
Si procede con la configurazione delle interfacce
eth0
,eth1
e di loopbacklo
interface eth0 ip address 2.0.23.1/30 exit ! interface eth1 ip address 10.0.21.1/30 exit ! interface lo ip address 2.2.0.1/16 ip address 2.255.0.2/32 exit !
Si configura il protocollo OSPF
router ospf ospf router-id 2.255.0.2 network 2.0.0.0/8 area 0 network 2.0.23.0/30 area 0 network 2.2.0.0/16 area 0 network 2.255.0.2/32 area 0 network 10.0.21.0/30 area 0 exit !
Si configura il protocollo BGP
router bgp 200 neighbor 2.0.23.2 remote-as 200 neighbor 2.0.23.2 update-source 2.2.0.1 neighbor 2.255.0.1 remote-as 200 neighbor 2.255.0.1 update-source 2.255.0.2 ! address-family ipv4 unicast network 2.0.0.0/8 network 2.2.0.0/16 neighbor 2.0.23.2 next-hop-self neighbor 2.255.0.1 next-hop-self exit-address-family exit !
-
Si procede con la configurazione delle interfacce
eth0
,eth1
e della default route versoR202
ip addr add 192.168.200.1/24 dev eth1 ip addr add 2.0.23.2/30 dev eth0 ip route add default via 2.0.23.1
Si abilita il forwarding degli indirizzi IP e si definiscono le variabili di ambiente
LAN
eNET
per utilizzare nomi simbolici più comprensibili per le interfacce di rete, dove rispettivamente indichiamo l'interfaccia relativa alla reteLAN
versoClient-200
e l'interfaccia verso l'interno diAS200
.Successivamente si configura un semplice firewall e tramite i seguenti comandi si vuota tutte le regole settate in precedenza e scarta tutti i pacchetti, inoltrati, destinati e generati dal sistema non corrispondenti a nessuna regola.
iptables -F iptables -P FORWARD DROP iptables -P INPUT DROP iptables -P OUTPUT DROP
Accetta tutti i pacchetti inoltrati che arrivano dall'interfaccia di rete locale e sono destinati alla rete esterna
iptables -A FORWARD -i $LAN -o $NET -j ACCEPT
Accetta tutti i pacchetti inoltrati che appartengono a connessioni già stabilite
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
Il traffico proveniente dal server OpenVPN, non è stato considerato nelle regole di firewall in quanto la connessione VPN stabilisce, per sua natura, un tunnel crittografato end-to-end che impedisce l'accesso non autorizzato al di fuori del server VPN.
[Rif. immagine: unipd]Dopo aver configurato il firewall si configura il NAT (Network Address Translation), in modo tale da modificare l'indirizzo IP sorgente dei pacchetti inviati dalla LAN da
Client-200
con quello dell'interfacciaNET
diR203
, tramite il comandoiptables -t nat -A POSTROUTING -o $NET -j MASQUERADE
Si procede con la configurazione del client della LAN
-
Il client è implementato tramite una macchia virtuale contenente Lubuntu 22.04.3, si entra nel terminale e si configura l'indirizzo dell'interfaccia
enp0s8
e della default route verso il routerR203
con i privilegi di amministratoresudo ip addr add 192.168.200.2/24 dev enp0s8 sudo ip route add default via 192.168.200.1
Dopo aver effettuato le configurazioni di rete si procede con l'implementazione del MAC (Mandatory Access Control).
Il modulo MAC scelto è stato AppArmor: questo segue un paradigma per cui ogni processo può avere un profilo proprio che consiste in una serie di limitazioni e capabilities. Se un processo non possiede un profilo, viene eseguito con una schema DAC tradizionale.
AppArmor può lavorare in due modalità:
-
enforcement
, applica rigorosamente le regole di sicurezza definite nel profilo e qualsiasi tentativo di accesso a risorse non consentite verrà bloccato. -
complain
, monitora le violazioni delle regole definite nel profilo, ma non blocca effettivamente l'accesso alle risorse, registrando un avviso nel log del sistema.
Per prendere visione dei profili disponibili all'interno del sistema, si fa uso del comando
sudo apparmor_status
Si crea un nuovo profilo in modalità enforcement per il comando
ping
rendendolo inutilizzabile anche avendo privilegi di amministratore (es. utente root). Per creare un nuovo profilo si crea il filebin.ping
all'interno della directory dei profili/etc/apparmor.d
sudo vim /etc/apparmor.d/bin.ping
Dove al suo interno inseriamo
#include <tunables/global> profile ping /{,usr}/bin/ping { #include <abstractions/base> #include <abstractions/consoles> #include <abstractions/nameservice> deny capability net_raw, capability setuid, network inet raw, network inet6 raw, /{,usr}/bin/ping mixr, /etc/modules.conf r, }
La capability
net_raw
è presente di default in molti sistemi e permette, oltre alla generazione di traffico ICMP verso altre macchine, di creare nuovi "raw packet". Nelle mani di un utente malintenzionato NET_RAW può abilitare un'ampia varietà di exploit di rete dall'interno della macchina e dal relativo cluster. Per questo è stato generato il profilo appena descritto.Per impostarlo in modalità enforcement si utilizza il comando
sudo aa-enforce /etc/apparmor.d/bin.ping
mentre con il seguente comando si ricarica il profilo in caso di modifiche:
sudo apparmor_parser -r /etc/apparmor.d/bin.ping
Dopo aver scritto il profilo, per aggiornare tutti profili di AppArmor includendo quello appena scritto, si esegue il comando
sudo aa-logprof
-
-
AS300
is a customer AS connected toS100
, which provides transit services. It also has a lateral peering relationship withAS400
.
Setup eBGP peering with
AS400
andAS100
Configure iBGP peering
Configure internal routing as you wish (with or without OSPF)
GW300
is not a BGP speaker
It has a default route towards
R302
It has a public IP address from the IP address pool of
AS300
It is the Access Gateway for the Data Center network attached to it
Configure dynamic NAT
It's a OpenVPN server
Di seguito si procede con la configurazione delle singole stazioni all'interno dell'Autonomous System
-
Si procede con la configurazione delle interfacce
eth0
,eth1
e di loopbacklo
interface eth0 ip address 10.0.33.2/30 exit ! interface eth1 ip address 10.0.34.1/30 exit ! interface lo ip address 3.1.0.1/16 ip address 3.255.0.1/32 exit !
Si configura il protocollo OSPF
router ospf ospf router-id 3.255.0.1 network 3.0.0.0/16 area 0 network 3.1.0.0/16 area 0 network 3.255.0.1/32 area 0 network 10.0.34.0/30 area 0 exit !
Si configura il protocollo BGP
router bgp 300 neighbor 3.255.0.2 remote-as 300 neighbor 3.255.0.2 update-source 3.255.0.1 neighbor 10.0.33.1 remote-as 100 ! address-family ipv4 unicast network 3.1.0.0/16 neighbor 3.255.0.2 next-hop-self exit-address-family exit !
-
Si procede con la configurazione delle interfacce
eth0
,eth1
e di loopbacklo
interface eth0 ip address 10.0.34.2/30 exit ! interface eth1 ip address 10.0.44.1/30 exit ! interface eth2 ip address 3.2.23.1/30 exit ! interface lo ip address 3.2.0.1/16 ip address 3.255.0.2/32 exit !
Si configura il protocollo OSPF
router ospf ospf router-id 3.255.0.2 network 3.0.0.0/8 area 0 network 3.2.23.0/30 area 0 network 3.2.0.0/16 area 0 network 3.255.0.2/32 area 0 network 10.0.34.0/30 area 0 exit !
Si configura il protocollo BGP
router bgp 300 neighbor 3.2.23.2 remote-as 300 neighbor 3.2.23.2 update-source 3.2.0.1 neighbor 3.255.0.1 remote-as 300 neighbor 3.255.0.1 update-source 3.255.0.2 neighbor 10.0.44.2 remote-as 400 ! address-family ipv4 unicast network 3.2.0.0/16 neighbor 3.2.23.2 next-hop-self neighbor 3.255.0.1 next-hop-self exit-address-family exit !
-
Si procede con la configurazione dell'interfaccia
eth2
e della default route versoR302
con la conseguente abilitazione per il forwarding degli indirizzi IPip addr add 3.2.23.2/24 dev eth2 ip route add default via 3.2.23.1 sysctl -w net.ipv4.ip_forward=1
Successivamente si associano le vlan con id 100 e 200 rispettivamente alle interfacce virtuali eth0.100 e eth0.200 per consentire la connettività da e verso l'esterno del datacenter sottostante. Si aggiunge poi l'indirizzo del gateway associato alle due interfacce virtuali. Infine si aggiungono due rotte verso la foglia L1 per raggiungere separatamente i due tenant.
ip link add link eth0 name eth0.100 type vlan id 100 ip link add link eth0 name eth0.200 type vlan id 200 ip addr add 3.10.10.1/16 dev eth0.100 ip addr add 3.10.10.1/16 dev eth0.200 ip link set eth0.100 up ip link set eth0.200 up ip route add 3.2.10.0/24 via 3.10.10.254 dev eth0.100 ip route add 3.2.20.0/24 via 3.10.10.254 dev eth0.200
Per concludere si abilita il NAT verso l'interfaccia eth2 (AS300) e vengono bloccati i pacchetti verso l'eth0.200 provenienti dall'eth0.100, per evitare la comunicazione tra i due tenant a causa del gateway in comune.
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
Questa sezione illustra l'implementazione di una topologia a due livelli leaf-spine Clos all'interno del data center di AS 300. All'interno della rete cloud, ci sono due tenant (A e B), ciascuno ospita due macchine virtuali collegate a leaf1 e leaf2. A ciascun tenant viene assegnato un dominio di broadcast, garantendo segmentazione e isolamento distinti per i rispettivi ambienti.
- Realize VXLAN/EVPN forwarding in the DC network to provide L2VPNs between the tenants’ machines
- In L1, enable the connectivity to the external network. In other words, both tenants’ machines must reach the external network through the link between L1 and R303, including the encapsulation in OpenVPN tunnels when necessary.
Per completezza, si specifica che le due spines e le due leaf sono macchine virtuali contenenti Cumulus Linux v.4.1.0
-
La configurazione per entrambe le spine è quasi identica, quindi ci concentreremo nel dettagliare l'impostazione per la spine 1.
Questi comandi assegnano gli indirizzi IP alle interfacce specificate e all'interfaccia loopback:
net add interface swp1 ip add 3.1.4.1/30 net add interface swp2 ip add 3.1.2.1/30 net add loopback lo ip add 3.4.4.4/32
Per la configurazione OSPF, abbiamo:
net add ospf router-id 3.4.4.4 net add ospf network 3.4.4.4/32 area 0 net add ospf network 3.1.4.0/30 area 0 net add ospf network 3.1.2.0/30 area 0
Utilizzando MP-BGP (Multiprotocol BGP), l'EVPN distribuisce gli indirizzi MAC e IP agli endpoint, trattando gli indirizzi MAC come route. Questo consente una maggiore flessibilità e scalabilità nelle reti Ethernet, specialmente in ambienti multi-tenant e data center.
Configurazione di MP-BGP:
net add bgp autonomous-system 65000 net add bgp router-id 3.4.4.4 net add bgp neighbor swp1 remote-as external net add bgp neighbor swp2 remote-as external net add bgp evpn neighbor swp1 activate net add bgp evpn neighbor swp2 activate
Inizialmente è stato configurato un numero di sistema autonomo comune per tutte le spine della topologia, e per ciascuna di esse è stato definito un router-id. Successivamente, è stata stabilita una relazione di peer BGP attraverso le interfacce swp1 e swp2. Il remote AS per entrambi i peer è stato impostato come "external", indicando che si tratta di router esterni non specificati. Infine, è stato attivato il supporto per BGP EVPN attraverso i comandi "net add bgp evpn neighbor swp1 activate" e "net add bgp evpn neighbor swp2 activate". Questa configurazione consente al dispositivo di partecipare attivamente al protocollo BGP e di implementare estensioni specifiche come BGP EVPN, permettendo il trasporto di informazioni sulla raggiungibilità degli endpoint su una rete Ethernet.
-
La configurazione delle due foglie è quasi identica, quindi ci concentreremo nel dettagliare la foglia 1, per poi descrivere i comandi aggiuntivi che le sono stati assegnati per consentire la connettività verso l'esterno del datacenter.
Questi comandi configurano un bridge su un router Linux e assegnano specifiche porte al bridge.
net add bridge bridge ports swp3,swp4,swp5 net add interface swp3 bridge access 10 net add interface swp4 bridge access 20 net add bridge bridge pvid 1 net add bridge bridge vids 10,20,100,200
Inizialmente, vengono aggiunte al bridge le porte swp3, swp4 e swp5. Successivamente, la porta swp3 viene assegnata al bridge con VLAN di accesso 10, mentre la porta swp4 viene assegnata con VLAN di accesso 20. Infine, viene impostata la VLAN predefinita del bridge.
Configurazione delle interfacce di rete:
net add interface swp1 ip add 3.1.4.2/30 net add interface swp2 ip add 3.2.1.2/30 net add loopback lo ip add 3.1.1.1/32
Configurazione OSPF:
net add ospf router-id 3.1.1.1 net add ospf network 3.1.4.0/30 area 0 net add ospf network 3.2.1.0/30 area 0 net add ospf network 3.1.1.1/32 area 0 net add ospf passive-interface swp3,swp4
La leaf con l'ultimo comando non invierà attivamente i messaggi OSPF tramite tramite le interfacce swp3 e swp4 che raggiungono gli end-host della rete del datacenter.
Configurazione VXLAN/EVPN:
Sono configurate due interfacce VXLAN, vni10 e vni20, con ID rispettivamente 10 e 20. La procedura di configurazione abilita l'apprendimento del bridge sul dispositivo VXLAN, mappando la VLAN di accesso 10 all'interfaccia VXLAN vni10 e lo stesso per la VLAN 20. Successivamente, l'indirizzo IP del tunnel locale viene impostato per corrispondere all'indirizzo di loopback della Cumulus VM.
net add vxlan vni10 vxlan id 10 net add vxlan vni10 vxlan local-tunnelip 3.1.1.1 net add vxlan vni10 bridge access 10 net add vxlan vni20 vxlan id 20 net add vxlan vni20 vxlan local-tunnelip 3.1.1.1 net add vxlan vni20 bridge access 20
A seguire la configurazione che permette al dispositivo di partecipare attivamente al protocollo BGP, estendendo le funzionalità per supportare EVPN ed esportando infine, tutte le vni (virtual network identifier):
net add bgp autonomous-system 65001 net add bgp router-id 3.1.1.1 net add bgp neighbor swp1 remote-as 65000 net add bgp neighbor swp2 remote-as 65000 net add bgp evpn neighbor swp1 activate net add bgp evpn neighbor swp2 activate net add bgp evpn advertise-all-vni
Si assegnano degli indirizzi ip alle VTEP per poter partecipare attivamente al routing e all'instradamento del traffico VXLAN attraverso la rete:
net add vlan 10 ip address 3.2.10.254/24 net add vlan 20 ip address 3.2.20.254/24
Istanziate due tabelle di routing virtuali (VRF) per consentire la connettività da e verso l'esterno dalla rete del datacenter. Ognuna di esse è associata ad un dominio di broadcast, che a loro volta separano e ne rappresentano il tenant A ed il tenant B della topologia leaf-spine.
net add vlan 100 ip address 3.10.10.254/16 net add vlan 200 ip address 3.10.10.254/16 net add vlan 100 vrf TENA net add vlan 10 vrf TENA net add vlan 200 vrf TENB net add vlan 20 vrf TENB
Successivamente è stato configurato un gateway IP per le VLAN 100 e 200. Il gateway IP funge da punto di uscita per il traffico generato dai dispositivi all'interno del datacenter e destinato a reti esterne.
net add vlan 100 ip gateway 3.10.10.1 net add vlan 200 ip gateway 3.10.10.1
I seguenti comandi configurano il protocollo BGP all'interno di un VRF specifico, consentendo la pubblicazione degli indirizzi IPv4 unicast e la generazione di un percorso predefinito per IPv4 all'interno di tale VRF utilizzando EVPN. Ciò è ripetuto per entrambi i tenants, come riportato:
net add bgp vrf TENA autonomous-system 65001 net add bgp vrf TENA evpn advertise ipv4 unicast net add bgp vrf TENA evpn default-originate ipv4 net add bgp vrf TENB autonomous-system 65001 net add bgp vrf TENB evpn advertise ipv4 unicast net add bgp vrf TENB evpn default-originate ipv4
-
Gli end-host della topologia sono costituiti da container Linux di base, in cui si configura una route predefinita verso la rispettiva leaf e si assegna un indirizzo IP all'interfaccia di rete. Prendendo il server A1 come esempio, abbiamo:
ip addr add 3.2.10.1/24 dev eth0 ip route add default via 3.2.10.254
Gli end-host del datacenter possono comunicare con la rete esterna tramite il gateway GW300 mentre dall'esterno si può raggiungere il tenant A tramite la rete OpenVPN.
AS400
has a lateral peering relationship withAS300
.
Setup eBGP peering with
AS400
andAS100
R402
is not a BGP speaker
It has a default route towards
R401
It has a public IP address from the IP address pool of
AS400
It is the Access Gateway for the LAN attached to it
Configure dynamic NAT
It's a OpenVPN client
Client-400
is a simple LAN device with a default route throughR402
.
Di seguito è specificata la configurazione delle singole stazioni all'interno dell'Autonomous System 400
-
Si procede con la configurazione delle interfacce
eth0
,eth1
e di loopbacklo
interface eth0 ip address 4.0.12.2/30 exit ! interface eth1 ip address 10.0.44.2/30 exit ! interface lo ip address 4.1.0.1/8 ip address 4.255.0.1/32 exit !
Si configura il protocollo OSPF
router ospf ospf router-id 4.255.0.1 network 4.0.0.0/8 area 0 network 4.0.12.0/30 area 0 network 4.1.0.0/16 area 0 network 4.255.0.1/32 area 0 exit !
Si configura il protocollo BGP
router bgp 400 neighbor 10.0.44.1 remote-as 300 ! address-family ipv4 unicast network 4.0.0.0/8 network 4.1.0.0/16 exit-address-family exit !
-
Si procede con la configurazione delle interfacce
eth0
,eth1
e della default route versoR202
ip addr add 192.168.40.1/24 dev eth1 ip addr add 4.0.12.1/30 dev eth0 ip route add default via 4.0.12.2
Successivamente si abilita il forwarding degli indirizzi ip e si configura il nome simbolico
NET
ed il NAT per ilClient-400
all'interno della LAN collegatasysctl -w net.ipv4.ip_forward=1 export NET=eth0 iptables -t nat -A POSTROUTING -o $NET -j MASQUERADE
Si procede con la configurazione del client della LAN
-
Si configura l'indirizzo dell'interfaccia
eth1
e della default route verso il routerR402
ip addr add 192.168.40.2/24 dev eth1 ip route add default via 192.168.40.1
-
Si configura una overlay VPN di indirizzo 192.168.100.0/24
, modello hub-and-spoke e di topologia come segue
Per prima cosa si procede con la generazione dei certificati necessari al servizio garantendone la persistenza.
Pre-requisito fondamentale è indicare, prima dell'attivazione all'interno della configurazione avanzata delle stazioni, la directory /root
come directory da mandare in persistenza. Oltretutto essendo Client-200
una macchina virtuale Lubuntu, bisogna procede all'installazione del servizio.
-
Per installare la chiave del repository OpenVPN utilizzata dai pacchetti OpenVPN3 per Linux, aggiungere la corretta repository per l'attuale versione di Lubuntu ed installare il servizio sulla macchina, si fa uso dei seguenti comandi
sudo mkdir -p /etc/apt/keyrings && curl -fsSL https://packages.openvpn.net/packages-repo.gpg | sudo tee /etc/apt/keyrings/openvpn.asc DISTRO=$(lsb_release -c | awk '{print $2}') echo "deb [signed-by=/etc/apt/keyrings/openvpn.asc] https://packages.openvpn.net/openvpn3/debian $DISTRO main" | sudo tee /etc/apt/sources.list.d/openvpn-packages.list sudo apt update sudo apt install openvpn3
Per abilitare easy-rsa
per la generazione automatica delle chiavi e dei certificati necessari al funzionamento della vpn, prima di tutto si procede al pull dell'ultima versione dell'immagine docker nsdcourse/basenet:latest
, tramite il comando all'interno della shell di GNS3 VM e poi la si riavvia
docker pull nsdcourse/basenet
per inizializzare PKI e fare la build della Certification Authority chiamata OVPN_NSD_CA
, si eseguono i seguenti comandi all'interno della directory /usr/share/easy-rsa
del server GW300
./easyrsa init-pki
./easyrsa build-ca nopass
si genera poi il certificato del server
./easyrsa build-server-full GW300 nopass
e si esegue la stesso comando per i client: Client-200
e R402
./easyrsa build-client-full Client-200 nopass
./easyrsa build-client-full R402 nopass
e poi si generano i parametri di Diffie Hellman per il server ( ricerca di un numero primo con determinate caratteristiche )
./easyrsa gen-dh
per garantire la persistenza dei certificati generati per il server ed i client si eseguono poi i seguenti comandi:
mkdir /root/CA
mkdir /root/CA/GW300
mkdir /root/CA/Client-200
mkdir /root/CA/R402
cp pki/ca.crt /root/CA/
cp pki/issued/GW300.crt /root/CA/GW300/
cp pki/private/GW300.key /root/CA/GW300/
cp pki/dh.pem /root/CA/GW300/
cp pki/issued/Client-200.crt /root/CA/Client-200/
cp pki/private/Client-200.key /root/CA/Client-200/
cp pki/issued/R402.crt /root/CA/R402/
cp pki/private/R402.key /root/CA/R402/
mentre per distribuire il materiale su gli altri client si entra nella shell del client R402
all'interno di /root
e parallelamente all'interno di /Scrivania
di Client-200
, così da mandarli in persistenza
mkdir ovpn
cd ovpn
vim ca.crt
e dentro si incolla il contenuto salvato nel server e cioè il certificato corrispondente. Poi eseguo lo stesso con i certificati e le chiavi ognuno per il proprio client, dove nei file <nome_client>.crt copio solo la chiave finale
#in Client-200
vim Client-200.crt
vim Client-200.key
#in R402
vim R402.crt
vim R402.key
per visualizzare a video il contenuto di una chiava o di un certificato, utilizzo il comando
cat <nome_stazione>.crt
cat <nome_stazione>.key
Dopo aver generato e mandato in persistenza i certificati si procede con la configurazione del server e dei client del servizio OVPN.
-
nel
server GW300
si copia all'interno della directory/CA/GW300
il certificatoca
, tramite il comandocp ./ca.crt ./GW300
ci si sposta all'interno della directory
/CA/GW300
e si crea il file di configurazione per il server denominatoGW300.ovpn
port 1194 proto udp dev tun ca ca.crt cert GW300.crt key GW300.key dh dh.pem server 192.168.100.0 255.255.255.0 push "route 192.168.200.2 255.255.255.255" push "route 192.168.40.0 255.255.255.0" push "route 3.2.10.0 255.255.255.0" route 192.168.200.2 255.255.255.255 route 192.168.40.0 255.255.255.0 client-config-dir ccd client-to-client keepalive 10 120 cipher AES-256-GCMer AES-256-GCM
successivamente dopo aver salvata la configurazione, si crea una nuova directory chiamata
ccd
(Client Configuration Directory), tramite il comandomkdir ccd
dove al suo interno si inseriscono le informazioni aggiuntive di configurazione dei client nella topologia overlay ( un file per client del tipo <nome_client> senza estensione )
Per il client
Client-200
si crea il file di configurazione per impostargli staticamente l'indirizzo IP riferito alla topologia overlay e si indica come dietro il client OpenVPN ci sia l'host indicato, inserendo al suo internoifconfig-push 192.168.100.101 192.168.100.102 iroute 192.168.200.2 255.255.255.255
Per il client
R402
si crea il file di configurazione e si fa la medesima assegnazione con i corrispettivi indirizziifconfig-push 192.168.100.105 192.168.100.106 iroute 192.168.40.0 255.255.255.0
Una volta terminata la configurazione del server OVPN, si avvia il servizio tramite il comando
openvpn GW300.ovpn &
dove
&
indica l'esecuzione in background. -
nel
client Client-200
, all'interno della directory/ovpn
creata precedentemente, si crea il file di configurazione del servizioClient-200.ovpn
client dev tun proto udp remote 3.2.23.2 1194 resolv-retry infinite ca ca.crt cert Client-200.crt key Client-200.key remote-cert-tls server cipher AES-256-GCM
dopo averlo salvato si utilizza il seguente comando
openvpn3 config-import --config /home/<nome_utente>/Desktop/ovpn/Client-200.ovpn --name Client-200 --persistent
Questa operazione prende il file di configurazione salvato e lo importa nel Configuration Manager, memorizzandolo con il nome
Client-200
. Il flag--persistent
assicura che il file di configurazione venga conservato al riavvio del sistema.Successivamente si concede all'utente root l'accesso al profilo di configurazione
Client-200
importato, tramite il comandoopenvpn3 config-acl --show --lock-down true --grant root --config Client-200
Dopo aver mandato in persistenza il file di configurazione si avvia il servizio nell'immediato ( tramite l'argomento
--now
) e si imposta il suo avvio automatico ad ogni accensione della macchina virtualesudo systemctl enable --now openvpn3-session@Client-200.service
-
nel
client R402
, all'interno della directory/ovpn
creata precedentemente, si crea il file di configurazione del servizioR402.ovpn
client dev tun proto udp remote 3.2.23.2 1194 resolv-retry infinite ca ca.crt cert R402.crt key R402.key remote-cert-tls server cipher AES-256-GCM
dopo averlo salvato si avvia il servizio in background tramite il comando
openvpn R402.ovpn &