Aktuelles

[Guide] 40Gbit im Heimnetz Peer 2 Peer (Unraid)

stinger2k

Profi
Thread Starter
Mitglied seit
08.10.2017
Beiträge
32

Mellanox Peer-to-Peer Einrichtung

Unraid <-> Windows


Vorwort:

Dieser Guide richtet sich an die Leute die Daten sehr schnell im Heimnetz hin- und herschaufeln, oder wie ich einfach einen kleinen Server als NAS am laufen haben oder auch mit Parsec z.B. von einem leistungsfähigerem PC mit nativer Auflösung und High-Refresh-Rate sowie geringer Latenz streamen wollen.


Mein Szenario lag hierbei, dass ich zwei PCs habe mit jeweils einer Grafikkarte zum zocken (in meinem Fall in PC1 eine RX6900XT und in PC2 eine RTX3090).
In jedem PC habe ich natürlich mehrere SSDs verbaut worauf z.B. auch meine Games liegen welche ich zurzeit gerne zocke, und ab und an mal auch mit Parsec zum gleichzeitigen Arbeiten vom einem zum anderen PC streamen möchte oder mal schnelle Benchmarks zum Vergleich ausführe.

Daher dachte ich mir wenn ich die SSDs in den Server bekomme und dann evtl. auch noch eine NVMe SSD als Cache dazu packe, könnte ich annähernd mit nativer Zugriffsleistung auf die Laufwerke, meine PCs erstens von einer NVMe befreien (spielt ne Rolle wenn man zu wenige PCIe-Lanes zur Verfügung hat um im zweiten oder dritten PCIe-Slot noch Karten betreiben möchte, da bei vielen Consumer-Boards die Lane-Verteilung dann entweder einen Slot deaktiviert oder eben auf eine niedrigere PCIe-Gen schaltet und daher Performance verloren geht.

Soviel zum Einsatzzweck, nun zu meiner Einkaufsliste für dieses Vorhaben. Ich schaute mich in der Bucht um und fand Mellanox Connect-x3 VPI Karten:

1643907582536.png

Der QFSP+ Zusatz lieferte mir auch gleich die passenden Kabel dazu:

1643907588392.png

Achtung: wenn ihr 56GB/s nutzen wollt dann solltet ihr darauf achten ein Kabel mit der Bezeichnung MC2207130 (56Gbps) nehmen anstatt dem hier gezeigten MC2206130 (40Gbps).

Man findet oft Angebote mit dem Zusatz MCX354A-„QCBT“ oder MCX354A-„FCBT“ - gemeint ist damit, das im Ethernet-Modus die Karten mit 40GbE (FCBT-Variante) bzw./oder nur einem Viertel der Übertragungsrate also 10GbE (QCBT-Variante) arbeiten. Kaufen kann man beide Varianten da wir später noch durch crossflashen“ der Firmware auch aus einer QCBT-Karte eine vollwertige FCBT Karte machen.



Das wars dann auch schon mit der Einkaufsliste, da diese Hardware aus dem (outdated) Server-Bereich kommt, gibt es davon zurzeit relativ viele Angebote.

Nach dem Einbau der Komponenten und der Verkabelung kommen wir nun zum Einrichtungsvorgang.
Was wir dazu alles benötigen hier nachfolgend:

Firmware:

https://www.mellanox.com/support/firmware/connectx3en

Flashsoftware für die Kommandozeile:
https://www.mellanox.com/products/adapter-software/firmware-tools

Windows Treiber und Tools:
https://www.mellanox.com/products/adapter-software/ethernet/windows/winof-2

Unraid Mellanox-Firmware-Tools: (in den Community Apps die Mellanox-Firmware-Tools herunterladen)

1643907643314.png


Firmware-flash:
(auch um 10GbE Connect-x3 Karten auf Full Bandwith 40GbE zu nutzen)

Flashvorgang unter Windows:
(die Ausgabe von mst status bezeichnet den Controller den wir in flint angeben müssen)
Code:
mst status
flint -d mt4099_pci_cr0 -i "firmwaredatei.bin' -allow_psid_change burn

Flashvorgang unter Linux:
(hier sehen wir nach welche PCI-Id der Controller bekommen hat den wir wieder in mstflint angeben müssen)

Code:
lspci
mstflint -d 01:00.0 'firmwaredatei.bin' -allow_psid_change burn


Jetzt beide Karten in den Ethernet Modus setzen:

unter Linux:
Code:
mstconfig -d 01:00.0 s LINK_TYPE_P1=ETH
mstconfig -d 01:00.0 s LINK_TYPE_P2=ETH (nur bei den Dual-Port Karten)


unter Windows :
entweder im Gerätemanager unter Port Config oder in der Kommandozeile wie folgt:
Code:
mlxconfig -d mt4099_pciconf0 s LINK_TYPE_P1=ETH
mlxconfig -d mt4099_pciconf0 s LINK_TYPE_P2=ETH (nur bei den Dual-Port Karten)

Server-Schnittstelle konfigurieren wie folgt: (ohne Gateway-Adresse)

1643907657955.png

Windows Schnittstellen wie folgt: (ohne Gateway- und DNS-Server Adressen)

1643907670979.png

Für ein Peer-to-Peer Netzwerk (ohne Switch dazwischen) in der Windows Hosts-Datei die „beiden“ IP-Adressen hinzufügen:


´C:\Windows\System32\drivers\etc\hosts´
Code:
10.10.10.1 server

10.10.10.2 client

Nun sollte alles laufen und beide Geräte erreichbar sein und das Netzwerk mit 40 Gb/s laufen.

Damit läuft mal der grundlegende Verkehr zwischen den Peers, möchte man nun noch die Connect-x3 Karte nutzen und damit auch Internet über die Leitung des anderen Peers routen, müssen wir im Linux Server noch die Firewallregeln dafür festlegen und IPv4-Forwarding aktivieren.

Dazu gehen wir wie folgt vor…

(Voraussetzung dafür ist das
Code:
iptables
installiert ist – in Unraid ist dieses Paket schon standardmäßig für die Firewallregeln mit dabei, muss also nicht nachinstalliert werden.)


Also zuerst sehen wir mal nach wie die Schnittstelle heißt mit dem Befehl:
(wir suchen hier nach der IP-Adresse auf einer der Schnittstellen die wir vorher vergeben haben)
Code:
ifconfig
1643907687884.png

Nun wissen wir das die Schnittstelle br3 (falls Bridging aktiviert ist) heißt bzw. eth3 (wenn kein Bridging aktiviert ist)
Dies muss nachfolgend beachtet, und die farbig markierten Stellen mit dem Namen eurer Schnittstelle ausgetauscht werden.

Firewallregeln per iptables ergänzen: (192.168.0.0/24 steht hier für das Subnetz eures LAN-Netzwerks)

Code:
iptables -w -t nat -A POSTROUTING -s 192.168.0.0/24 -o br3 -j MASQUERADE && echo "iptables -w -t nat -A POSTROUTING -s 192.168.0.0/24 -o br3 -j MASQUERADE" >> /boot/config/go
iptables -w -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT  && echo "iptables -w -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT" >> /boot/config/go
iptables -w -t filter -A FORWARD -i br3 -j ACCEPT  && echo "iptables -w -t filter -A FORWARD -i br3 -j ACCEPT" >> /boot/config/go
danach noch schnell speichern mit:
Code:
iptables-save

wir öffnen nun mit vim oder nano die Datei
Code:
/etc/sysctl.conf
und entfernen das #-Zeichen vor der Zeile mit dem Inhalt:
Code:
net.ipv4.ip_forward=1
abspeichern und danach mit
Code:
sysctl -p
aktivieren.

Am (Windows/Linux/whatever)-Client vergeben wir nun zusätzlich noch die IP-Adresse des Servers(Unraid) als Gateway und die Adresse des Routers als DNS-Server:

1643907706845.png

Nach einem Reboot des Windows-Clients sollte nun auch das Internet laufen und ihr könnt die Schnittstelle am Mainboard anderwärtig verwenden.

Wollt ihr auch aus eurem bestehenden Subnetz heraus auf den Adressbereich der Mellanox Karten zugreifen, müsst ihr hierzu eine statische Route im Router anlegen wie folgt:

1643907730901.png


Falls ihr aus einer VM am Unraid-Server eure Karte im PC nicht pingen könnt dann ist es auch hier notwendig mit Routen in erwähnter Form zu arbeiten und die Firewall Regel unter erweiterte Einstellungen -> Eingehende Regeln wie folgend zu aktivieren:

1643907741581.png

Falls erforderlich (wenn kein ping möglich ist zum Client-PC) dann noch hier wie folgt für -

- Linux Clients statische Route:
Code:
ip route add 10.10.10.0/24 via 192.168.1.100
(Diesen Befehl könnt ihr danach in die Datei /etc/rc.local eingeben und abspeichern um bei einem Neustart die Route wieder aktiv zu halten.)[/SIZE]

- Windows Clients statische Route:
Code:
route ADD -p 10.10.10.0 MASK 255.255.255.0 10.10.10.1

und damit sind wir fertig! 👍

Wenn euch diese Anleitung gefallen hat, oder ihr auch über andere Projekte in diesem Bereich erfahren wollt, lasst es mich wissen ;)


