TODOs: * Metriken schaffen, die das Problem zeigen * Queues der Interface monitoren * netstat -nua zeigt ansteigende queue länge * siehe auch tc -s qdisc * https://collectd.org/wiki/index.php/Plugin:Netlink * anzahl der verbundenen clients monitoren? * in tabelle 104 aka. reverseroutes stehen Routen zu den VPN-Clients * Nach dem richtigen Netz greppen und wir haben alle VPN-Clients * referenzclient pro vpn um latenz/jitter/loss zu ermitteln? * aus DC und hinter DSL XXX # Problem definition Der Datendurchsatz des VPN03-Service ist teilweise zu gering und es kommt zeitweise zu Paketverlust innerhalb der VPN-Verbindungen. Die Ping-Zeiten sind relativ unterschiedlich (Jitter). # Brain storming * queuing policy ändern? * profiling des openvpn prozesses * kernel profiling? * rcv und snd buffer auf 0 reduzieren auf server+client seite * Kernel-Default-Buffer ev. anpassen? * patch für openvpn: https://community.openvpn.net/openvpn/changeset/f0b64e5dc00f35e3b0fe8c53a316ee74c9cbf15f/ * uebergabe kernelspace-userspace beschleunigen mit compile options? * Kontext-Switche? * MSS-Clamping beim NAT auf einen Wert ~1280 DONE? * OpenVPN mss-fix beim Plastikrouter auf ~1300 * OpenVPN UDP replay window deaktivieren ( --replay-window ) * ev. nicht ohne weiteres möglich, da bei den Clients aktiv * aktiv <-> inaktiv ist inkompatibel? * könnte man vielleicht vom Server pushen?! * no-replay: vpn unbenutzbar [Bad LZO decompression header byte: 0] ** warum haben wir LZO aktiv? 98% des traffics ist HTTP, welches i.d.r. eh schon via mod-deflate komprimiert wird ** LZO ist nur für openvpn tcp konfiguration aktiv * ACKs auf den Plastikroutern priorisieren ( siehe http://www.benzedrine.ch/ackpri.html ) * net.netfilter.nf_conntrack_tcp_timeout_established * hoher timeout führt zu vollem conntrack table * Virtualisierung und iptables saugen süße kleine Hamster durch enge Strohhalme - daran wird sich aber wohl so schnell nichts ändern. * zu viele Clients pro Server - auch daran wird sich erstmal nicht viel ändern * Optimierungen aus http://www.slideshare.net/denshikarasu/all-your-iops-are-belong-to-us-a-pinteresting-case-study-in-mysql-performance-optimization ** jemalloc ** aktueller Kernel ** Xen? irqbalance 1.0.6+ und Receive Packet Steering * --fast-io Option, hört sich schon genial an * testweise auf vpn03d aktiviert * BSD vs Linux ** pfsense BSD basierend schmal lässt sich auch auf z.B. Raspberry Pi betreiben ohne Virtualisierung ** warum pfsense und kein vanilla openbsd? Wir brauchen das fancy webfrontend nicht. ** Problem bei RasPi: CPU und v.a. die besch... Netzkartenanbindung - intern über USB2, was CPU frisst und bei ~25MBit/s dichtmacht (reines IP-Forwarding, noch kein VPN, keine Crypto). ** ALIX Boards mit Intel Atom und 2 Netzwerkkarten http://www.pcengines.ch/alix.htm *** ALIX Boards nutzen AMD Geode aus dem jahr 2005/2007 -> sehr alte hardware ** Jetway boards bringen sogenannte Daughter Boards mit womit man seine Netzwerkkarten aufstocken kann auf bis zu 5 2x onBoard 3x extra http://www.jetwaycomputer.com/NF99.html * SNAT --to-source anstatt kompliziertes HMARKing nutzen * https://github.com/freifunk-berlin/puppet-vpn03/blob/master/templates/roulette.erb#L28 # Metrics ## OpenVPN Konfiguration für Monitoring ping -I dst mtr --address dst dev option sollte vpn03{a,b,c,d} sein remote ebenfalls client dev vpn03a dev-type tun remote vpn03a.berlin.freifunk.net nobind persist-key persist-tun ca freifunk-ca.crt cert freifunk-test.crt key freifunk-test.key ns-cert-type server comp-lzo no cipher none