Pour donner un peu plus de détails qui pourront être utile pour rédiger une page de wiki sur notre cluster proxmox.
Dépôt « no subscription » et installation ifupdown2
echo "deb http://download.proxmox.com/debian/pve buster pve-no-subscription" > /etc/apt/sources.list.d/pve-enterprise.list
apt update
apt full-upgrade
apt install ifupdown2
Configuration IPv4
La dernière fois, nous ne parvenions plus à remettre en route l’IPv4 sur la VM créé avec Cloud-init en se basant sur les instructions https://forum.arn-fai.net/t/suite-proxmox/8082/3.
Nous avons finalement découvert comment réactiver l’interface fwXXXi0. Pour faire ça il faut ajouter firewall=1
dans le matériel:
qm create $next_id --name $name --memory $memory --net0 virtio,bridge=vmbr0,firewall=1
Configuration IPv6
Activation du forwarding en IPv6
On s’est apperçu que la dernière fois nous avions oubliés de vérifier l’activation du forwarding en ipv6 sur l’hôte proxmox:
Ajout d’un fichier /etc/sysctl.d/arn.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1
net.ipv6.conf.default.proxy_ndp = 1
Puis on charge en lançant:
sysctl -p
On a constaté cependant que les interfaces fwXXXi0 des VM ont aussi l’ipv6 forwarding désactivé, une recherche nous amène à découvrir que le script /etc/network/if-pre-up.d/bridge se charge de désactiver l’ipv6…
Pour contrer ce comportement, on propose ce script qui reste à tester:
#!/bin/sh
if [ ! -x /sbin/brctl ]
then
exit 0
fi
. /lib/bridge-utils/bridge-utils.sh
case "$IF_BRIDGE_PORTS" in
"")
exit 0
;;
none)
INTERFACES=""
;;
*)
INTERFACES="$IF_BRIDGE_PORTS"
;;
esac
all_interfaces= &&
unset all_interfaces &&
bridge_parse_ports $INTERFACES | while read i
do
for port in $i
do
# We attach and configure each port of the bridge
if [ "$MODE" = "start" ] && [ ! -d /sys/class/net/$IFACE/brif/$port ]; then
if [ -f /proc/sys/net/ipv6/conf/$port/disable_ipv6 ]
then
echo 0 > /proc/sys/net/ipv6/conf/$port/disable_ipv6
fi
fi
done
done
Ajout des routes
ip -6 a a fe80::42:1 dev fwbr104i0
ip -6 r a 2a00:5881:8100:1010::1/64 dev fwbr104i0
Script mis à jour
#!/usr/bin/env bash
#set -euo pipefail
usage(){
>&2 cat << EOF
Usage: $0 --name NAME --memory MEMORY --disk DISK --ipv4 IPV4 [--ipv6 IPV6] [--nameserver NAMESERVER] [--user USER]
EOFexit 1
}
args=$(getopt -a -o hn:m:d:4:6:r:u: --long help,name:,memory:,disk:,ipv4:,ipv6:,nameserver:,user: -- "$@")
if [[ $? -gt 0 ]]; then
usage
fi
eval set -- ${args}
while :do
case $1 in
-h | --help) usage ; shift ·
-n | --name) name=${2:-2048} ; shift 2 ;;
-m | --memory) memory=${2:-2048} ; shift 2 ;;
-d | --disk) disk=$((${2:-15} - 2)) ; shift 2 ;;
-4 | --ipv4) ipv4=$2 ; shift 2 ;;
-6 | --ipv6) ipv6=$2 ; shift 2 ;;
-r | --nameserver) nameserver=${2:-80.67.169.12 80.67.169.40} ; shift 2 ;;
-u | --user) user=${2:-arn} ; shift 2 ;;
# -- means the end of the arguments; drop this, and break out of the while loop
--) shift; break ;;
*) >&2 echo Unsupported option: $1
usage ;;
esac
done
if [[ $# -eq 0 ]]; then
usage
fi
next_id=$(pvesh get /cluster/nextid)
qm create $next_id --name $name --memory $memory --net0 virtio,bridge=vmbr0,firewall=1
qm importdisk $next_id /root/debian-11-genericcloud-amd64.qcow2 local-zfs
qm set $next_id --scsihw virtio-scsi-pci --scsi0 local-zfs:vm-$next_id-disk-0
qm set $next_id --ide2 local-zfs:cloudinit
qm set $next_id --boot c --bootdisk scsi0
qm set $next_id --serial0 socket --vga serial0
qm set $next_id --ipconfig0 ip=${ipv4}/32,${ipv6}/64,gw=169.254.42.1,gw=fe80::42:1
qm resize $next_id scsi0 ${disk}G
qm set $next_id --nameserver "$nameserver"
qm set $next_id --ciuser "$user"
qm set $next_id --cipassword
qm start $next_id
ip a a 169.254.42.1 dev fw${next_id}i0
ip r a $ipv4/32 dev fw${next_id}i0
ip -6 a a fe80::42:1 dev fw${next_id}i0
ip -6 r a $ipv6/64 dev fw${next_id}i0
TODO
- tester les scripts et les mettre dans un git
- vérifier si en proxmox 8 ce comportement par défaut est toujours présent
- tester l’importation d’un disque d’une VM ganeti