[proxmox][openwrt] Installation et configuration

Je vous présente un tuto un peu atypique dans le sens où je me sers d’OpenWRT en tant que serveur dans une machine X86. En effet OpenWRT me semble une bonne alternative à LXC dans le sens où il consomme autant de ressources qu’un conteneur LXC à la différence près qu’il tourne avec KVM.

Est-ce que c’est plus sécurisé? Bonne question! J’aimerais bien avoir un retour entre LXC/Debian vs VM/OpenWRT.

L’installation, dans la limite du possible, se passe en ligne de commande.

Prérequis

  • Être à l’aise avec OpenWRT

  • Avoir un accès à l’hyperviseur Proxmox et bien sûr avoir les droits de création de VM.

Créer la machine virtuelle

Créer sa machine en suivant les éléments suivants ou en ligne de commande :

qm create 10001 \
  --name openwrt \
  --virtio0 data:0.5 --bootdisk virtio0 \
  --memory 128 --balloon 32 \
  --onboot no \
  --sockets 1 \
  --net0 virtio,bridge=vmbr2,firewall=1,macaddr=00:18:25:11:FF:F1,tag=241 \
  --scsihw virtio-scsi-single

Côté IHM, cela équivaut à :

Dans la console Proxmox, télécharger l’image OpenWRT, copier sur le disque et lancer la VM depuis la console.

# Recuperer la version courante sur downloads.openwrt.org/releases/
curl -O https://downloads.openwrt.org/releases/VERSION/targets/x86/64/openwrt-VERSION-x86-64-combined-ext4.img.gz
gzip -d openwrt-VERSION-x86-64-combined-ext4.img
dd if=openwrt-VERSION-x86-64-combined-ext4.img of=/dev/disk/by-id/dm-name-pve-vm--10001--disk--0
qm start 10001

Premier démarrage et accès réseau

Se connecter avec la console disponible sur la page d’administration web de Proxmox (https://pve:8006).

D’abord supprimer dnsmasq afin de vérifier que le système de fichiers est correct et ajouter l’adresse IP et la route par défaut afin de se connecter en ssh:

opkg remove dnsmasq

ip add add 192.168.0.1/24 dev br-lan
ip r add default via 192.168.0.254
# Pour vérifier l'IP
ip a
# Pour vérifier les routes
ip r

Enfin se connecter en ssh et configurer avec uci.

uci set network.lan.ipaddr='192.168.0.1'
uci set network.lan.netmask='255.255.255.0'
uci set network.lan.gateway='192.168.0.254'
uci set network.lan.dns='8.8.8.8'
uci set network.lan.delegate='0'
uci set system.@system[0].hostname='ntp'
uci commit
/etc/init.d/network reload
/etc/init.d/system reload
/etc/init.d/uhttpd disable
/etc/init.d/uhttpd stop

Un cas d’usage : serveur de temps

C’est justement le genre de service qu’un conteneur ne peut pas rendre, faute d’accès à l’horloge du système.

opkg update
opkg install ntpd
uci set system.ntp.enable_server="1"
uci commit system
/etc/init.d/sysntpd restart

uci -q delete system.ntp.server
uci add_list system.ntp.server="0.fr.pool.ntp.org"
uci add_list system.ntp.server="1.fr.pool.ntp.org"
uci add_list system.ntp.server="2.fr.pool.ntp.org"
uci add_list system.ntp.server="3.fr.pool.ntp.org"
uci commit system
/etc/init.d/sysntpd restart

Les ressources consommées sont vraiment minimes.

Les ressources consommées restent très faibles — c'est tout l'intérêt de l'approche : le coût d'une machine virtuelle complète approche celui d'un conteneur, avec l'isolation d'un noyau séparé en plus.


Liens

Articles connexes