Nachfolgend noch ein paar Eindrücke zur erfolgreichen Umsetzung:


1643907759833.png
1643907763451.png

iSCSI Laufwerk (Samsung NVMe 980 Pro per Passtrough)

1643907797990.png

SMB-Share als Netzlaufwerk eingebunden: (Samsung 840 Evo per SATA mit aktiviertem Cache)


1643907815096.png

 

Anhänge

  • Mellanox Peer2Peer Anleitung.pdf
    1,1 MB · Aufrufe: 39
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.

maxblank

Profi
Mitglied seit
14.01.2019
Beiträge
152
Sehr interessant - vielen Dank.

Mit den Mellanox-Firmware-Tools bei Unraid können die Karten mit der aktuellen Firmware versorgt werden?
 

stinger2k

Profi
Thread Starter
Mitglied seit
08.10.2017
Beiträge
32
Ja stimmt nur die Adressierung - Linux spezifisch - ist hier anders zu definieren als in Windows.
 

maxblank

Profi
Mitglied seit
14.01.2019
Beiträge
152
Prima, danke für den Tipp - schaue ich mir an.
Die Tools habe ich noch gar nicht gekannt.
 

hominidae

Enthusiast
Mitglied seit
23.10.2011
Beiträge
3.741
Firewallregeln per iptables ergänzen: (192.168.0.0/24 steht hier für das Subnetz eures LAN-Netzwerks)

