Tipicamente nell’ultimo periodo usiamo sempre KVM come ambiente di virtualizzazione, e come spesso capita installiamo il firewall (pfSense) come macchina virtuale. Purtroppo pfSense, o meglio FreeBSD in generale, ha problemi con la rete in ambienti virtualizzati.
La situazione tipica che si ha installando pfSense su XenServer è che:
- la rete funziona perfettamente per tutti i client sulla LAN, incluse le connessioni locali verso le VM e dai client verso internet;
- la macchina XenServer e le altre macchine virtuali riescono a fare ping verso l’esterno, ma praticamente tutte le connessioni TCP non funzionano, sia in ingresso che in uscita.
Essendo un bug conosciuto, e di lungo corso, negli ambienti KVM che usano i driver virtualizzati di pfSense è sufficiente selezionare la spunta Disable hardware checksum offload nelle impostazioni avanzate di rete di pfSense.
Quindi la soluzione è di disabilitare il checksum hardware, ma siccome in XenServer pfSense non usa i driver virtualizzati la modifica va fatta sulla configurazione dell’interfaccia di rete sull’host.
Colleghiamoci in ssh alla macchina XenServer, ed elenchiamo le interfacce di rete della VM di pfSense con questo comando (sostituendo VM_NAME con il nome della VM del firewall):
xe vm-vif-list vm=VM_NAME
Otterremo un output simile a questo:
uuid ( RO) : a59019a2-0278-fa51-982c-eb7cab437147 vm-name-label ( RO): pfSense device ( RO): 0 MAC ( RO): ca:44:7f:6a:ad:6b network-uuid ( RO): 84bbfaa4-1872-2595-0996-40fa61421daf network-name-label ( RO): Pool-wide network associated with eth0 uuid ( RO) : 6f04ec4f-50fa-063e-ed7a-b45216fe8b61 vm-name-label ( RO): pfSense device ( RO): 1 MAC ( RO): 9e:70:64:7e:46:1e network-uuid ( RO): 7e08ae46-86ed-8c90-7e5c-54eb7a35b3cc network-name-label ( RO): Pool-wide network associated with eth1
Identifichiamo l’interfaccia LAN di pfSense (tipicamente eth0) e ricordiamoci il campo uuid. Nell’esempio sopra è quello che inizia con a5901. A questo punto eseguiamo questi due comandi (sostituendo VIFUUID con l’uuid ottenuto sopra):
xe vif-param-set uuid=VIFUUID other-config:ethtool-tx="off" xe vif-param-set uuid=VIFUUID other-config:ethtool-rx="off"
A questo punto occorre spegnere ed accendere la VM di pfSense. È importante fare questa procedura, perché un riavvio non è sufficiente!
Fatto! Ora la rete dovrebbe funzionare correttamente.
Per altre informazioni visitate la sezione del nostro blog.