Wenn einen das Internet überholt ... ssl vs. vpn

peterle

Forenkasper
Ich habe seit vielen Jahren ein paar Kisten bei einem Provider stehen. Die stehen alle in einem Rack und sind mit zweiter Netzwerkkarte und eigenem Router vernetzt. Was den Vorteil hat, daß sich Sicherungen und Datenbankverbindungen sicher routen lassen.

Weil ich gerade einen Check wegen einem Update mache, bei dem ich jedes Quentchen brauchen werde, stelle ich erstaunt fest, daß das interne Netz deutlich langsamer zu sein scheint, als das des Rechenezentrums selber.

Code:
--- INTERN ping statistics ---
3541 packets transmitted, 3541 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.059/0.499/1061.198/17.831 ms

--- EXTERN ping statistics ---
3560 packets transmitted, 3560 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.094/0.161/0.773/0.116 ms

Nun stelle ich mir die Frage, ob ich das interne Netz nicht wegwerfen soll und die Kommunikation über SSL oder OpenVPN machen soll.

Bei OpenVPN nehme ich jetzt mal an, habe ich das Problem, daß alles über einen Server geroutet wird, was keinen Vorteil bringt, aber die restliche Kommunikation über SSL verschlüsseln, könnte mich vielleicht weiterbringen.
Allerdings ist das natürlich eine Frage der Last auf der externen Netzwerkkarte.

Code:
# pciconf -lv
...
re0@pci0:6:0:0: class=0x020000 card=0x75221462 chip=0x816810ec rev=0x02 hdr=0x00
  vendor  = 'Realtek Semiconductor Co., Ltd.'
  device  = 'RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller'
  class  = network
  subclass  = ethernet
re1@pci0:7:0:0: class=0x020000 card=0x816910ec chip=0x816910ec rev=0x10 hdr=0x00
  vendor  = 'Realtek Semiconductor Co., Ltd.'
  device  = 'RTL8169 PCI Gigabit Ethernet Controller'
  class  = network
  subclass  = ethernet
...

Irgendwelche Tips irgendwe, bevor ich falsch abbiege?

OK, hier ein Vergelich mit und ohne SSL:
https://www.percona.com/blog/2013/10/10/mysql-ssl-performance-overhead/

... und dann ein wenig Schlangenöl in Form von ProxySQL:
https://dzone.com/articles/proxysql-improves-mysql-ssl-connections

... was man wohl selber bauen darf:
http://www.proxysql.com/blog/proxysql-on-freebsd

Jemand Erfahrungen damit?
 
Ich verstehe den Gedankengang nicht. Wie kommst du von ein paar Pings auf "das Netz ist schneller"? Und warum sollte der massive Overhead einer VPN-Lösung in Summe immer noch schneller sein? Von der aufgegebenen Isolierung ganz zu schweigen.

Was geht denn an Durchsatz jeweils durch? Wenn du den Traffic für extern und intern auf eine Karte legst, noch dazu mit VPN, wird das mit ziemlicher Sicherheit keine bessere Performance nach außen hin bedeuten. Dein "interner" Traffic belegt ja dann schonmal externe Kapazitäten. Dazu kommt das VPN, bei OpenVPN eine Userspace-Lösung, die massiv bremst. Ich halte die ganze Idee für fehlgeleitet.
 
Ich halte die ganze Idee für fehlgeleitet.
Das ist doch mal eine klare Aussage, die unterschreibe ich Dir auch. :D:cool:

Eine Motivation liegt noch darin, daß ich das vorhandene Setup nicht mehr updaten kann. Also mehr RAM, schnellere CPU, SSD etc. ist alles nicht und 12GB RAM kommen immer wieder mal an die Grenzen. Selbst wenn ich auf ein anderes Rack umsteige wollen sie keine Extrakabel mehr legen.
Das ist sicherlich auch eine erhebliche Motivation nach einer Lösung zu suchen.