Code:
iptables -w -t nat -A POSTROUTING -s 192.168.0.0/24 -o br3 -j MASQUERADE
iptables -w -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -w -t filter -A FORWARD -i br3 -j ACCEPT
danach noch schnell speichern mit:
Code:
iptables-save

wir öffnen nun mit vim oder nano die Datei
Code:
/etc/sysctl.conf
und entfernen das #-Zeichen vor der Zeile mit dem Inhalt:
Code:
net.ipv4.ip_forward=1
abspeichern und danach mit
Code:
sysctl -p
aktivieren.
....unraid läuft im RAM...diese EInstellungen werden so also den Reboot nicht überleben, oder habe ich da was übersehen?
 

stinger2k

Profi
Thread Starter
Mitglied seit
08.10.2017
Beiträge
32
Danke ja stimmt, habe die Zeilen ergänzt um diese auch in
Code:
/boot/config/go
einzutragen damit die Rules den Neustart überleben.
 
Zuletzt bearbeitet:

stinger2k

Profi
Thread Starter
Mitglied seit
08.10.2017
Beiträge
32
Falls es noch jemanden interressiert:

Unraid als DHCP/DNS-Server nutzen


Code:
mkdir /boot/packages && cd /boot/packages
Code:
iprange_start="10.10.10.10"
iprange_stop="10.10.10.100"
netmask=255.255.255.0

printf "\n#loading dnsmasq\ninstallpkg /boot/packages/*.txz\n" >> /boot/config/go
printf "domain-needed\nbogus-priv\nlocal=/lan/\nexpand-hosts\ndomain=lan\ndhcp-range=$iprange_start,$iprange_stop,$netmask,72h\ndhcp-option=option:router,$router\ndhcp-option=option:domain-search,lan\ndhcp-leasefile=/boot/packages/dnsmasq/dnsmasq.leases\ndhcp-authoritative\nlocal-ttl=60\n" >> /boot/packages/dnsmasq.conf
cp /boot/packages/dnsmasq.conf /etc/ && printf "cp /boot/packages/dnsmasq.conf /etc/\n" >> /boot/config/go
printf "\n127.0.0.1       localhost\n$router       Server\n" >> /boot/packages/dnsmasq/hosts && cp /boot/packages/dnsmasq/hosts /etc/
printf "\n/usr/sbin/dnsmasq" >> /boot/config/go
 
Zuletzt bearbeitet:
Oben Unten