03/04/2010

OpenWRT et Xen

[ openwrt xen ]

Depuis quelques temps, ce billet me trottait dans la tête. Petit récapitulatif:

Une recherche avec xen bridge wifi et me voila à configurer mes domU en mode routeur:

d531:~> grep script /etc/xen/xend-config.sxp | grep -v "^#"
(network-script network-route)
(vif-script     vif-route)

Mon interface eth0 ne me sert (presque) à rien:

d531:~> /sbin/ifconfig eth0 | grep 'inet adr'
      inet adr:10.0.0.1  Bcast:10.255.255.255  Masque:255.0.0.0

Afin que mes domU puissent accéder au nain ternet, j'ajoute une route sur mon routeur:

root@fonusb# route add -net 10.0.0.0 netmask 255.255.255.0 gw 172.16.10.116
root@fonusb# tail -n 5 /etc/config/network
config 'route' 'xen'
    option 'interface' 'wpa'
    option 'target' '10.0.0.0'
    option 'netmask' '255.255.255.0'
    option 'gateway' '172.16.10.116'

10.0.0.0 est le réseau de mes domU, 172.16.10.116 l'ip de mon dom0 et wpa le nom logique de mon interface. Voir ici pour la configuration d'une route sous openwrt.

Concernant openwrt, mes tentatives de compilation sur ma machine 64 bits se sont soldées par un cuisant échec. J'ai opté pour une solution simple: un chroot 32 bits. La documentation ne manque pas, je ne vais pas détailler l'opération.

Une fois dans mon chroot et l'installation des paquets nécessaires, on peut commencer à jouer:

bsdsx@chroot> svn co svn://svn.openwrt.org/openwrt/trunk/
bsdsx@chroot> cd trunk
bsdsx@chroot> ./script/feeds update
bsdsx@chroot> make prereq

Et c'est parti pour une partie de coche-mi coche-moi:

Target System
  [x] x86
Subtarget
  [x] Xen Paravirt Guest
Global build settings
  [ ] Compile the kernel with Debug Filesystem enabled
Kernel modules
  Xen paravirtualized guest support
      [x] kmod-xen-evtchn
      [ ] kmod-xen-fbdev
      [x] kmod-xen-fs
      [x] kmod-xen-kbddev
      [x] kmod-xen-netdev

Une fois le make terminé, on installe le tout:

dsx@d531> sudo cp /usr/local/src/x86_32/home/bsdsx/src/svn/openwrt/trunk/bin/x86/openwrt-x86-ext2.fs /usr/local/xen/
dsx@d531> sudo cp /usr/local/src/x86_32/home/bsdsx/src/svn/openwrt/trunk/bin/x86/openwrt-x86-vmlinuz /usr/local/xen/

La configuration du domU:

dsx@d531:/etc/xen> cat /etc/xen/openwrt.bsdsx.fr.cfg 
kernel      = '/usr/local/xen/openwrt-x86-vmlinuz'
memory      = '32'
root        = '/dev/xvda1 rw'
disk        = [ 'file:/usr/local/xen/openwrt-x86-ext2.fs,xvda1,w', ]
name        = 'openwrt.bsdsx.fr'
vif         = [ 'ip=10.0.0.33,mac=00:16:3E:6D:BB:94' ]
gateway     = '10.0.0.1'
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'
extra       = 'console=hvc0 xencons=tty'

Et c'est parti (attention c'est rapide !):

dsx@d531> sudo xm create -c openwrt.bsdsx.fr.cfg
[ snip boot ]
root@OpenWrt:/# cat /proc/version 
Linux version 2.6.32.10 (dsx@d531.bsdsx.fr) (gcc version 4.1.2) #5 SMP Sat Apr 3 08:56:39 UTC 2010
root@OpenWrt:/# tail -n 7 /etc/config/network 
config interface lan
    option ifname   eth0
    option proto    static
    option ipaddr   10.0.0.33
    option netmask  255.255.255.0
    option gateway  10.0.0.1
    option dns      172.16.10.254

On retrouve dans la configuration:

Et ça marche ?

root@OpenWrt:/# ping -c 1 www.google.fr
PING www.google.fr (209.85.229.147): 56 data bytes
64 bytes from 209.85.229.147: seq=0 ttl=53 time=34.268 ms

--- www.google.fr ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 34.268/34.268/34.268 ms
0 commentaire(s)

Nom :
URL (optionel) :
Écrire ici: "Je conchie sur les pourriels"
Commentaires :

Pages :