Eine Alternative wäre noch auf 64GB oder 128GB zu gehen und Web- und DB-Server wieder auf einen Rechner zu schmeißen, aber dann schreiben und lesen beide von denselben Platten oder ich brauche vier und alle quetschen sich durch den Controller.
Damit habe ich in meinem Leben die schlechtesten Erfahrungen gemacht.
 
RAM und Flash sind im Moment so schweineteuer, dass es sich in jedem Fall lohnt eine Neuanschaffung hinauszuzögern, wenn man nicht gerade jetzt Hardware kaufen muss. Die Preise fallen zwar tendenziell wieder, aber bis Speicherzellen nicht mehr mit Goldstaub aufgewogen werden, dauert es sicher noch einige Monate...

Aber bevor man hier überhaupt Aussagen treffen kann, würde ich erstmal schauen wie schnell oder langsam das Netzwerk überhaupt ist. Der Klassiker ist dafür benchmarks/iperf3. Das gibt aber theoretische Maximalwerte, die praktisch erreichbaren Werte sind durch Anwendungsoverhead meist ein wenig geringer. Danach können wir dann schauen, ob wir herausfinden können, wo es hakt. Netzwerkkarten, Switches, Konfiguration, die Möglichkeiten sind zahlreich.
 
Ja denn ...

Code:
# iperf3 -c EXTERN
Connecting to host EXTERN, port 5201
[  5] local C-EXTERN port 45635 connected to S-EXTERN port 5201
[ ID] Interval  Transfer  Bitrate  Retr  Cwnd
[  5]  0.00-1.00  sec  88.6 MBytes  743 Mbits/sec  44  529 KBytes   
[  5]  1.00-2.00  sec  87.8 MBytes  736 Mbits/sec  65  634 KBytes   
[  5]  2.00-3.00  sec  87.3 MBytes  732 Mbits/sec  65  59.4 KBytes   
[  5]  3.00-4.00  sec  87.4 MBytes  733 Mbits/sec  65  707 KBytes   
[  5]  4.00-5.00  sec  87.3 MBytes  732 Mbits/sec  65  18.4 KBytes   
[  5]  5.00-6.00  sec  87.6 MBytes  735 Mbits/sec  66  612 KBytes   
[  5]  6.00-7.00  sec  87.7 MBytes  736 Mbits/sec  65  8.48 KBytes   
[  5]  7.00-8.00  sec  87.8 MBytes  736 Mbits/sec  65  185 KBytes   
[  5]  8.00-9.00  sec  87.4 MBytes  733 Mbits/sec  65  137 KBytes   
[  5]  9.00-10.00  sec  87.6 MBytes  735 Mbits/sec  65  222 KBytes   
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval  Transfer  Bitrate  Retr
[  5]  0.00-10.00  sec  876 MBytes  735 Mbits/sec  630  sender
[  5]  0.00-10.04  sec  876 MBytes  732 Mbits/sec  receiver

iperf Done.

# iperf3 -c INTERN
Connecting to host INTERN, port 5201
[  5] local C-INTERN port 28445 connected to S-INTERN port 5201
[ ID] Interval  Transfer  Bitrate  Retr  Cwnd
[  5]  0.00-1.00  sec  33.5 MBytes  281 Mbits/sec  0  310 KBytes   
[  5]  1.00-2.00  sec  33.1 MBytes  277 Mbits/sec  0  437 KBytes   
[  5]  2.00-3.00  sec  33.1 MBytes  277 Mbits/sec  0  535 KBytes   
[  5]  3.00-4.00  sec  32.8 MBytes  275 Mbits/sec  0  618 KBytes   
[  5]  4.00-5.00  sec  33.1 MBytes  277 Mbits/sec  0  690 KBytes   
[  5]  5.00-6.00  sec  33.0 MBytes  277 Mbits/sec  0  757 KBytes   
[  5]  6.00-7.00  sec  32.5 MBytes  273 Mbits/sec  0  31.1 KBytes   
[  5]  7.00-8.00  sec  31.1 MBytes  261 Mbits/sec  1  301 KBytes   
[  5]  8.00-9.00  sec  32.4 MBytes  272 Mbits/sec  0  430 KBytes   
[  5]  9.00-10.00  sec  32.3 MBytes  271 Mbits/sec  0  527 KBytes   
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval  Transfer  Bitrate  Retr
[  5]  0.00-10.00  sec  327 MBytes  274 Mbits/sec  1  sender
[  5]  0.00-10.05  sec  326 MBytes  272 Mbits/sec  receiver

