Schnelle IP-Weiterleitung an WAN, fällt jedoch zwischen den LAN-Subnetzen ab

393
Huckle

Ich habe meinen kabellosen Consumer-Router durch eine Linux-Box ersetzt, die über eine Quad-Gigabit-NIC-PCIe-Karte und eine einzelne Gigabit-NIC auf dem Motherboard (für das WAN) verfügt. Nach dem Einschalten der IP-Weiterleitung, dem Masquerading (Via iptables) und dem Einrichten von Subnetzen auf jeder der vier LAN-Schnittstellen führte ich einige Geschwindigkeitstests durch.

$ ip route default dev ppp0 scope link  10.0.0.0/16 dev enp3s0f0 proto kernel scope link src 10.0.0.1  10.64.0.0/16 dev enp3s0f1 proto kernel scope link src 10.64.0.1  10.192.0.0/16 dev enp4s0f1 proto kernel scope link src 10.192.0.1  aaa.bbb.ccc.ddd dev ppp0 proto kernel scope link src www.xxx.yyy.zzz  
  • Von einem drahtlosen Gerät in einem der LAN-Subnetze zu einem Speedtest-Server im WAN bekomme ich die vollen 40 Mbps / 5 Mbps, für die ich meinen ISP bezahle.

  • Vom Router-Host zu einem kabelgebundenen LAN-Host iperf3kann ich über mehrere Minuten konstant 930+ Mbps verwalten.

  • Von einem kabelgebundenen Gerät in einem der LAN-Subnetze zu einem kabelgebundenen Gerät in einem anderen LAN-Subnetz iperf3bekomme ich zunächst 80 bis 95 Mbps für die ersten Sekunden, aber es fällt schnell auf null.

  • Von einem kabelgebundenen Gerät in einem der LAN-Subnetze zu einem kabelgebundenen Gerät in einem anderen LAN-Subnetz iperf3mit einer Ziel-Bitrate von 20 MBit / s sehe ich ähnliche Ergebnisse (siehe Update am Ende), kann jedoch etwa 10 MBit / s aufrechterhalten

.

Connecting to host 10.0.0.2, port 5201 [ 5] local 10.192.128.3 port 35620 connected to 10.0.0.2 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 10.2 MBytes 85.9 Mbits/sec 0 73.5 KBytes  [ 5] 1.00-2.00 sec 9.01 MBytes 75.6 Mbits/sec 0 82.0 KBytes  [ 5] 2.00-3.00 sec 8.26 MBytes 69.3 Mbits/sec 0 79.2 KBytes  [ 5] 3.00-4.00 sec 9.01 MBytes 75.6 Mbits/sec 0 73.5 KBytes  [ 5] 4.00-5.00 sec 5.28 MBytes 44.3 Mbits/sec 1 1.41 KBytes  [ 5] 5.00-6.00 sec 0.00 Bytes 0.00 bits/sec 1 1.41 KBytes  [ 5] 6.00-7.00 sec 0.00 Bytes 0.00 bits/sec 1 1.41 KBytes  [ 5] 7.00-8.00 sec 0.00 Bytes 0.00 bits/sec 1 1.41 KBytes  [ 5] 8.00-9.00 sec 0.00 Bytes 0.00 bits/sec 0 1.41 KBytes  ^C[ 5] 10.00-13.63 sec 0.00 Bytes 0.00 bits/sec 1 1.41 KBytes  - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-13.63 sec 41.8 MBytes 25.7 Mbits/sec 5 sender [ 5] 0.00-13.63 sec 0.00 Bytes 0.00 bits/sec receiver iperf3: interrupt - the client has terminated 

Dies deutet auf ein Problem bei der Weiterleitung von Paketen zwischen den Subnetzen hin. Ich habe zuerst dafür gesorgt, dass meine iptablesRegeln so gering wie möglich sind:

-t nat -A POSTROUTING -o ppp0 -j MASQUERADE # WAN connection is PPPoE and VLAN tagged -t filter -A FORWARD -o ppp0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu 

Dumping des iptablesStatus Ich sehe niedrige Paketzahlen für beide Regeln.

Als nächstes habe ich nach Paketverlust gesucht. Es scheint eine kleine, aber gleichbleibende Menge an Paketverlust / Neuübertragungen zu geben.

$ sudo netstat -s | egrep -i 'retransmit|drop' 498 outgoing packets dropped 25848 fast retransmits 

Ich dachte dann, dass es vielleicht einen Puffer oder eine Warteschlange gab, die sich füllten und Pakete verworfen wurden. Ich habe das durchschnittliche Bandbreitenverzögerungsprodukt berechnet und das mit dem reservierten Speicher verglichen.

