debian

arp proxy et dhcp relay

date
8 / 12 / 2011
comments
0

Sous ce titre pompeux se cache en fait un problème tout simple qui vous est certainement déjà arrivé: la *box est branchée sur la prise téléphonique qui se trouve être loin de l'endroit ou se concentrent les machines à brancher sur le net. Pour régler ce problème il y a plusieurs solutions:

  • Tirer un câble de 20m de la *box vers un switch où se branchent les autres machines, en espérant que le câble passe sous les portes. Pas top.
  • Avoir du wifi sur toutes les machines, c'est loin d'être le cas chez moi.
  • Avoir du CPL entre la box et le switch. Je n'en ai pas.

Une autre solution c'est d'avoir une machine allumée 24h/24 avec wifi et lien filaire vers le switch, c'est la solution que j'ai retenue. Sauf que faire un bridge wlan0 <=> eth0 c'est pas si simple que ça en a l'air, il y a bien une solution avec ebtables, mais avec ma carte wifi et son driver proprio ça ne fonctionne pas, le lien wifi boucle entre connexion et déconnexion.

J'ai donc cherché à faire autrement, le NAT j'aime pas trop parce que ça m'obligerais à avoir deux réseau puis a pusher la nouvelle route sur tous mes réseaux (vpn etc). J'ai donc trouvé une solution avec un proxy arp.

C'est assez simple:

iface eth0 inet static
address 192.168.31.253
broadcast 192.168.31.255
netmask 255.255.255.0
# Empèche ifup d'ajouter la route 192.168.31.0/24 sur eth0
up ip route del 192.168.31.0/24 dev eth0
# On doit avoir une route pour chaque machine derrière le switch
# Ici 192.168.31.3
up ip route add 192.168.31.3/32 dev eth0

iface wlan0 inet static
wpa-ssid rhizome # J'aime mon ssid :)
wpa-psk SECRET
address 192.168.31.253
broadcast 192.168.31.255
netmask 255.255.255.0
gateway 192.168.31.1

Et activer le proxy arp dans /etc/sysctl.conf

net.ipv4.conf.all.proxy_arp=1

Ensuite, comme je suis feignant, j'aimerais bien que ma machine 192.168.31.3 obtienne son IP par dhcp, il suffit d'utiliser dhcprelay:

apt-get install isc-dhcp-relay

Le script post-inst nous demande l'IP du serveur dhcp et voilà.

Pour aller encore plus loin dans l'automatisation, j'aurais aimé rajouter les routes sur eth0 automatiquement, j'ai trouvé une solution très moche en coupant mon /24 en deux /25 et d'utiliser l'option dhcp agent.circuit-id pour allouer l'adresse IP dans un des deux blocs suivant si le dhcp-relay a été utilisé, au final c'était vraiment trop moche alors je l'ai pas fait.

Pour expérimenter différents setup, j'ai utilisé un script permettant de simuler un environnement réseau avec User Mode Linux et des switchs virtuels avec vde.

J'ai commité mes tests sur github.

git clone git://github.com/philpep/network-lab.git
cd network-lab
git checkout -b lab-arp-proxy-dhcp origin/lab-arp-proxy-dhcp
cd lab-arp-proxy-dhcp
./setup

Arduino cli

date
29 / 9 / 2011
comments
0

Je me suis offert une petite carte Arduino avec un Starter Kit de chez SnootLab. J'en suis très content, je suis une bille complète en éléctronique et en seulement 3 jours de documentations et autres tutoriels j'ai déjà quelques bases et j'entrevoie des possibilités infinies liant harware et software.

Seulement, l'IDE officiel d'arduino m'a vite gonflé, je suis très réticent à prendre en main de nouveaux logiciels, surtout quand ils sont graphiques, c'est plus fort que moi, trop de boutons et autres ClickClickClick ça me file des ... boutons. J'ai donc essayé de coder pour arduino en utilisant mon IDE habituel, c'est à dire vim et make, voilà la manip (pour une machine debian)

# La lib arduino http://arduino.cc/en/Main/Software (ici linux x86_64)
wget http://arduino.googlecode.com/files/arduino-0022-64-2.tgz -O - | tar xvzf -
# Le travail est déjà tout fait ici: http://mjo.tc/atelier/2009/02/arduino-cli.html
wget http://mjo.tc/atelier/2009/02/acli/arduino-mk_0.6.tar.gz -O - | tar xvzf -
sudo mkdir -p /usr/local/bin
sudo install -m 755 -o root -g root arduino-mk-0.6/ard-parse-boards /usr/local/bin/

Ensuite copiez le fichier arduino-mk-0.6/Arduino.mk dans votre projet et incluez le dans un Makefile:

TARGET = hello # Le nom du programme final (doit correspondre à un fichier hello.pde)
ARDUINO_DIR = /path/to/arduino-0022
BOARD_TAG = uno # Voir Arduino.mk pour toutes les cartes supportées
ARDUINO_PORT = /dev/ttyACM0          
AVR_TOOLS_PATH = /usr/bin
AVRDUDE_CONF = $(ARDUINO_DIR)/hardware/tools/avrdude.conf
AVRDUDE = $(ARDUINO_DIR)/hardware/tools/avrdude

include Arduino.mk

# Petit alias perso, make com lance cu sur le bon port avec un baud de 9600
com:
    cu -l $(ARDUINO_PORT) -s 9600

Ne pas oublier les outils indispensables:

sudo apt-get install gcc-avr binutils-avr avr-libc libyaml-perl cu

Pour compiler c'est make et pour envoyer le code sur la carte make upload.