iperf Done.

AFAIR ist das Interne ein 100MBit.
 
Hast du noch mal die ifconfig-Ausgabe einer internen NIC? Die IP- und MAC-Adressen können gerne zensiert werden, es geht um den Rest. :)
 
Hast du noch mal die ifconfig-Ausgabe einer internen NIC? Die IP- und MAC-Adressen können gerne zensiert werden, es geht um den Rest. :)

Code:
# ifconfig -a
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
   options=82099<RXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
   ether **:**:**.**.**.**
   inet EXTERN netmask 0xffffffff broadcast B-EXTERN
   nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
   media: Ethernet autoselect (1000baseT <full-duplex,master>)
   status: active
re1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
   options=8209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
   ether **:**:**.**.**.**
   inet INTERN netmask 0xffffff00 broadcast B-INTERN
   nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
   media: Ethernet autoselect (1000baseT <full-duplex>)
   status: active

Das deckt sich nicht mit den Messungen.

Das hast Du allerdings recht. Vielleicht sollte ich doch mehr schlafen. :o
 
Jetzt muss ich mal fragen wieso das eigentlich? Bei einem Hoster hast du doch ein privates Netz für deinen Zeug, wieso also nicht alles darüber? Wenn das nicht performant genug ist dem Hoster auf die Finger klopfen.
 
Jetzt muss ich mal fragen wieso das eigentlich? Bei einem Hoster hast du doch ein privates Netz für deinen Zeug, wieso also nicht alles darüber? Wenn das nicht performant genug ist dem Hoster auf die Finger klopfen.

Wo habe ich denn dort ein "privates Netz"?
Gut, ich habe das dazugebucht, aber ansonsten habe ich nur das Netz des Rechenzentrums und das ist sicherlich geschützt, aber nicht privat und dort damals einfach einen offen Port für mysql rumhängen lassen, war nicht das ,was ich dringend wollte und auch heute nicht will.
 
Siehst du denn in dem zweiten Netz irgendwelchen Traffic außer deinen? Wenn du ein privates Netz buchst, dann solltest du da mit deinen Kisten auch alleine drin sein.
 
Wo habe ich denn dort ein "privates Netz"?
Gut, ich habe das dazugebucht, aber ansonsten habe ich nur das Netz des Rechenzentrums und das ist sicherlich geschützt, aber nicht privat und dort damals einfach einen offen Port für mysql rumhängen lassen, war nicht das ,was ich dringend wollte und auch heute nicht will.

Also ich kenn das eigentlich nur so, dass man in seinem Netz alleine ist.
 
Also, das knappe 270 Mbit/s zu wenig sind, müssen wir nicht diskutieren. Die große Frage ist nun warum. Switches sind zwar nicht generell unschuldig, aber das ein einigermaßen moderner Switch bei eher geringer Gesamtlast so sehr einbricht ist unwahrscheinlich. Genauso Kabel. Schlechte Verkabelung kann schon sehr bremsen, aber Cat 5e gibt es seit dem schönen Jahr 2001 und alles darüber ist in den meisten Fällen Esoterik. Bleiben also die Betriebssystemkonfiguration und die guten Realtek-NICs. Realtek ist inzwischen nicht der Bodensatz, weil sie ein wenig besser und die Alternativen oft noch schlechter geworden sind, aber die Spitze der technologischen Entwicklung sind sind nicht.

