03/04/2010
Depuis quelques temps, ce billet me trottait dans la tête. Petit récapitulatif:
- le dom0 est une debian lenny 64 bits qui accède au réseau grâce au wifi
- mon routeur est une fonera sous openwrt
- j'ai envie de faire le foufou avec openwrt et des configs ultralight
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'
Où 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:
- 10.0.0.1 l'ip de eth0 du dom0
- 172.16.10.254 l'ip du routeur où tourne un dnsmasq
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
Pages :
Rss