Hello les geeks, ceci sera plus un aide-mémoire qu'un tuto pour moi 😉

Avant-hier, je me suis retrouvé confronté à une VM qui ne voulait pas qu'on lui donne un conf réseau spécifique, quand j'ai poussé comme un sagouin dans l'installeur bah ce dernier a zappé le script preseed 😢

Alors pour ceux qui veulent pas faire de cloud-init, qui ont des vms ubuntu avec netplan, des vms windows qui veulent pas démarrer parce que pas de réseau automatique vous trouverez un petit coup de pouce :

apt update
apt install isc-dhcp-server
if [ -f "/etc/default/isc-dhcp-server" ] ; then   cp /etc/default/isc-dhcp-server "/etc/default/isc-dhcp-server.$(date +"%Y-%m-%d_%H-%M-%S")"; fi
if [ -f "/etc/dhcp/dhcpd.conf" ] ; then   cp /etc/dhcp/dhcpd.conf "/etc/dhcp/dhcpd.conf.$(date +"%Y-%m-%d_%H-%M-%S")"; fi

on update et on install isc-dhcp-server ( tiens d'ailleurs ça me fait penser qu'il va sauter lui non pour être remplacé par KEA ?

cat > /etc/default/isc-dhcp-server <<EOF
# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server)
# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
#DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
#DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf
# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPDv4_PID=/var/run/dhcpd.pid
#DHCPDv6_PID=/var/run/dhcpd6.pid
# Additional options to start dhcpd with.
#       Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="vmbr0 vmbr1"
#INTERFACESv6="vmbr0"
EOF

A la ligne INTERFACESv4="vmbr0 vmbr1" on met le ou les VMBR sur lesquels il doit agir.
Ici j'ai 2 VMBR le 0 pour les ips publics ( bizarrement quand c'est un dhcp qui donne une ip publique avec une gateway en dehors du réseau ça marche 😅 )
Tu peux donc mettre par exemple seulement 0 ou 1 après tu adaptes, enfin si tu lis 😉

cat > /etc/dhcp/dhcpd.conf <<EOF
# https://linux.die.net/man/5/dhcpd.conf
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
option rfc3442-classless-static-routes code 121 = array of integer 8;
option ms-classless-static-routes code 249 = array of integer 8;
option domain-name-servers 1.1.1.1,8.8.8.8;
### Default to private NAT network VMBR1
subnet 0.0.0.0 netmask 0.0.0.0 {
  range 10.20.30.225 10.20.30.230 ; <- le range
  authoritative;
  default-lease-time 600;
  max-lease-time 432000000;
  option routers 10.20.30.1; <- le proxmox
  option subnet-mask 255.255.255.0;
  option time-offset -18000;
  option broadcast-address 10.20.30.255; <- ajuste
  option rfc3442-classless-static-routes 32, 10, 20, 30, 1, 0, 0, 0, 0, 0, 10, 20, 30, 1; <- ici aussi a savoir que le "router" est 10.20.30.1
  option ms-classless-static-routes 32, 10, 20, 30, 1, 0, 0, 0, 0, 0, 10, 20, 30, 1; <- ici aussi a savoir que le "router" est 10.20.30.1
}
### vmbr0 ; Public Network
group public {
  authoritative;
  default-lease-time 21600000;
  max-lease-time 432000000;
  option routers A.B.C.D; <- ici c'est l'ip gateway dans mon cas et le tuto des ips hetzner on passe par l'ip publique qu'on colle a notre vmb0
# note bien que j'ai remplace le numero par A B C D ça à son importance pour en dessous 
  option subnet-mask 255.255.255.255;
  option rfc3442-classless-static-routes 32, A, B, C, D, 0, 0, 0, 0, 0, A, B, C, D; # remplace A B C D 
  option ms-classless-static-routes 32, A, B, C, D, 0, 0, 0, 0, 0, A, B, C, D; # remplace A B C D
  # Add your host defines to the /etc/dhcp/hosts.public file
  include "/etc/dhcp/hosts.public";
}

EOF

On vient donc de créer un truc par défaut pour la lan en 10.20.30.0/24 avec des ips qui sont donnés dans la plage 10.
20.30.225-230
En dessous on prépare le terrain pour qu'il agisse sur vmbr0 avec un fichier spécifique pour que chaque VM que vous allez générer avec son adresse MAC sera utilisable dans le dhcp ( c'est bien de limiter un peu )

Allez on continue :

cat > /etc/dhcp/hosts.public <<EOF
## Assign a specific IP to a VM/CT with MAC 9E:94:13:7D:F3:0E to the IP 11.22.33.44 for host my.example.com
## set the bridge to vmbr0 and the MAC address will need to match the "hardware ethernet" MAC
  host my.example.com {
    hardware ethernet 9E:94:13:7D:F3:0E; 
    fixed-address 11.22.33.44;
  }
#  host another.examle.com {
#    option host-name "another.example.com"
#    hardware ethernet 00:EE:DD:CC:BB:AA;
#    fixed-address 44.33.22.11;
#  }
EOF

Bon là c'est assez explicite : pour la VM avec l'adresse MAC : 9E:94:13:7D:F3:0E le système lui donnera l'adresse 11.22.33.44/32 avec la route/gateway A.B.C.D qui est notre proxmox.

systemctl enable isc-dhcp-server
systemctl restart isc-dhcp-server
systemctl status isc-dhcp-server.service

Allez roule petit Padawan et viens partager ta science !

eh merci pour le tuto !

Qui m'a bien dépanné au passage (Windows, pas de réseau)
Merci chef 🤗

Répondre…