Apr 23

node.js ist nett. Vor allem, wenn man auf WebRTC/Sockets setzt. Komplex wird es, wenn man das ganze hinter einem Apache betreibt. Habe jetzt 2h damit verbracht die WS irgendwie an den internen node prozess weiterzuleiten, ohne dass socket.io sich verschluckt. Damit nicht der NĂ€chste vor dem selben Problemchen steht und Stunden versenkt, hier der relevante Teil der apache-conf:

Annahmen:

  • Der interne node.js-prozess horcht auf Port 6543
  • Alles was Websocket ist, wird via /socket.io abgewickelt und hat auch den Transportheader auf „websocket“

<IfModule mod_proxy.c>
  RewriteEngine On
  ProxyVia On
  ProxyRequests Off
  ProxyPreserveHost on
  
  RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
  RewriteCond %{QUERY_STRING} transport=websocket    [NC]
  RewriteRule /(.*)           ws://internal.etherpad.ip:6543/$1 [P,L]
  ProxyPassReverse /socket.io ws://internal.etherpad.ip:6543/socket.io
  
  RewriteCond %{REQUEST_URI} !^/p/
  RewriteCond %{REQUEST_URI} !^/static/
  RewriteCond %{REQUEST_URI} !^/ep/
  RewriteCond %{REQUEST_URI} !^/minified/
  RewriteCond %{REQUEST_URI} !^/api/
  RewriteCond %{REQUEST_URI} !^/ro/
  RewriteCond %{REQUEST_URI} !^/error/
  RewriteCond %{REQUEST_URI} !^/jserror
  RewriteCond %{REQUEST_URI} !/favicon.ico
  RewriteCond %{REQUEST_URI} !/robots.txt
  
  ProxyPass / http://internal.etherpad.ip:6543/ 
  ProxyPassReverse / http://internal.etherpad.ip:6543/
  <Proxy *>
    Options +FollowSymLinks -MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  <Proxy>
<IfModule>

									

Tagged with:
Feb 28

Lange nichts mehr aus der Welt der Elektronik hier gepostet. Also dann mal 🙂

Es gibt seit 2-3 Jahren 5050-LED-Stripes (oder auch einzelne LEDs) mit aufgelötetem Controller (in SMD). zB diese hier. Das Coole an den Dingern ist, dass die ĂŒber 3 AnschlĂŒsse verfĂŒgen (+5V/GND Data-In, bzw. Data-Out) und man mit diesen 3 AnschlĂŒssen zig StĂŒck aufmal ansteuern kann. Technisch funktioniert die Schnittstelle so, dass man auf den D-In-Port des Strips ein 800kHz-Signal gibt, mit dem man dann jeder LED einzelnd den R/G/B-Wert mitgeben kann. Lauflichter, Uhren, alles was sich blinkt und bewegt sind damit also kein Problem. In der Community gibt es zig Libraries, die das Leben mit dem Ding etwas einfacher gestaltet. Hervorheben möchte ich die FastLED-Lib. Die ist zwar relativ gross (Ein Arduino/ATMEL mit min. 16kB Flash sollte es schon sein), man hat dafĂŒr aber an nahezu alles gedacht.

Im Code werden die LEDs per Array angesteuert. Das ist quasi ein Array of Arrays (untendrunter liegen noch jeweils 3 Elemente fĂŒr RGB).

Jetzt hat der Arduino/ATMel als solches ein kleines Problem mit der Genauigkeit der internen Uhr. Um das zu umschiffen, gibt es RTC’s die per SPI ansteuerbar sind. 5er Pack am Fluss fĂŒr ca. 10 Euro. Die Dinger sind deartig PrĂ€zise, dass ich – nach jetzt 1,5Monaten keinerlei (sichtbare) Abweichung feststellen kann. Zum Vergleich: Ohne RTC lief der Arduino nach etwa 24h um 30sek. falsch. Klar kann man versuchen den mC mit ein paar Tricks (bspw. dem OSCCAL) zu eichen. Aber sobald sich die Umgebungstemperatur Ă€ndert, war es das auch wieder.

Nun, was kommt raus? Kombiniert man, die bei Adafruit erhÀltlichen, 2812-Viertelkreise mit einem Arduino Pro micro, IKEA-Bilderrahmen, ein wenig Handarbeit und einem externen(!) 5V-Netzteil (die LEDs saugen da etwas) eine nette Uhr:


Den entsprechenden Code (schmutzig, as usual 🙂 ) hab ich mal bei  github abgelegt.

Tagged with:
Feb 13

Zuletzt hab‘ ich mir vor ca. 9Jahren radikales Umlernen angetan. Damals bin ich von dem German-Keyboard Layout auf US-ANSI umgestiegen. Die Sonderzeichen zum Coden waren einfach viel leichter zu erreichen. Waren etwa 3 Wochen Schmerz, danach lief es wie am SchnĂŒrchen. Ich will auch nicht mehr mit nem deutschen Keyboard arbeiten 🙂