$ sudo ping -f 10.0.0.2 -s $((1500-28))  PING 10.0.0.2 (10.0.0.2) 1472(1500) bytes of data. .^C --- 10.0.0.2 ping statistics --- 9036 packets transmitted, 9035 received, 0% packet loss, time 26512ms rtt min/avg/max/mdev = 1.742/2.817/12.057/0.758 ms, pipe 2, ipg/ewma 2.934/3.091 ms  $ echo "1*(1024^3) * 0.003" | bc  3221225.472  $ cat /proc/sys/net/ipv4/tcp_mem 18396 24529 36792  $ getconf PAGESIZE 4096 

Das scheint ausreichend zu sein. Also bin ich jetzt etwas festgefahren. Ich bin tcpdumpauf dem iperf3Client gelaufen und kann sehen, wie sich die Dinge ein wenig bewegen. Dann sehe ich eine lange Pause (fast 250ms) vor vielen Neuübertragungen und doppelten Bestätigungen.

Da ich ausreichende Download-Geschwindigkeiten aus dem WAN abrufen kann, habe ich nicht den Verdacht, dass die integrierte Netzwerkkarte fehlerhaft ist. Ich suche Hilfe bei der Diagnose dieser Quad-NIC (Details unten) und möglicherweise eines dummen Layer-2-Gigabit-Switches (Netgear GS-108) und anderer Kernelkonfigurationen, die möglicherweise in die Quere kommen. Ich bezweifle, dass es sich um den Switch handelt, da er noch nie ein Problem war und ich die Geschwindigkeit vom Router bis zu diesem Subnetz beibehalten kann. Es scheint nur die Leistung zwischen den Subnetzen betroffen zu sein.

 *-network:0  description: Ethernet interface product: 82571EB Gigabit Ethernet Controller (Copper) vendor: Intel Corporation physical id: 0 bus info: pci@0000:03:00.0 logical name: enp3s0f0 version: 06 serial: 00:26:55:xx:xx:xx size: 1Gbit/s capacity: 1Gbit/s width: 32 bits clock: 33MHz capabilities: pm msi pciexpress bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=3.2.6-k duplex=full firmware=5.12-2 ip=10.0.0.1 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s resources: irq:24 memory:fe920000-fe93ffff memory:fe880000-fe8fffff ioport:d020(size=32) 

AKTUALISIEREN:

