Gateyway Load Sharing - Statistische Verzögerung eingehender DHCP Pakete

Tom Green koe_fue at gmx.de
Mo Sep 14 18:21:06 CEST 2015


Hallo,

also ich hab mich mal an der Idee versucht (teils zusammen "ge-goggle-d"):

  * Auf dem GW eingehende DHCP Broadcasts werden erkannte, wenn
      o keine IP Adresse (0.0.0.0)
      o an UDP port 67
      o von UDP port 68
  * davon wird jedes "n-te" Paket heraus gegnommen und markiert
  * und dann um 250 ms verzögert

Müsste man versuchen zu testen. Meinungen?

P.S.:

  * Bin mir nicht sicher, wie man die Verzögerung messen kann. Evtl. ein
    Testlauf auf nue1, wobei jedes eintreffende DHCP Paket verzögert wird
  * Noch cleverer wäre es, das DHCPOFFER zu verzögern. Das habe ich
    iptable-technisch aber nicht zu greifen gekriegt
  * Die Batman GW selection sollte nicht so schnell aus dem Rennen, weil
    (a) einfach, (b) vorhanden / out-of-the-box

Gruß...
Torben

=== statistic-dhcp-delay.sh ====
#!/bin/bash

IF=bat0
IFSPEED=10Mbps    # Get from sudo /sbin/ethtool $IF
DELAY=250ms
PORT_C=68         # DHCP Client
PORT_S=67         # DHCP Server
PROTO=UDP         # DHCP IP Protocol
Nth=3             # act on every nth package


#
# Create a tree of classful HTB objects
#
/sbin/tc qdisc add dev $IF handle 1: root htb

#
# Create a classful child bucket with classid 1:11
#
/sbin/tc class add dev $IF parent 1: classid 1:11 htb rate $IFSPEED

#
# Create a qdisc (classless) netem child to provide a delay for packets
in this 'bucket'
#
/sbin/tc qdisc add dev $IF parent 1:11 handle 11: netem delay $DELAY

#
# Filter mangled/marked traffic to the above class
#
/sbin/tc filter add dev $IF parent 1:0 prio 1 protocol ip handle 11 fw
flowid 1:11

#
# Use iptables to mangle TCP packets to port $PORT  and mark packet for
tc filtering
#
#/sbin/iptables -A PREROUTING -t mangle -p $PROTO --source 0.0.0.0
--dport $PORT_S --sport $PORT_C -j MARK --set-mark 11
#/sbin/iptables -A PREROUTING -t mangle -p $PROTO --source 0.0.0.0
--dport $PORT_S --sport $PORT_C -j LOG --log-prefix "Incoming DHCP
traffic: "

/sbin/iptables -A PREROUTING -t mangle -p $PROTO --source 0.0.0.0
--dport $PORT_S --sport $PORT_C -m statistic --mode nth --every $Nth
--packet 0 -j MARK --set-mark 11
/sbin/iptables -A PREROUTING -t mangle -p $PROTO --source 0.0.0.0
--dport $PORT_S --sport $PORT_C -m statistic --mode nth --every $Nth
--packet 0 -j LOG --log-prefix "Incoming DHCP traffic: "





On 11.09.2015 17:50, Michael Sessler wrote:
> Hallo delphiN, > > Ich hätte spontan an ein zufälliges Delay gedacht, so dass per
Zufallsprinzip irgendeiner der Schnellste ist. Statistisch sollte sich
die Last dann verteilen. > Aber wenn man das von der eigenen Systemlast
abhängig machen könnte, wäre es sogar noch cleverer. > Ich finde die
Idee gut. > > DerMichy > > Am 11.09.2015 um 17:06 schrieb delphiN:
> Am 11.09.2015 16:54, schrieb Tim Niemeyer:
> >>> Wer in der Netztopologie am schnellsten den DHCP Request
> >>> beantwortet,
> >>>> wird zum GW. Das ist in der Regel fff-nue. Wer am weitesten weg
> >>>> ist, bekommt fast keine Clients, das ist in der Regel meiner ;)
> Ich hab da auch schon öfters mal drüber nachgedacht.
>
> Ein Ansatz wäre es auf den Gateways einen speziellen DHCP-Server zu
> verwenden, der eine gewisse Zeit abwartet, bis er antwortet.
> Diese kleine Verzögerung könnte man z.B. von der Anzahl der
> VPN-Verbindungen, oder dem aktuellen Netzwerkdurchsatz abhängig
> machen. So könnte man die Last dynamischer verteilen ohne eine
> zentrale Steuerung zu schaffen.
> Wenn Ihr die Idee gut findet würde ich mir das man anschauen.
> Eingelesen hab ich mich schon und halte es für einen gangbaren Weg.
>
> delphiN
>
> -- freifunk at wunschik.net
> delphiN at jabber.ccc.de
> Mitglied: Freie Netze e.V., CCC, Piratenpartei
>
>
> > >


-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20150914/995493a2/attachment-0002.html>


Mehr Informationen über die Mailingliste franken-dev