Einzig die Eigenheiten von OSX/Linux/Windows haben etwas genervt (Win: Layout per ALT-SHIFT_L umschalten um Umlaute tippern zu können // OSX: Sehr angenehm per Modifier-Key (Mod-“ und dann a,u oder o))

Dummerweise ist mein Model-M damals auf der Strecke geblieben, und musste einem Mac-Keyboard weichen. Hab zwar noch mal ein paar AnlĂ€ufe gestartet, und die Keycaps auf US-INTL gewechselt, war aber irgendwie nichts…

Nun ist es mal wieder an der Zeit etwas neues auszuprobieren. Ein 60% Mechanical-Keyboard. Ca. 2 Monate bin ich um das HHKB herumgetingelt und hab mich am Ende dann doch gegen das Teil entschieden. HĂ€ngengeblieben bin ich Schlussendlich beim Vortex Pok3r, fĂŒr knapp 150Euro – nicht gerade billig.

vortex

Gut, was gibt es fĂŒrs Geld?

  • MX-Schalter (in jeglicher AusprĂ€gung, meine Wahl fiel auf blues)
  • Backlight.
  • Ordentliche (+replaceable) Keycaps.
  • 4 Layer, die schnell umschaltbar sind und bis auf einen frei programmierbar sind (ohne Treiber, oder sonstigen Foo). Die Programmierung lĂ€sst, neben Makros, die freie Belegung von Tasten zu.
  • Alu-„Wanne“ in der die Tastatur befestigt ist.
  • Austauschbare USB-Strippe (Die Poker 3 selbst verfĂŒgt ĂŒber einen Mini (NICHT Micro!) USB Port)
  • All in all: Eine extrem wertige Tastatur (und wenn ich wertig sage, meine ich das auch. Also wertig im Sinne von: „MacBook Unibody ist gut verarbeitet…“.
  • 500g solide Tastatur halt.

Was gibt es nicht, bzw. was macht den Reiz aus?

  • F-Tasten – die fehlen komplett. Sind aber bspw. per „FN+1“ (=F1) erreichbar. Das hatte ich mir persönlich schwieriger vorgestellt. Klappt aber super.
  • Multimedia-Keys. Hab ich – bis auf Laut/Leise – eh immer fĂŒr extrem ĂŒberflĂŒssig gehalten. Am besten noch ’ne EMailtaste, oder wie? Dank der Programmierbarkeit kann man sich den Kram auch auf FN+Irgendwas legen.
  • Cursor-Tasten. Das ist – ehrlich gesagt – der grösste Einschnitt. Ich kĂ€mpfe nun nach ca. 3 Tagen immer noch. Da ich recht viel im vim Arbeite, habe ich mich dazu entschieden das Cursormovement auf HJKL zu legen. Jetzt rĂ€cht es sich, dass ich Jahrelang im vi mit den „normalen“ Cursorkeys navigiert habe. Gut, das wird sicher schon. Alternativ kann man sich, wenn man viel navigieren muss, immer noch die Cursortasten nativ (also ohne FN) auf Layer2 und dann WASD legen. Ein nettes Feature, dass ich gestern Abend erst entdeckt habe: R_ALT+Space macht R_CTRL,PN,FN und R_SHIFT zu Cursortasten. Nochmal auf R_ALT+Space gedrĂŒckt, und die Tasten sind wieder das, womit sie beschriftet sind.
  • Der gesamte Block Home/End/PgUp/PgDn fehlt ebenfalls. Auch hier ĂŒbe ich noch mit FN+N (zB fĂŒr End).

Das Teil macht derartig laune, dass ich gar nicht aufhören möchte zu tippen. Man wird auch echt kreativ damit (das war ja der Zweck des Spiels). Bspw. habe ich mir fĂŒr den Chrome das vimium-Plugin installiert. Mit dem Teil bedient man den Chrome weitesgehends per Keyboard ĂŒber die bekannten vim-KeyBindings. Das auf der Bash „set -o vi“ da schon obligatorisch ist, versteht sich vermutlich von selbst 🙂

Wer sich also selbst mal wieder einen Tritt verpassen will, um vielleicht mehr vim-Keybindings in den Kopf zu bekommen, mehr Platz auf dem Schreibtisch zu haben, RechnerunabhÀngige Makros bauen will oder auch einfach nur eine extrem feine mechanische Tastatur sein Eigen nennen möchte, dem sei die Pok3r ans Herz gelegt.

WeiterfĂŒhrende Links? Klar:

  • Reddit-Post, in dem beschrieben wird, wie man das Ding möglichst vim-gerecht umkonfiguriert.
  • Hersteller (Vortex) – dort gibt es manual und firmware-update – Treiber sind, wie oben beschrieben – nicht notwendig.
  • Vergleich der verschiedenen MX-Schalter.
  • Blog ĂŒber mechanische Keyboards (gute Einstiegsmaterie)

[Update 28.02.2015]

So, nun habe ich das gute StĂŒck seit ca. 2 Wochen. Was soll ich sagen? Jedesmal, wenn ich eine Rubberdome in den Fingern habe (auch so ein flaches Apple-Dings), denke ich: OMG! Mit anderen Worten ausgedrĂŒckt gewöhnt man sich sehr schnell (wieder) an mechanische Tasten. Einzig das Profil der KeyCaps ist etwas ungewohnt. LiebĂ€ugele momentan mit DSA-KeyCaps (z.B. diese hier von Signature Plastics). Haken ist: Der Markt fĂŒr Caps existiert – ernstzunehmend – scheinbar ausschliesslich in den Staaten. In Europa bekommt man nur Ducky/Shiny-Caps. Die mögen fĂŒr Gamer recht sein, fĂŒr „Vieltipper“ nicht.

So richtig geblickt habe ich das mit den unterschiedlichen Profilen aber noch nicht. Bei Logitech gibt man die Profile in „R“ows an, bei SP in DSA, SA, usw. Ein guter Anlaufpunkt, bei dem man aber definitiv Geduld mitbringen sollte, ist massdrop. Massdrop ist so eine Art Genossenschaftseinkauf. D.h. mehrere Interessenten schliessen sich zusammen, und wenn 200 Leute zusammengekommen sind, geht man auf den Hersteller zu, sodass dieser eine Kleinserie auflegt. Mal schauen, ob da was fĂŒr mich dabei ist.

Tagged with:
Dez 13

Hat man zwei ipv6-uplinks ist es wichtig, dass Connections die ĂŒber Provider „A“ reinkommen, auch ĂŒber Provider „A“ wieder rausgehen. Mit den default-settings ist das nicht der Fall. Wenn dort etwas via „A“ reinkommt, die default-route aber „B“ ist, versucht der Router die Antwortpakete via „B“ rauszurouten. Das geht idR schief, da der ISP meint man wĂŒrde die IP faken. Aber es gibt Abhilfe:

Folgendes SetUp nehmen wir mal an:

ppp0 (Telekom): 2003:1::2 mit aktiver default gw ppp0
eth0 (sixxs): 2001:2::2 mit NICHT aktiver default-GW 2001:2::1
									

Alles was nun via eth0 (hinter dem der sixxrouter irgendwo hÀngt) reinkommt, will linux via ppp0 beantworten.

Lösung: Eine rule anlegen:

echo "100 sixxs" >> /etc/iproute2/rt_tables
/sbin/ip -6 rule add from 2001:2::/64 lookup sixxs
/sbin/ip -6 route add default via 2001:2::1 dev eth0 table sixxs

									

Der Output von route und rule sollte am Ende dann wie folgt aussehen:

router:~# ip -6 rule
0:  from all lookup local 
16383:  from 2001:2::/64 lookup sixxs 
32766:  from all lookup main

router:~# ip -6 route
2001:2::/64 dev eth0  proto kernel  metric 256 
2003:1::2 dev ppp0  proto kernel  metric 256 
default via fe80::10ca dev ppp0  metric 1024  initcwnd 10 initrwnd 10

router:~# ip -6 route list table sixxs
default via 2001:2::1 dev eth0  metric 1024
									

 

Tagged with:
Mai 31

ipv6 ist nett. Aber der User bekommt halt jedes mal idR ein /64 Subnet. FĂŒr so Tools wie fail2ban, die einzelne IPs blocken, wenn irgendetwas komisches auftaucht irgendwie schlecht. Der Angreifer schnappt sich halt irgendeine neue IP, denn die unteren 64bit stehen ja voll zu seiner VerfĂŒgung.

Jetzt verhĂ€lt es sich mit dem originalen fail2ban so, dass das nicht mal ipv6 kann. Zeit sich auf die Suche zu machen. In einem github-Repo bin ich fĂŒndig geworden. Der gute Mensch hat fail2ban so erweitert, dass es v6-fĂ€hig wird. Also flugs mal installiert, um direkt die ErnĂŒchterung zu spĂŒren: Es blockt mit /128 🙁

Also erweitern:

Die /etc/fail2ban/action.d/iptables-46-multiport-log.conf passen wir wie hier in diesem gist sichtbar an. Hinzugekommen ist lediglich <mask> bei der ban und unban-Regel sowie unter init. Das bedeutet, dass – sofern nicht anders angegeben – immer eine /32er CIDR-Mask gelegt wird, also die gesamte v4-IP (bei v6 halt ebenfalls /32 – aber dazu spĂ€ter mehr) geblockt wird.

Da die fail2ban-Variante von „usrweiss“ im Wrapperscript nicht so granular zwischen v4 und v6 differenzieren kann, als dass wir da andere cidr-Masken drauflegen könnten, legen wir einfach in der /etc/fail2ban/jail.conf ZWEI Jails an:

[web_v4]
enabled = true
filter  = web_v4
action = ip64tables-multiport-log[name=web_v4, protocol="tcp", port="80,443", mask=32]
logpath = /var/log/apache2/web_f2b/fails.log
maxretry= 5
bantime = 60
findtime= 60

[web_v6]
enabled = true
filter  = web_v6
action = ip64tables-multiport-log[name=web_v6, protocol="tcp", port="80,443", mask=64]
logpath = /var/log/apache2/web_f2b/fails.log
maxretry= 5
bantime = 60
findtime= 60

									

Die benötigen wiederrum auch 2 Configs in der /etc/fail2ban/filter.d:

/etc/fail2ban/filter.d/web_v4.conf:

# Fail2Ban configuration file
#
#
# $Revision: 250 $
#

[INCLUDES]

[Definition]

failregex = Applikation: v4 (<HOST>) Detaillierte Fehlermeldung .*

									

/etc/fail2ban/filter.d/web_v6.conf:

# Fail2Ban configuration file
#
#
# $Revision: 250 $
#

[INCLUDES]

[Definition]

failregex = Applikation: v6 (<HOST>) Detaillierte Fehlermeldung .*

									

Der Haken ist, dass unsere Applikation, die die Events auslöst (hier eine Loginseite, die die Fehlversuche nach /var/log/apache2/web_f2b/fail.log wegschreibt) an die Zeile dranschreiben muss, ob es sich um v4 oder v6 handelt. Bezogen auf die o.g. Configs sieht das in dem fail.log der App so aus (Von der Applikation generierte EintrÀge. Erster: v6, zweiter v4)

[May 31 10:08:12] Applikation: v6 (2a03:2880:2130:cf05:face:b00c:0:1) fehlerhafter Loginversuch blabla
[May 31 10:09:12] Applikation: v4 (173.252.120.6) fehlerhafter Loginversuch blabla
									

Von nun an blockt fail2ban die Ports 80 und 443 sobald in der Logdatei der Applikation (/var/log/apache2/web_f2b/fail.log) 5 mal innerhalb von 60 Sekunden die selbe IP mit einem Fehler aufschlĂ€gt fĂŒr 60 Sekunden. Und zwar bei einer v4 halt die v4, bei einer v6 das /64er Subnet der v6. Die gerade greifende Netzmaske wird in der/etc/fail2ban/jail.conf als Variable „mask“ in der action mit angegeben – sollte dort nichts stehen, gilt der Defaultwert von /32 aus der iptables-46-multiport-log.conf

 

Wie ĂŒblich, geht das sicherlich noch eleganter. Bin gespannt, wann fail2ban endlich eine v6-Variante releast.

Tagged with:
Mai 24

Wie hier im Blog schon beschrieben, habe ich mir mit einem Pi A einen kleinen Statusscreen gebastelt, der sich immer dann anschaltet, wenn jemand in die nĂ€he des Pi’s kommt. Realisiert wurde das mit der PiCam – basierend auf HelligkeitsĂ€nderungen beim Snapshot. Soweit so gut. Seit 2 Monaten hĂ€ngt sich der olle Pi jedoch regelmĂ€ssig auf. So schlimm, dass ich Ihm einen crontab-Eintrag verpasst habe, mit dem er jede Nacht neu bootet.

Zeit der Sache mal auf den Grund zu gehen. Das Problem war: Zu wenig RAM. Der Pi A hat gerade 256MB davon (eigentlich mehr als genug, fĂŒr soetwas). Dummerweise hĂ€ngt in PiCam direkt an der GPU des kleinen Rechners. Was bedeutet, dass man dem Ding in der /boot/config.txt den Parameter gpu_mem=128 mitgeben muss. Heisst: 128MB fĂŒr die GPU (drunter funktioniert die cam nicht) und 128MB fĂŒr das OS. Sofern man nun nicht eine extraschlanke Distribution mit busybox und dem ganzen Small-Mem-Footprint-gedönse nutzt, ist das verdammt mau. Erst recht mit der extrem aufgeblasenen Raspianedition.

Also mussten LösungsansĂ€tze her. Die Cam mit weniger als 128MB GPU-RAM zu betreiben funktioniert also schon mal nicht. Dann halt komplett anders.  FĂŒr gerade mal 1,10 Euro/StĂŒck gibt es bei Amazon PIR-Sensoren. PIR steht fĂŒr Pyroelektrische Passive Infrarot Sensoren. Die Dinger, die man aus den Bewegungsmeldern an Aussenlampen kennt. Das besondere an diesen PIRs ist, dass sie out-of-the-box mit dem Pi ĂŒber GPIO spielen können.

Obwohl das Chinaware ist, ist es relativ gut dokumentiert. In dieser Grafik findet sich alles, was man wissen muss:

Wir sehen zwei Potentiometer, mit denen man die Empfindlichkeit und eine Art „Nachlaufwert“ einstellen kann. Den Timer stellt man am besten auf „0“ (Anschlag ganz links), das „Distanz“-Poti nach Gusto. Nun zum elektrischen:

  • VCC bei dem Ding ist 5V – der kommt also an PIN2 des GPIO’s (+5V OUT)
  • GND auf GND – PIN 6
  • OUT ist der PIN, der „HIGH“ wird, wenn sich was vor dem Sensor bewegt. Und coolerweise spuckt das Ding ca. 3,3V aus – also genau richtig fĂŒr den GPIO. Den hĂ€ngen wir an GPIO18 (PIN 12)

Hier eine Übersicht der GPIO-PINs des raspis:

Nach dem das nun alles Erledigt ist, geht es zum simpleren Teil. Der Software. Ich habe das ganze, wie bereits beim Cam-Script in Python realisiert:

#!/usr/bin/python
import subprocess
import os
import time
import RPi.GPIO as io
from datetime import datetime
delay=60
monitor='on'
pir_pin = 18
io.setmode(io.BCM)
io.setup(pir_pin, io.IN)         # activate input

def turnMonitorOn(extrarg):
  global monitor
  monitor='on'
  subprocess.call("/usr/bin/screen.sh on "+extrarg, shell=True)

def turnMonitorOff(extrarg):
  global monitor
  monitor='off'
  subprocess.call("/usr/bin/screen.sh off "+extrarg, shell=True)
   
# Reset last capture time
lastCapture = time.time()
# added this to give visual feedback of camera motion capture activity.  Can be removed as required

while True:
  time.sleep(0.5)
  if io.input(pir_pin):
    lastCapture = time.time()
    if (monitor == 'off'):
      turnMonitorOn("y")

  if (time.time()-lastCapture > delay):
    if (monitor == 'on'):
      turnMonitorOff('x')

									

In der Variable „delay“ kann man einstellen, wie lange der Screen nach einer Bewegungserkennung angeschaltet bleiben soll. Es sind natĂŒrlich auch andere Pins als GPIO18 möglich (bspw. GPIO4 / Pin7)

Das Shellscript, „screen.sh“ ist dasselbe, wie im Cam-Post:

#!/bin/bash
tvstat=$(tvservice -s |grep off)
if [[ $tvstat == *off* ]]; then
TV=OFF
else
TV=ON
fi

if [ "$1" == 'on' ] && [ "$TV" == "OFF" ]; then
/usr/bin/tvservice -p;
#fbset -depth 8;
#fbset -depth 16;
chvt 2;
sleep 1
chvt 1;
chvt 2;
chvt 1;
#echo 'Switched Screen ON!'
fi
if [ "$1" == 'off' ] && [ "$TV" == "ON" ]; then
/usr/bin/tvservice -o
echo 'Switched Screen OFF!'
fi

									

Nun noch in der /boot/config.txt den Wert gpu_mem auf 32 oder gar 16 stellen, rebooten, und wir haben wieder mehr als genug RAM. Dass die CAM nun nicht mehr funktioniert, sollte jedem klar sein – aber das war ja auch Sinn und Zweck der Sache.

Tagged with:
Mai 02

FĂŒr mich selbst als Merker, damit ich das nĂ€chste mal nicht wieder in Panik ausbreche.

Besonderheiten beim „Internet“ via Telekom Hotspot:

  • Öffentliche IP’s gibt es per se nicht – man bekommt irgendwas privates aus dem 10er-Space zugewiesen.
  • V4 only
  • Jede Ziel-IP (egal ob Online oder Offline) ist aus dem Hotspot-Netz ein DNS-Server. FĂŒhrt zu leichten Panikattacken, wenn man meint seine eigenen Kisten von aussen damit auditieren zu wollen. Vermutung: Alles was auf Port 53 rausgeht, wird von der T abgefangen und dann unter falscher Flagge beantwortet, als wĂ€re es ein openrelay.

Besonderheiten beim „Internet“ via Telekom LTE:

  • Öffentliche IP’s gibts mit LTE nicht mehr (LTE akzeptiert ausschliesslich „internet.telekom“ oder „internet.t-mobile“ als APN – und da gibts halt nur „Private-Address-Space“)
  • v4 Only
  • Port 80 und Port 8080 unterliegen irgendeiner Art Deep-Packet-Inspection (kann nur raten, ob das was mit diesem Zwangsproxy zu tun hat, der jpgs/gifs noch mal nachkomprimiert hat). Fakt ist: Egal ob die Ziel-Adresse offline ist, oder gar keinen Dienst auf den beiden Ports anbietet – es gibt IMMER einen sauberen 3-Wege Handshake. Interessant in dem Zusammenhang: Irgendein Netzelement leitet die Anfragen (so denn die „Echte Ziel-IP“ online ist, und auch n Listener hat) mit leichtem Delay an die Richtige IP weiter. Wenn Ziel-IP offline / kein Dienst, gibts ein „FIN“ per TCP – aber erst nach erfolgtem SYN/SYNACK/ACK.
Tagged with:
Apr 26

Ich betreibe hier seit ĂŒber einem Jahrzehnt ein paar von diesen netten gĂŒnstigen Dallas-1-Wire Dingern (DS1820) an einer Linuxkiste mit samt USB-Host-Adapter im sog. „Parasite-Mode“ (Ausser GND und Data benötigt man da nichts, und kann ein paar von den Sensoren – an bspw. im Haus liegenden Telefonkabeln – abfragen).

Der USB-Host-Adapter ist eigentlich ĂŒberflĂŒssig, da der Pi das mit seinen GPIO’s von Haus aus kann. Und das ganze ist derartig trivial, dass ich es hier kurz erklĂ€ren will. Man nehme:

  • den o.g. DS1820 (da gibts div. Variationen von, die sich in der PrĂ€zision unterscheiden – kosten ca. 2 Euro)
  • Einen Pi – mit Linux drauf.

 

Den 1820 wie folgt mit dem Pi verbinden:

GND auf GND // Vdd auf 3,3V // VDQ (Data) auf GPIO 4

(Hier eine Ansicht des 1820, und hier eine des GPIO-Ports vom Pi)

Dann ab auf die Shell und kurz 2 Kernel-Module nachladen:

 pi@rasbberrypi ~ $ sudo modprobe w1-gpio pullup=1
 pi@rasbberrypi ~ $ sudo modprobe w1-therm
									

Wenn alles richtig gelaufen ist, gibt es unter /sys/bus/w1/devices nun ein neues Verzeichnis mit der Unique-ID des 1820 (Die haben alle eine Art Mac-Adresse, die die einmalig macht) in dem wiederum eine Datei mit dem Namen „w1_slave“ liegt. Angenommen der 1820 hat die ID „28-0000041234567“ so heisst unsere Datei : „/sys/bus/w1/devices/28-000004593386/w1_slave“. Wenn man sich diese anzeigen lĂ€sst (zB via cat), kommt (etwas unsexy) der platte Temperaturwert als ASCII zum Vorschein.

Den hĂŒbschen wir nun noch auf, und schon haben wir einen Wert, den man weiterverarbeiten kann (snmp, website, wo auch immer):

cat /sys/bus/w1/devices/28-000004593386/w1_slave |\
grep -e 't=' | \
awk -F't=' '{print $2}'
									

GĂŒnstiger kann man keine Temperaturen messen – und erweiterbar und flexibel ist es auch noch. (Es sei denn man will unbedingt 100 Euro fĂŒr das neueste, hippe, bunte Temperaturmessdevice, dass nur mit App lĂ€uft, ausgeben und die Werte alle Nasen lang in die Cloud pumpen…)

Tagged with:
Apr 18

Spareribs(Rezept ist fĂŒr ca. 6 StĂŒck):

Man nehme:

  • Trockenrub (entweder selbst mixen, oder aber bspw MagicDust fertig kaufen)
  • Rippchen
  • Zum DĂŒnsten:
    • Apfelsaft (ca. 900ml)
    • Apfelessig (ca. 8 EL)
  • FĂŒr die BBQ-Sauce:
    • 250 ml Heinz-Tomatenketchup
    • 150 ml Apfelsaft
    • 5 EL Apfelessig
    • 2 EL braunen Rohrzucker
    • 2 EL Rohrzuckersirup
    • 1 EL Worcestersauce
    • 1 TL gerĂ€uchertes Paprikapulver
    • 1/2 TL gemahlener KreuzkĂŒmmel
    • 1/2 TL frisch gemahlener schwarzer Pfeffer
    • 1/2 TL Chilipulver

 

Auf gehts:

  1. Einen Abend vorher die Rippchen von der Knochenhaut befreien, und großzĂŒgig mit dem Rub einreiben. Manche Menschen legen die Rippchen vorher noch 2-3h in Apfelessig/Apfelsaft ein – muss man aber nicht. Mit diesem Rezept hier werden die Dinger eh butterzart.
  2. Rippchen eng in Frischhaltefolie einwickeln und ab in den KĂŒhlschrank damit
  3. Am nĂ€chsten Tag (t-6h) den Kugelgrill mit dem berĂŒhmten Minionring bestĂŒcken und an einer Seite anfeuern. Ich stelle in die Mitte meist eine Abtropfschale die schon mal mit heissem Wasser vorbefĂŒllt ist.
  4. Grill mit Hilfe der unteren Regelschieber so auf 120Grad einstellen (Da sollte der Grill die ganze Zeit – also 6h – drauf verharren // +/- 10Grad sind nicht tragisch!)
  5. Rippchen auf den Grill. Ich nutze den IKEA-Deckelhalter. Ist Edelstahl und top um die Rippchen hineinzustellen.
  6. Nun 1h lang in Ruhe lassen (Wie o.g. 120Grad +/- 10).
  7. Jetzt ist es an der Zeit die 900ml Apfelsaft (Direktsaft / Naturbelassen) und 8EL Apfelessig zusammenmixen. Die Rippchen nun alle 30min. (Also bei 1:00, bei 1:30, bei 02:00 und bei 2:30) mit dem Mix bestreichen (Moppen). Das macht die Leitern fein zart. Bitte nicht den Rub abwaschen 🙂
  8. Jetzt sollten wir Halbzeit haben. Die ĂŒbrigen 890ml Apfeldings kommen jetzt in einen BrĂ€ter mit Rost. Die Rippchen auf den Rost drauf und das ganze Paket recht dicht mit Alufolie verschliessen. Achtung: Nicht jedes Rippchen einzelnd, sondern den gesamten BrĂ€ter mitsamt dem Fleisch.
  9. Nun wieder fĂŒr 2h ab auf den Grill mit dem BrĂ€ter (indirekt in die Mitte). Den Deckelhalter brauchen wir spĂ€ter noch mal. Also nicht in die SpĂŒlmaschine oder sowas.
  10. Nach zwei Stunden (t-1 / 05:00) öffnen wir das Paket und entnehmen die Jungs aus dem BrĂ€ter (vorsichtig! Die sind jetzt schon Butterzart und fallen fast vom Knochen). Jedes Rippchen wird jetzt einzelnd mit der o.g. BBQ-Sauce (Mixen, aufkochen, fertig  😀 ) eingestrichen. Nicht zimperlich sein. Das ist quasi das Finish (Der Fachmann spricht vom glasieren).
  11. Jetzt eine Stunde lang die eingestrichenen Rippchen wieder auf den Deckelhalter in den Grill (der muss immer noch 120Grad haben).
  12. Fertig!

 

Bon(n) Appetit.

 

PS: Da ich schon so viel Zeug vom großen Fluss (Amazon) hier verlinkt habe noch ein kleiner Tip: Als Thermometer hab ich so ein Maverick-MV-ET-733. Kann ich wĂ€rmstens weiterempfehlen. Zwei Sensoren (Eins fĂŒr den Garraum, eins fĂŒr Kerntemperatur (bei den Rips nicht ganz so wichtig)), ultimative Reichweite, und ganz wichtig: Temperaturalarme. Bei den o.g. Rippchen hab ich den Alarm auf 110 und 130Grad gestellt, und mich wĂ€hrend der DĂŒnstphase (9) auf die Couch geflĂ€zt – entspannter geht es kaum.

Dez 26

In einem der tmux-Fenster des letzten Beitrags lÀuft ein tail auf das squid-access.log.
Dummerweise zeigt das tail nach einem logrotate nichts mehr an, da das Filehandle vom tail ja auf das „rotierte“ log zugreift.
Fein wĂ€re doch ein kleines Script, dass, sobald im geöffnet Filehandle nichts mehr kommt, die Datei „reopened“ und dann weiter anzeigt.

Bitte sehr (Perl // Modul File::Tail vorrausgesetzt):

#!/usr/bin/perl
use File::Tail;
use Socket;
use strict;
$|=1;
my $logfile="/var/log/squid-access.log";
my $file=File::Tail->new(name=>$logfile, maxinterval=>300, adjustafter=>7);
while (defined(my $line=$file->read)) {
        my @liner=split(' ',$line,-1);
        my $host='';
        $host=gethostbyaddr(inet_aton($liner[8]), AF_INET) or $host=$liner[8];
        my @hostname=split(/./,$host); # Split FQDN at dots
        $host=$hostname[0];             # Get Lowest Domainname
        my @hosts=split(/./,$liner[8]);# Split IP at dots
        my $loctet=$hosts[3];           # Get last Octet
        printf "%s %3s %st%sn",$liner[2],$loctet,$host,$liner[12];
}
									

Das Ding zieht gleichzeitig die wichtigsten Infos aus dem Log. NĂ€mlich den Timestamp, das letzte Octet der IP, sowie den ersten Part des Reverse-DNS-Namens.

Tagged with:
Dez 23

Es ist mal wieder Zeit fĂŒr ein kleines Urlaubsprojekt.
Hier lag seit 3 Jahren, neben einem RaspberryPi und nem alten 17″ Eizo-Screen, so ein Wandhalter fĂŒr TFT-Screens herum. Da kann man doch was raus machen.

Also fix den Wandhalter an die Wand gedĂŒbelt und den Pi mit NFS-Root (siehe Eintrag hier) aufgesetzt.
Der Pi selbst ist mit dem Cam-Modul ausgestattet, und hÀngt per HDMI 2 DVI an dem o.g. Eizo.

Folgende Ziele habe ich verfolgt (und umgesetzt):
– Autologin nach reboot, sowie automatisches einloggen auf nem Server und attachen an tmux
– Sobald sich was vor der Cam bewegt, soll der Monitor „aufwachen“, nach 60s. wieder ausgehen.

Ist an sich recht einfach. Fangen wir mal mit dem Autologin an:
via /etc/inittab sagen wir dem Pi, dass er sich – anstelle des logins – auf dem tty1 als „pi“ einloggen soll:

#1:2345:respawn:/sbin/getty --noclear 38400 tty1
1:2345:respawn:/bin/login -f pi tty1 /dev/tty1 2>&1

Dazu die obere Zeile auskommentieren, und die untere einfĂŒgen.
Nach einem reboot sollte der pi nun direkt auf der Shell als User „pi“ landen.
Alles weitere (ssh-login) und Co. machen wir in der ~pi/.bashrc (letzte Zeile einfach anfĂŒgen)

ssh -t [user]@[machine wo tmux rennt] "tmux att"

Nun sollte nach dem Reboot (ssh-keys und laufender tmux auf „machine“ vorrausgesetzt) direkt der tmux erscheinen. Den kann man dann vom „normalen“ Rechner aus mit content bestĂŒcken (top, iftop, tail aufs log, etc.)

Wer noch Hintergrundbild und höhere Auflösung auf dem pi haben möchte, dem seit fbterm ans Herz gelegt.

Weiter gehts mit der „Motiondetection“. Dazu habe ich mir erstmal ein kleines Shellscript gebaut, welches den Monitor an/ausschalten kann, und dieses unter /usr/bin/screen.sh abgelegt:

#!/bin/bash
tvstat=$(tvservice -s |grep off)
if [[ $tvstat == *off* ]]; then
TV=OFF
else
TV=ON
fi

if [ "$1" == 'on' ] && [ "$TV" == "OFF" ]; then
/usr/bin/tvservice -p;
#fbset -depth 8;
#fbset -depth 16;
chvt 2;
sleep 1
chvt 1;
chvt 2;
chvt 1;
#echo 'Switched Screen ON!'
fi
if [ "$1" == 'off' ] && [ "$TV" == "ON" ]; then
/usr/bin/tvservice -o
echo 'Switched Screen OFF!'
fi

Nicht von den chvt verwirren lassen. mit tvservice wird der Monitor an/ausgeschaltet, mit chvt auf das entsprechende (Virtuelle) Terminal umgeschaltet. Quasi das Shell-pendant zu „ALT-F1 bis ALT-F10“ zum Console wechseln. Ohne das hin- und herschalten via chvt geht der Moni zwar an, aber es wird nichts angezeigt.

Die eigentlich Motiondetection ist in Python gebastelt (wie ĂŒblich: Kurz und schmutzig):

#!/usr/bin/python
import StringIO
import subprocess
import os
import time
from datetime import datetime
from PIL import Image
threshold = 10
sensitivity = 180
monitor='on'

# Capture a small test image (for motion detection)
def captureTestImage():
    command = "raspistill -n -w %s -h %s -t 1 -e bmp -o -" % (100, 75)
    imageData = StringIO.StringIO()
    imageData.write(subprocess.check_output(command, shell=True))
    imageData.seek(0)
    im = Image.open(imageData)
    buffer = im.load()
    imageData.close()
    return im, buffer

def turnMonitorOn():
  global monitor
  monitor='on'
  subprocess.call("/usr/bin/screen.sh on", shell=True)

def turnMonitorOff():
  global monitor
  monitor='off'
  subprocess.call("/usr/bin/screen.sh off", shell=True)

# Get first image
image1, buffer1 = captureTestImage()
# Reset last capture time
lastCapture = time.time()
# added this to give visual feedback of camera motion capture activity.  Can be removed as required
while (True):
    # Get comparison image
    image2, buffer2 = captureTestImage()
    # Count changed pixels
    changedPixels = 0
    for x in xrange(0, 100):
        # Scan one line of image then check sensitivity for movement
        for y in xrange(0, 75):
            # Just check green channel as it's the highest quality channel
            pixdiff = abs(buffer1[x,y][1] - buffer2[x,y][1])
            if pixdiff > threshold:
                changedPixels += 1
        # Changed logic - If movement sensitivity exceeded then
        # Save image and Exit before full image scan complete
        if changedPixels > sensitivity:   
            print "change "+monitor
            lastCapture = time.time()
            if (monitor == 'off'):
                turnMonitorOn()
            break
        continue
    if (time.time()-lastCapture > 60):
  if (monitor == 'on'):
          turnMonitorOff()

    # Swap comparison buffers
    image1  = image2
    buffer1 = buffer2

									

Wenn man das Ding nun laufen lĂ€sst, macht es im dauerloop ein Bild in niedriger Auflösung von der Cam, und vergleicht die Helligkeitswerte mit denen des vorherigen Pics. Ist der Unterschied grösser als „threshold“, dann macht das Script den Monitor an. Nach 60s ohne Bewegung wird er wieder ausgeschaltet.
Jetzt nur noch das Script mit „start-daemon“ in ein init.d Script packen und beim booten automatisch starten, und fertig.

Wie immer gibt es zig Wege dahin, dies ist nur einer von vielen. Das ganze kann man sicher noch immens optimieren. FĂŒr hier ist es mehr als in Ordnung.

Tagged with:
Okt 26

[Update 01.11.2014:] Klang alles vielversprechend, hat aber gerade mal 3 Tage WakeUp gehalten Lösung also leider noch nicht gefunden

Nach dem ich meinen Mac auf Windows8 OSX Yosemite geupdated habe, ging nach einem WakeUp, netzwekmĂ€ssig, ĂŒberhaupt nichts mehr.

War schon so gefrustet, dass ich dachte ich mĂŒsste Clean-Install machen, oder aber auf ein anderes OS wechseln. Das ganze hat sich im system.log und Allgemein so geĂ€ussert, dass die NIC nach einem WakeUp fĂŒr ein paar Millisekunden da war, und dann wieder weg (was die FunktionalitĂ€t angeht). In den Systemeinstellungen sah die ganze Zeit ĂŒber alles fein aus: IP, Interface war up, etc. Aber halt so gar keine Connectivity. Auszug syslog:

Oct 24 14:03:30 macpro2 kernel[0]: 0x1face000, 0x00000000  Intel82574L::setLinkStatus - not active
Oct 24 14:03:30 macpro2 kernel[0]: 0x1face001, 0x00000000  Intel82574L::setLinkStatus - not active
Oct 24 14:03:32 macpro2 kernel[0]: Ethernet [Intel82574L]: Link up on en1, 1-Gigabit, Full-duplex, Symmetric flow-control, Debug [796d,af08,0d01,0200,cde1,3c00]
Oct 24 14:03:32 macpro2 kernel[0]: 0x1face001, 0x0000000b  Intel82574L::setLinkStatus - active
									

Nach ein paar Anfragen bei stackoverflow kam ich auch nicht wirklich weiter. Irgendwann bin ich dann auf einen Beitrag gestossen, wo jemand ĂŒber das Problem berichtete, dass sein Mac immer dann abstĂŒrzte, wenn er in die Soundeinstellungen ging. Das Problem wurde dadurch gelöst, dass er die Kernel-Extension (kext) von Soundflower deinstalliert hatte. Hab ich dann hier (obwohl ganz anderes Problem) auch mal gemacht. ZusĂ€tzlich hab ich noch alles andere an kexts deinstalliert, was nicht notwendig war. Vendorfremde kexts neigen bei ’nem Major-Update zum Amoklauf. Eine Liste, welche kexts bei Euch NICHT von Apple kommen gibts es wie folgt:

kextstat |grep -v apple
Index Refs Address            Size       Wired      Name (Version) <Linked Against>
   41    0 0xffffff7f81e1f000 0x19000    0x19000    net.osx86.kexts.GenericUSBXHCI (1.2.6) <38 12 7 5 4 3>
  130    3 0xffffff7f833c7000 0x57000    0x57000    org.virtualbox.kext.VBoxDrv (4.3.18) <7 5 4 3 1>
  131    0 0xffffff7f8341e000 0x8000     0x8000     org.virtualbox.kext.VBoxUSB (4.3.18) <130 79 38 7 5 4 3 1>
  132    0 0xffffff7f83426000 0x5000     0x5000     org.virtualbox.kext.VBoxNetFlt (4.3.18) <130 7 5 4 3 1>
  133    0 0xffffff7f8342b000 0x6000     0x6000     org.virtualbox.kext.VBoxNetAdp (4.3.18) <130 5 4 1>

									

Die oberste kext benötige ich fĂŒr USB3.0 (funktioniert auch unter Yosemite noch), die anderen 4 sind von Oracles VirtualBox. Mit denen funktioniert nun wieder alles. Vorher war noch Soundflower und noch irgendein Kram dabei. Idealerweise deinstalliert man die Dinger mit dem – der Soft hoffentlich beiliegenden – Uninstaller. Ist der nicht vorhanden kann man die Dinger auch per Hand töten. Seit OSX Lion muss man dafĂŒr nicht mal den Kernel-Extension-Cache neu aufbauen. Funktioniert wie folgt:

cd /System/Library/Extensions

									

Mit ls die passende Extension, die man löschen will, suchen.

Anschliessend kext „unloaden“ (d.h. aus dem RAM entfernen) und löschen:

sudo kextunload /System/Library/Extensions/NAME_OF_THE_KEXT_FILE.kext
sudo rm /System/Library/Extensions/NAME_OF_THE_KEXT_FILE.kext
									

War ’ne harte Nuss, zumal so gar kein Hinweis auf die (amoklaufenden) Extensions im Syslog oder Kernel-Ring-Buffer (dmesg) auftauchten. Nu tut der Mac wieder wie er soll. Nichts desto trotz denke ich, dass es langsam Zeit wird, sich nach einem anderen OS umzusehen. Die Schmerzen (und die Ähnlichkeit zu Windows) werden immer grösser.

Tagged with:
Jun 10

Schreibe hier mal nach und nach ein paar hilfreiche Erfahrungen auf, wenn man – wie ich – den Schritt von IOS nach Android wagt, und von der ganzen Cloud-Struktur nicht so viel hĂ€lt.

Ein wenig eigene Infrastruktur je nach Geschmack (Mailserver, CAL-/CARDDAV-Server, Proxy mit adblocker nach gusto, eigener DNS) sollte es jedoch schon sein, wenn man die wichtigsten Daten von der Cloud fernhalten möchte. Das war unter ios so, und gilt unter Android mehr denn je. Also los gehts mit den Basics:

  • Mails: Da eignet sich K9-Mail ganz gut – ist etwas anders als Mail.App zu bedienen, kann aber nach meinen Vertestungen am meisten
  • Kalendersync: CalDAV-Sync integriert den eigenen CalDAV zu 100% in die Android-Welt, und das ganz ohne gmail-Kalender. Reminder und Co. funktionieren sauber!
  • Telefonbuch: CardDAV-Syncfree synct wunderfein die Kontakte mit dem heimischen CardDAV-Server (zum einsatz kommt hier ĂŒbrigens davical)
  • Notizen: Werden bei ios/osx als „spezielle Mail“ in einem Subfolder mit Namen „Notes“ abgelegt. Da gibts was gĂŒnstiges fĂŒr den Droiden: iNotes – nicht von der Beschreibung im Store verwirren lassen, der spielt echt mit jedem imap (hier ist der gute alte cyrus im Einsatz)
  • Twitter: Tja. Da bin ich noch nicht so ganz weiter. Tweetbot gilt nach wie vor als ungeschlagen. Aber Tweetveo kommt zumindest schon mal etwas dran. [Update 10.06.14] Plume isses ! Tweetmarker-Support. Suchen nach Antworten – also all das was Tweetbot auch kann – zumindest auf den ersten Blick. Danke an @bridgerdier [Update 05.12.2014] Fenix ist der Twitterclient der Wahl
  • Newsreader: Original tt-rss Client fĂŒr tinytiny – geht doch 🙂

Nun bringt das alles herzlich wenig, wenn man die Äpps auf dem Device, sowie das OS nicht einigermassen abschotten kann. Und an dem Punkt kommt Cyanogenmod – das mich ĂŒberhaupt bewegt hat, von IOS nach Android zu wechseln – ins Spiel. Nicht ganz trivial zu installieren (Grobe Vorgehensweise: Bootloader unlocken, CWM/TWM aufspielen, Image installieren) aber in der Version 11 (Analog KitKat) sehr empfehlenswert. So lĂ€sst sich jede Äpp beliebig kastrieren (Bis hin zu: „Darf die App vibrieren?“ und so). Ein Feature das google seit 4.4.2 wieder ausgebaut hatte. Hier isses drin. Und das ganze CM11 ist echt stabil.

Wer dann den Droiden noch weiter abschotten möchte, dem sei (CM11 bzw. root vorrausgesetzt) noch Droidwall ans Herz gelegt. Ganz platt gesagt ist Droidwall ein Frontend fĂŒr iptables mit dem man pro Äpp sagen kann, ob diese ĂŒberhaupt ins Netz darf. Heisst: Wenn ich bspw. ne Taschenlampe installiere, dann braucht die mal definitiv keinen Netzzugriff… Logging gibts gratis obendrauf.

Ansonsten macht AdFree von BigTinCan noch den solidesten Eindruck. Warum das Teil von einer sehr dubiosen Website kommt, nicht im Playstore verfĂŒgbar ist und ĂŒberhaupt, weiss wohl niemand. Habe dieses Ding ausgewĂ€hlt, weil es ganz simpel die /etc/hosts um einschlĂ€gige Werber ergĂ€nzt, und echt nicht mehr anstellt. Alles andere wollte direkt Nutzungsdaten und Co. nach Hause funken. Dieses schicke kleine APK macht genau das was es soll (Werbung fernhalten – und das auch noch relativ elegant).

[Update 11.06.14] Mit IOS8 soll es ein Update geben, bei dem das iPhone die Mac-Adresse des WLAN-Interfaces randomisiert wĂ€hrend es keinerlei Connect zu einem WLAN hat. Löbliches Feature. Geht mit dem Droiden natĂŒrlich auch. Guckst du Pry-Fi im Playstore. Das das Teil root-Rechte benötigt, liegt auf der Hand.

Am meisten weggetan hat das Messaging. Kenne ich doch recht viele ios-iMessage Menschen. Da gibt es leider nur Pest oder Cholera als Ersatz. Facebook möchte ich nun nicht gerade in Form von WhatsApp beglĂŒcken, also hab ich mich neben SMS fĂŒr Google-Hangouts entschieden. Ob bei Kurznachrichten jetzt Apple oder google mitliest ist da relativ. (Nur FB sollte es halt nicht sein). Das ganze Thema Messaging ist extremst unbefriedigend, sowohl unter ios als auch unter Android. Diesen ganzen Placeboteile wie Threema und wie sie nicht alle heissen kann man auch nicht trauen (ist halt kein opensource). Daher gibts hier halt einen Kompromiss.

Wenn jemand noch weitere Tips hat, immer gern her damit.

Gesucht wird bspw. noch:

  • PodFetcher
  • FeedReader (Gut, Feeds lese ich hauptsĂ€chlich auf dem iPad – aber wer weiss: Vielleicht kommt da ja auch irgendwann mal ein Droide hin)
Tagged with:
Jan 25

Gaaaanz kurze knackige Anleitung, wie man einen PGP/GPG Key beglaubigt  bzw. signiert (unvollstĂ€ndig, und OHNE Anleitung, wie man den Key auf korrektheit prĂŒft – idealerweise signiert Ihr nur Keys, bei denen Ihr 100%ig sicher seid, dass diese auch vom passenden Keyowner kommen 🙂 )

Shell:

[gpg –list-keys] Pub-Key-ID des zu signierenden keys merken

[gpg –sign-key <pubkeyid>] Das eigentliche Signieren

[gpg –send-keys <pubkeyid>] Signieren dem Keyserver bekanntmachen

OSX / GPGTools:

  • GPG SchlĂŒsselbund (GPG Keychain) starten.
  • Rechte Maustaste auf den zu signierenden Key
  • Beglaubigen anclicken, Details entsprechend wĂ€hlen und OK drĂŒcken
  • Wieder rechte Maustaste, diesesmal „Öffentlichen SchlĂŒssel an SchlĂŒsselserver senden“

Der letzte Punkt – also das Veröffentlichen der Beglaubigung, wird gern vergessen. Ohne diesen Schritt ist das ganze jedoch recht witzlos.

[UPDATE]

Bei mehreren uids (IdentitÀten) pro Key:

  • Doppelclick auf den Key in der Keychain-GUI
  • Wechsel auf den „Benutzer-ID“-Tab
  • Zu bestĂ€tigende IdentitĂ€t OBEN auswĂ€hlen
  • Unten auf das Plus clicken und beglaubigen
  • Anschliessend wieder raus, und „Öffentlichen SchlĂŒssel an SchlĂŒsselserver senden“ (s.o.)
Tagged with:
Jan 12

Ausnahmsweise mal keine (Über-)Lebenshilfe, sondern ein Hilferuf!

Da hier zwei Kids rumlaufen, hab ich gern die Kontrolle wann und wie das Netz benutzt wird. Bisher (zu v4-Zeiten) hat der Squid gute Dienste geleistet. Mit ipv6 ist das nicht mehr so. Da beisse ich mir nÀmlich die ZÀhne aus.

Doch von vorn: Hier im Netz lĂ€uft ein radvd (Router Advertising Daemon), der ein sixxs-Prefix im LAN Announced. Der (zwangs-)proxy biegt alle ausgehenden ipv4-Port-80 Anfragen transparent auf den Squid-Port um, und handlet den Kram dann per ACL. v4 gibt es statisch ĂŒber einen DHCP, und fĂŒr GĂ€ste ist eine Range vergeben.

Seit v6 schnappen sich die EndgerÀte irgendeine v6-Adresse (bei ios7 kann man ja bekanntlich die privacy-extensions nicht mehr ausschalten) und vorbei ist es mit der Kontrolle (vom DNS mal ganz abgesehen). Eine Lösung muss her. Bisher ausprobiert habe ich folgendes:

  • auth_param im Squid angeknipst. Resultat erschĂŒtternd:
    • Android und Proxys … Hahaha (wenn, nur „gerooted“) !!! Android und Proxy-Auth – HEUL! Tut ĂŒberhaupt nicht.
    • ios und Proxys – Nett / ios und Proxy-Auth – Neee, da taktet ein Autoblinker stabiler. Geht nicht 🙁
    • OSX: Siehe ios.
  • acl based on arp (acl arp)
    • Bei v4 schick – bei v6 gibts Neighbourdiscovery und kein arp mehr. Dummerweise scheint noch niemand ND in irgendeiner Squid-Version als acl implementiert zu haben 🙁
  • ACLs auf V6-IP-Basis
    • Aufgrund der Privacy-Extensions unbenutzbar

Noch nicht ausprobiert (weil so demotiviert von den o.g. zwei Punkten – und tlw. auch zu aufwendig):

  • Getrennte „Netze“ mit getrennten IPv6-Prefixen um die ACLs auf Netzebene auszurollen:
    • AufwĂ€ndig !! Trennbar nur ĂŒber VLANs, extra SSIDs an jedem WLAN-AP … und ĂŒberhaupt
  • DHCPv6
    • will man sowas?
  • RADIUS
    • Kanonen / Spatzen und so. Neee
  • 802.1X
    • Interessanter Ansatz. Aber da fliegen auch wieder die IOS-Devices raus. Ferner gilt das selbe wie bei radius.

VorschlÀge sind mehr als willkommen. Derzeit hab ich auf der LAN-Seite des Proxies v6 wieder ausgeschaltet und arbeite mit den o.g. ARP-Filtern. Tut zumindest einigermassen. An so einem iphone lÀsst sich die macaddy nicht so einfach Àndern. 

Tagged with:
preload preload preload