$ iperf3 -b 20m -c 10.0.0.2 Connecting to host 10.0.0.2, port 5201 [ 5] local 10.192.128.3 port 36554 connected to 10.0.0.2 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 2.49 MBytes 20.9 Mbits/sec 0 158 KBytes  [ 5] 1.00-2.00 sec 2.38 MBytes 19.9 Mbits/sec 0 150 KBytes  [ 5] 2.00-3.00 sec 2.38 MBytes 19.9 Mbits/sec 1 133 KBytes  [ 5] 3.00-4.00 sec 2.38 MBytes 19.9 Mbits/sec 0 73.5 KBytes  [ 5] 4.00-5.00 sec 2.38 MBytes 19.9 Mbits/sec 0 70.7 KBytes  [ 5] 5.00-6.00 sec 1.12 MBytes 9.44 Mbits/sec 2 1.41 KBytes  [ 5] 6.00-7.00 sec 0.00 Bytes 0.00 bits/sec 2 1.41 KBytes  [ 5] 7.00-8.00 sec 0.00 Bytes 0.00 bits/sec 0 1.41 KBytes  [ 5] 8.00-9.00 sec 0.00 Bytes 0.00 bits/sec 1 1.41 KBytes  iperf3: error - control socket has closed unexpectedly  $ iperf3 -b 10m -c 10.0.0.2  Connecting to host 10.0.0.2, port 5201 [ 5] local 10.192.128.3 port 36564 connected to 10.0.0.2 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 1.24 MBytes 10.4 Mbits/sec 0 201 KBytes  [ 5] 1.00-2.00 sec 1.25 MBytes 10.5 Mbits/sec 0 118 KBytes  [ 5] 2.00-3.00 sec 1.12 MBytes 9.44 Mbits/sec 0 127 KBytes  [ 5] 3.00-4.00 sec 1.25 MBytes 10.5 Mbits/sec 0 107 KBytes  [ 5] 4.00-5.00 sec 1.12 MBytes 9.44 Mbits/sec 0 110 KBytes  [ 5] 5.00-6.00 sec 1.25 MBytes 10.5 Mbits/sec 0 90.0 KBytes  [ 5] 6.00-7.00 sec 1.12 MBytes 9.44 Mbits/sec 0 87.2 KBytes  [ 5] 7.00-8.00 sec 1.25 MBytes 10.5 Mbits/sec 0 81.6 KBytes  [ 5] 8.00-9.00 sec 1.12 MBytes 9.44 Mbits/sec 0 78.8 KBytes  [ 5] 9.00-10.00 sec 1.25 MBytes 10.5 Mbits/sec 0 112 KBytes  - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 12.0 MBytes 10.1 Mbits/sec 0 sender [ 5] 0.00-10.04 sec 12.0 MBytes 10.0 Mbits/sec receiver  iperf Done. 
0
Was meinen Sie mit "Einrichten von Subnetzen auf jeder der vier LAN-Schnittstellen"? Haben Sie vier LANs oder eines erstellt? Wenn eine, dann mit vier Schnittstellen in demselben LAN, sollten Sie nur eine IP-Adresse und ein Subnetz einrichten. David Schwartz vor 6 Jahren 0
@DavidSchwartz Vier Subnetze, deren Schnittstellen als 10.0.0.1, 10.64.0.1, 10.128.0.1 und 10.192.0.1 konfiguriert sind. Huckle vor 6 Jahren 0
Bitte geben Sie ein "ifconfig -a" oder "ip addr" an. Suchen nach MAC-Adressen auf der Quad-NIC. Pedro vor 6 Jahren 0
@Huckle Gibt es einen Grund, warum Sie vier separate LANs erstellt haben? Brauchen Sie aus irgendeinem Grund Isolation? Dies bedeutet, dass Funktionen, die in einem LAN funktionieren (z. B. Erkennung von Broadcast-Diensten und Namensauflösung), für Geräte in verschiedenen LANs nicht funktionieren. David Schwartz vor 6 Jahren 0
Woher kommt auch das Wireless? Könnten Sie eine "iperf3" zwischen verdrahteten Hosts durchführen, die an verschiedene Schnittstellen angeschlossen sind? Pedro vor 6 Jahren 0
@Pedro - erneuter Test von zwei verdrahteten Geräten, die beide direkt an verschiedenen Subnetzen angeschlossen sind (diesmal ist kein Layer-2-Switch in einem Subnetz möglich). Im Wesentlichen identische Ergebnisse Huckle vor 6 Jahren 1
@DavidSchwartz Ja, die Idee ist, schließlich eines der Subnetze für den WAN-Zugriff zu Firewall und dann einen der anderen für die Firewall zuzulassen, um nur den Zugriff auf bestimmte Ports zuzulassen. Dieser Punkt "iptables" ist jedoch so knapp wie möglich, um Variablen zu reduzieren. und ich bin mir sicher, dass ich die Konfiguration neu geladen habe. Huckle vor 6 Jahren 0
Könnten Sie die `iperf3` mit - Bandbreite an einigen Punkten wie 20m, 40m und 80m ausführen und sehen, ob sich diese schließlich verlangsamen? Dies wird angezeigt, wenn ein Puffer im Router überläuft. Pedro vor 6 Jahren 0
@Pedro OUI einer der Quad-NICs befindet sich im `lshw'-Ausgang. Die Karte ist ein HP NC364T Huckle vor 6 Jahren 0
@Pedro 20 Mbps und 10 Mbps Tests gepostet. 20 ist ein No-Go. Scheint zu halten 10. Bricht um 12 herum ein. Huckle vor 6 Jahren 1
Können Sie bitte eine volle Bandbreite iperf von einem Host auf enp3s0f0 bis zu einer auf enp3s0f1, enp3s0f1 / enp4s0f1 und enp3s0f0 / enp4s0f1 ausführen, um festzustellen, ob einer der Ports fehlerhaft ist? Pedro vor 6 Jahren 0
Können Sie beim NC364T nur überprüfen, ob die MAC-Adressen für jeden Port unterschiedlich sind? Anscheinend verwenden Sie nur zwei der Ports enp3s0f0 und enp3s0f1, richtig? Pedro vor 6 Jahren 0
Lassen Sie uns [diese Diskussion im Chat fortsetzen] (http://chat.stackexchange.com/rooms/73650/discussion-between-pedro-and-huckle). Pedro vor 6 Jahren 0

1 Antwort auf die Frage

0
Huckle

Danke an @Pedro für die Hilfe bei der Suche. Ursprünglich dachte ich, das wäre eine schlechte Hardware, aber nachdem ich sie durch eine andere ersetzt habe, bin ich sicher, dass es ein Treiberproblem ist. Ich bin immer noch dabei, herauszufinden, ob es sich um einen Fehler handelt, der bereits gemeldet wurde oder nicht (und ob ein Fix vorhanden ist). In der Zwischenzeit habe ich eine Serverfault-Frage gefunden, die mit einem Fehlerbericht verknüpft war, in dem vorgeschlagen wurde, mehrere Offloading-Funktionen zu deaktivieren . Dies brachte mich zumindest stabil von 0 bps auf ~ 270 Mbps. Weit hinter den ~ 940 MBit / s ist sie in der Lage, aber besser als nichts, während ich weiterforsche.

ethtool -K eth0 gso off gro off tso off