Stellt sich raus dass das mit dem NAT-freien Tunneldigger auf älteren Kerneln (inkl. Debian stable) nicht richtig klappt, und es ist auch nicht ganz klar (zumindest mir) warum es auf neueren funktioniert… siehe diesen Thread.
commit 82369aa61ec7f3a006f8e687dd0b80c5782f8a83
Author: Willem de Bruijn <willemb@google.com>
Date: Thu Sep 12 21:16:39 2019 -0400
udp: correct reuseport selection with connected sockets
[ Upstream commit acdcecc61285faed359f1a3568c32089cc3a8329 ]
UDP reuseport groups can hold a mix unconnected and connected sockets.
Ensure that connections only receive all traffic to their 4-tuple.
Fast reuseport returns on the first reuseport match on the assumption
that all matches are equal. Only if connections are present, return to
the previous behavior of scoring all sockets.
Record if connections are present and if so (1) treat such connected
sockets as an independent match from the group, (2) only return
2-tuple matches from reuseport and (3) do not return on the first
2-tuple reuseport match to allow for a higher scoring match later.
New field has_conns is set without locks. No other fields in the
bitmap are modified at runtime and the field is only ever set
unconditionally, so an RMW cannot miss a change.
Fixes: e32ea7e74727 ("soreuseport: fast reuseport UDP socket selection")
Link: http://lkml.kernel.org/r/CA+FuTSfRP09aJNYRt04SS6qj22ViiOEWaWmLAwX0psk8-PGNxw@mail.gmail.com
Signed-off-by: Willem de Bruijn <willemb@google.com>
Acked-by: Paolo Abeni <pabeni@redhat.com>
Acked-by: Craig Gallek <kraig@google.com>
Signed-off-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Dieser Fix ist in 5.2.17 und 4.19.75. Sollte also auch irgendwann in Debian und Ubuntu LTS landen.
Hmm. Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-173-generic x86_64) — denke mal nicht, daß das bis 4.4 rückportiert wird/werden kann. Insofern wäre es wünschenswert, die Python2/Python3-Änderungen unabhängig von den reuseport-Änderungen bereitzustellen. (Ja, ich weiß, daß das doof ist und 16.04 eher kurz vorm Ende des Lebenszyklus’ steht. Aber es ist eben auch noch relativ lange eben nicht EOL.)
Es gibt leider weitere Probleme mit dem Entfernen des NAT-hacks.
Ich habe unsere Server inzwischen auf Debian stable (buster) gehoben, der oben erwähnte Fix ist also drin. Und trotzdem spinnt der tunneldigger ohne NAT: wenn mehr als nur 1 oder 2 Nutzer verbunden sind, brechen die Verbindungen zusammen (also es kommen keine Daten mehr durch, zumindest in der Client → Server Richtung) und der Server behauptet irgendwann es gäbe einen Timeout.
Wenn ich jedoch den Backports-Kernel verwende (v5.4.13), klappt es.
Ich habe diesen Kernel-Commit als Fix in Verdacht. Wenn das stimmt, hieße das, man bräuchte mindestens Kernel 5.0 für diesen Fix… und weil man auch den anderen Fix braucht ist es mindestens 5.3.1 (und mainline ab 5.4). Mit älteren Kerneln ist SO_REUSEPORT für UDP einfach zu kaputt, und ohne SO_REUSEPORT gehts nicht (bzw nur mit NAT). Und man fragt sich auch ob man sich auf ein offenbar so fragiles Kernel-Feature überhaupt verlassen will.^^