Bei den Netzwerkkarten würde ich auf re1 auf dieser Maschine und auch auf der Gegenseite, sofern dort auch eine Realtek-NIC drinnen ist, mal TXCSUM abschalten. Das ist die Berechnung der TCP Checksum durch die NIC, bei schlechter Implementierung oder zu lahmen Controller ist es deutlich langsamer als in Software zu machen. Gerade Realtek ist da für seine Probleme bekannt:
Code:
ifconfig re1 -txcsum
Aber Achtung, dadurch wird die NIC-Firmware wahrscheinlich rebooten, was das interne Netz für einige Sekunden lahmlegt.

Gibt das keine deutliche Verbesserung wäre noch Paketverlust interessant. Ein gutes Tool da einigermaßen belastbare Daten zu bekommen ist 'mtr': https://www.freshports.org/net/mtr-nox11/ Das ruhig mal ein paar Stunden laufen lassen. Auch interessant sind die Anzahl der genutzten Buffer. Du bekommst sie mit 'netstat -m'. Ich glaube nicht, dass du da ein Problem hast, aber ein Blick schadet ja nicht.
 
Bei den Netzwerkkarten würde ich auf re1 auf dieser Maschine und auch auf der Gegenseite, sofern dort auch eine Realtek-NIC drinnen ist, mal TXCSUM abschalten.

Die Idee hatte ich auch schon, aber leider bringt das keine Unterschiede:
Code:
# iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from C-EXTERN, port 38761
[  5] local S-EXTERN port 5201 connected to C-EXTERN port 47670
[ ID] Interval  Transfer  Bitrate
[  5]  0.00-1.00  sec  83.4 MBytes  700 Mbits/sec 
[  5]  1.00-2.00  sec  87.2 MBytes  732 Mbits/sec 
[  5]  2.00-3.00  sec  86.5 MBytes  726 Mbits/sec 
[  5]  3.00-4.00  sec  87.1 MBytes  731 Mbits/sec 
[  5]  4.00-5.00  sec  87.2 MBytes  731 Mbits/sec 
[  5]  5.00-6.00  sec  87.1 MBytes  731 Mbits/sec 
[  5]  6.00-7.00  sec  87.1 MBytes  730 Mbits/sec 
[  5]  7.00-8.00  sec  75.6 MBytes  634 Mbits/sec 
[  5]  8.00-9.00  sec  84.8 MBytes  711 Mbits/sec 
[  5]  9.00-10.00  sec  86.2 MBytes  723 Mbits/sec 
[  5]  10.00-10.05  sec  4.05 MBytes  730 Mbits/sec 
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval  Transfer  Bitrate
[  5]  0.00-10.05  sec  856 MBytes  715 Mbits/sec  receiver
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from C-INTERN, port 45476
[  5] local INTERN port 5201 connected to C-INTERN port 45477
[ ID] Interval  Transfer  Bitrate
[  5]  0.00-1.00  sec  31.5 MBytes  264 Mbits/sec 
[  5]  1.00-2.00  sec  31.5 MBytes  264 Mbits/sec 
[  5]  2.00-3.00  sec  31.7 MBytes  266 Mbits/sec 
[  5]  3.00-4.00  sec  32.0 MBytes  268 Mbits/sec 
[  5]  4.00-5.00  sec  32.1 MBytes  269 Mbits/sec 
[  5]  5.00-6.00  sec  32.1 MBytes  269 Mbits/sec 
[  5]  6.00-7.00  sec  32.5 MBytes  272 Mbits/sec 
[  5]  7.00-8.00  sec  32.6 MBytes  273 Mbits/sec 
[  5]  8.00-9.00  sec  33.0 MBytes  277 Mbits/sec 
[  5]  9.00-10.00  sec  32.5 MBytes  272 Mbits/sec 
[  5]  10.00-10.05  sec  1.72 MBytes  274 Mbits/sec 
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval  Transfer  Bitrate
[  5]  0.00-10.05  sec  323 MBytes  269 Mbits/sec  receiver
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

