Ich bin aktuell dabei, ein OPNsense Firewall-Cluster in Betrieb zu nehmen. Das Cluster besteht aus zwei Dell R740 Server, die die folgende Netzwerk-Ausstattung besitzen:
2x 1 Gbps Kupfer (Onboard NICs)
2x 1 Gbps Glas (Onboard NICs)
2x 40 Gbps Glas (Mellanox Nvidia ConnectX-3 NIC)
2x 40 Gbps Glas (Mellanox Nvidia ConnectX-4 NIC)
Die ConnectX-3 NIC ist seitens NVIDIA / Mellanox abgekündigt und EOL, steckt aber noch im Server und verbleibt auch drin. Produktiv genutzt wird die ConnectX-4 NIC mit den beiden QSFP+ Ports.
Aktivierung der Treiber
Nach der Grundinstallation der OPNsense Software sind die Netzwerkkarten im System nicht nutzbar und können daher nicht direkt zugewiesen und verwendet werden. Damit dies möglich ist, fügen wir unter System – Settings – Tunables neue Einträge hinzu. Diese dienen dazu, dass die Treiber beim Systemstart geladen werden, und die Karten genutzt werden können.
Wichtig ist hierbei, dass die Zahl in dem Eintrag nicht die Generation der Karten darstellt. Für Mellanox gibt es hier zwei relevante Einträge:
Eintrag | Netzwerkkarte und Generation |
mlx4en_load | Mellanox NVIDIA ConnectX-2 und ConnectX-3 |
mlx5en_load | Mellanox NVIDIA ConnectX-4, ConnectX-5 und ConnectX-6 |
Weitere Infos und auch andere Karten-Typen befinden sich im sehr guten Wiki von Thomas Krenn: https://www.thomas-krenn.com/de/wiki/OPNsense_Chelsio_Mellanox_Broadcom_Netzwerkkarten-Treiber_aktivieren
Nachdem die Einträge angelegt sind, muss das System einmal neugestartet werden, damit die Treiber geladen werden.
Das Problem: Die Karten tauchen nicht zur Zuweisung auf
Nach dem Neustart waren die Karten zwar im Boot-Log (Befehl dazu auf der Shell ist dmesg) sichtbar, konnten aber nicht in der OPNsense-Zuordnung ausgewählt werden. Nachdem ich kurz nach einer Ursache dafür gesucht habe, kam mir meine Erfahrung mit den Karten aus den letzten Jahren zugute. Ich habe schon viele Male ConnectX-Karten verbaut, die ab Werk in der Infiniband-Identität ausgeliefert wurden. Um sie in einem Failover- bzw. HCI-Cluster dann ans Laufen zu bekommen, muss die Identität der Karten einmalig auf Ethernet umgestellt werden. Mit diesem Hintergrund habe ich dann nachgeschaut, wie ich unter OPNsense einen Status der Karten rausbekomme.
Installation der notwendigen MFT-Tools
Damit wir den Status einsehen und ggf. umstellen können, muss auf der Shell der OPNsense-Installation folgendes durchgeführt werden (Bitte vorher auf die aktuelle Version prüfen und ggf. durch die aktuelle Version ersetzen!):
# Wechsel in das tmp-Verzeichnis
cd /tmp/
# Download der aktuellen Tools (Stand 13.04.2023)
fetch https://www.mellanox.com/downloads/MFT/mft-4.23.0-104.tgz
# Entpacken des Archivs
tar xfzv mft-4.23.0-104.tgz
# Wechsel in neuen Ordner
cd mft-4.23.0-104
# Installation von Bash per Paket-Manager
pkg install bash
# Installation der Tools
bash install.sh
# Notwendige Verknüpfung erstellen
ln -s /usr/local/bin/python2.7 /usr/bin/python
Nachdem die Installation durchgeführt wurde, können wir uns die aktuellen Karten anschauen:
/usr/bin/mst status
Man kann hier gut die beiden NICs erkennen, die in meinem System verbaut sind. Um nun die aktuelle Einstellung rauszubekommen, kann der folgende Befehl genutzt werden:
/usr/bin/mlxconfig -d pci0:94:0:0 query
Der Screenshot zeigt, dass die Karte in diesem Fall auf ETH (2) steht, was korrekt ist. Die andere Karte mit der Adresse pci0:24:0:0 stand auf IB (1) und musste von mir angepasst werden, damit sie als Ethernet-Karte verwendet werden kann. Die Anpassung geht mit dem folgenden Befehl:
/usr/bin/mlxconfig -d pci0:24:0:0 set LINK_TYPE_P1=2 LINK_TYPE_P2=2
Jetzt muss der Server noch einmal neugestartet werden, danach ist die Karte sichtbar und kann in der Admin-Oberfläche unter Interfaces – Assignments zugewiesen und konfiguriert werden.
Weitere Hilfen und Quellen
Bei der Durchführung der Installation und Anpassung haben mir die folgenden Seiten sehr geholfen, vielen Dank dafür:
routerperformance.net: Mellanox ConnecX management in OPNsense