^Ciperf3: interrupt - the server has terminated
root@sql2:~ # ifconfig re1
re1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
   options=82099<RXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
   ether ********
   inet INTERN netmask 0xffffff00 broadcast B-INTERN
   nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
   media: Ethernet autoselect (1000baseT <full-duplex>)
   status: active
root@sql2:~ # ifconfig re0
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
   options=82099<RXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
   ether *************
   inet EXTERN netmask 0xffffffff broadcast B-EXTERN
   nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
   media: Ethernet autoselect (1000baseT <full-duplex,master>)
   status: active

mtr habe ich mal installiert, aber das sieht alles nicht nach einem pkg-loss aus.
 
Habe nur überflogen...ich hatte mal einen Switch. Der funktionierte. Ließ aber nur noch 120-180kb/s durch. Bis ich mal überhaupt an den Switch dachte, wurden viele Haare gerupft.

Blöd nur, dass du da nicht selber mal einfach so Hand anlegen kannst. :(
 
Switches sind zwar nicht generell unschuldig, aber das ein einigermaßen moderner Switch bei eher geringer Gesamtlast so sehr einbricht ist unwahrscheinlich.

Das stimmt sicherlich, ich würde dennoch mal nachfragen, ob das Switch für den internen Traffic mal neugestartet werden kann. Also inkl. Trennung vom Betriebsstrom.

Rob
 
Gute Idee. Vielleicht hat er auch tatsächlich ein Problem. Einen kaputten Lüfter, dadurch Überhitzung und er drosselt. Oder sowas.
 
Im ersten ping sieht man ja, dass es vereinzelt sehr langsam wird - aber noch nicht lossy.
Sieht das im mtr auch so aus?
Und ja, auch switche koennen langsam sterben. SNMP verfuegbar? Temperatur..
 
Hier ist der mtr nach ein paar Stunden:

Code:
 Host  Loss%  Snt  Last  Avg  Best  Wrst StDev
 1. INTERN  0.0%  6206  0.1  0.1  0.0 204.4  2.7

Ich werde die Jungs jetzt mal drauf "hetznern" ... :rolleyes:
 
Ein Neustart und ein Tausch des Switches zeigen keinerlei Unterschiede.

Nun bin ich ja noch etwas ratloser als zuvor ...
 
Wie sieht denn die Lage auf dem anderen internen Host aus?
Welche NICs mit welchen Optionen sind dort aktiv?

Was sagt denn auf den Systemen die Ausgabe von netstat -m?

Rob
 
Wie sieht denn die Lage auf dem anderen internen Host aus?
Welche NICs mit welchen Optionen sind dort aktiv?

Da stecken überall dieselben NICs drin und die Einstellungen sind überall gleich.
Die Ausgabe von ifconfig findest Du oben, ich sehe da keine Unterschiede, bis auf das "Master" hinter "Autoselect ..."

Was sagt denn auf den Systemen die Ausgabe von netstat -m?

Code:
# netstat -m
517/7433/7950 mbufs in use (current/cache/total)
514/3582/4096/762412 mbuf clusters in use (current/cache/total/max)
514/3537 mbuf+clusters out of packet secondary zone in use (current/cache)
0/116/116/381205 4k (page size) jumbo clusters in use (current/cache/total/max)
0/0/0/112949 9k jumbo clusters in use (current/cache/total/max)
0/0/0/63534 16k jumbo clusters in use (current/cache/total/max)
1157K/9486K/10643K bytes allocated to network (current/cache/total)
0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters)
0/0/0 requests for mbufs delayed (mbufs/clusters/mbuf+clusters)
0/0/0 requests for jumbo clusters delayed (4k/9k/16k)
0/0/0 requests for jumbo clusters denied (4k/9k/16k)
0 requests for sfbufs denied
0 requests for sfbufs delayed
0 requests for I/O initiated by sendfile
 
Zurück
Oben