From b2d19c3a893a419b7696b8f6ddf92c478d8e8602 Mon Sep 17 00:00:00 2001
From: Noe Raphanaud <noeraphanaud@gmail.com>
Date: Thu, 16 Sep 2021 15:35:53 +0200
Subject: [PATCH] 10-PXE

---
 sio2/sisr/10-PXE/dhcpd.conf       | 125 ++++++++++++++++++++++++++++++
 sio2/sisr/10-PXE/install-bullseye |   4 +
 sio2/sisr/10-PXE/isc-dhcp-server  |  18 +++++
 sio2/sisr/10-PXE/nat.sh           |   3 +
 4 files changed, 150 insertions(+)
 create mode 100644 sio2/sisr/10-PXE/dhcpd.conf
 create mode 100755 sio2/sisr/10-PXE/install-bullseye
 create mode 100644 sio2/sisr/10-PXE/isc-dhcp-server
 create mode 100755 sio2/sisr/10-PXE/nat.sh

diff --git a/sio2/sisr/10-PXE/dhcpd.conf b/sio2/sisr/10-PXE/dhcpd.conf
new file mode 100644
index 0000000..f19bcc8
--- /dev/null
+++ b/sio2/sisr/10-PXE/dhcpd.conf
@@ -0,0 +1,125 @@
+# dhcpd.conf
+#
+# Sample configuration file for ISC dhcpd
+#
+
+# option definitions common to all supported networks...
+option domain-name "example.org";
+option domain-name-servers ns1.example.org, ns2.example.org;
+
+default-lease-time 600;
+max-lease-time 7200;
+
+# The ddns-updates-style parameter controls whether or not the server will
+# attempt to do a DNS update when a lease is confirmed. We default to the
+# behavior of the version 2 packages ('none', since DHCP v2 didn't
+# have support for DDNS.)
+ddns-update-style none;
+
+# If this DHCP server is the official DHCP server for the local
+# network, the authoritative directive should be uncommented.
+#authoritative;
+
+# Use this to send dhcp log messages to a different log file (you also
+# have to hack syslog.conf to complete the redirection).
+#log-facility local7;
+
+# No service will be given on this subnet, but declaring it helps the 
+# DHCP server to understand the network topology.
+
+#subnet 10.152.187.0 netmask 255.255.255.0 {
+#}
+
+# This is a very basic subnet declaration.
+
+#subnet 10.254.239.0 netmask 255.255.255.224 {
+#  range 10.254.239.10 10.254.239.20;
+#  option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
+#}
+
+# This declaration allows BOOTP clients to get dynamic addresses,
+# which we don't really recommend.
+
+#subnet 10.254.239.32 netmask 255.255.255.224 {
+#  range dynamic-bootp 10.254.239.40 10.254.239.60;
+#  option broadcast-address 10.254.239.31;
+#  option routers rtr-239-32-1.example.org;
+#}
+
+# A slightly different configuration for an internal subnet.
+#subnet 10.5.5.0 netmask 255.255.255.224 {
+#  range 10.5.5.26 10.5.5.30;
+#  option domain-name-servers ns1.internal.example.org;
+#  option domain-name "internal.example.org";
+#  option routers 10.5.5.1;
+#  option broadcast-address 10.5.5.31;
+#  default-lease-time 600;
+#  max-lease-time 7200;
+#}
+
+# Hosts which require special configuration options can be listed in
+# host statements.   If no address is specified, the address will be
+# allocated dynamically (if possible), but the host-specific information
+# will still come from the host declaration.
+
+#host passacaglia {
+#  hardware ethernet 0:0:c0:5d:bd:95;
+#  filename "vmunix.passacaglia";
+#  server-name "toccata.example.com";
+#}
+
+# Fixed IP addresses can also be specified for hosts.   These addresses
+# should not also be listed as being available for dynamic assignment.
+# Hosts for which fixed IP addresses have been specified can boot using
+# BOOTP or DHCP.   Hosts for which no fixed address is specified can only
+# be booted with DHCP, unless there is an address range on the subnet
+# to which a BOOTP client is connected which has the dynamic-bootp flag
+# set.
+#host fantasia {
+#  hardware ethernet 08:00:07:26:c0:a5;
+#  fixed-address fantasia.example.com;
+#}
+
+# You can declare a class of clients and then do address allocation
+# based on that.   The example below shows a case where all clients
+# in a certain class get addresses on the 10.17.224/24 subnet, and all
+# other clients get addresses on the 10.0.29/24 subnet.
+
+#class "foo" {
+#  match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
+#}
+
+#shared-network 224-29 {
+#  subnet 10.17.224.0 netmask 255.255.255.0 {
+#    option routers rtr-224.example.org;
+#  }
+#  subnet 10.0.29.0 netmask 255.255.255.0 {
+#    option routers rtr-29.example.org;
+#  }
+#  pool {
+#    allow members of "foo";
+#    range 10.17.224.10 10.17.224.250;
+#  }
+#  pool {
+#    deny members of "foo";
+#    range 10.0.29.10 10.0.29.230;
+#  }
+#}
+default-lease-time 86400; # durée du bail en secondes
+max-lease-time 86400; 	 # durée du bail en secondes
+
+option domain-name-servers 192.168.0.1; # adr. des serveurs DNS
+option domain-name "sio.lan";		#nom du domaine DNS
+option netbios-name-servers 192.168.1.1;	# adr. du serveur WINS
+option netbios-node-type 8;	# type de noeud NetBios (WINS puis broadcast)
+
+subnet 192.168.1.0 netmask 255.255.255.0 {
+   option subnet-mask 255.255.255.0;
+   option broadcast-address 192.168.1.255;
+   option routers 192.168.1.1;  # passerelle par defaut
+   range 192.168.1.10 192.168.1.20;
+filename "pxelinux.0";
+next-server 192.168.1.1;  #serveur TFTP
+option subnet-mask 255.255.255.0; 
+option broadcast-address 192.168.1.255; 
+option routers 192.168.1.1; } 
diff --git a/sio2/sisr/10-PXE/install-bullseye b/sio2/sisr/10-PXE/install-bullseye
new file mode 100755
index 0000000..d1b8600
--- /dev/null
+++ b/sio2/sisr/10-PXE/install-bullseye
@@ -0,0 +1,4 @@
+YOURMIRROR=deb.debian.org
+DIST=bullseye
+ARCH=amd64
+wget http://"$YOURMIRROR"/debian/dists/"$DIST"/main/installer-"$ARCH"/current/images/netboot/netboot.tar.gz
diff --git a/sio2/sisr/10-PXE/isc-dhcp-server b/sio2/sisr/10-PXE/isc-dhcp-server
new file mode 100644
index 0000000..26ec0d9
--- /dev/null
+++ b/sio2/sisr/10-PXE/isc-dhcp-server
@@ -0,0 +1,18 @@
+# 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="enp0s8"
+INTERFACESv6=""
diff --git a/sio2/sisr/10-PXE/nat.sh b/sio2/sisr/10-PXE/nat.sh
new file mode 100755
index 0000000..b761d54
--- /dev/null
+++ b/sio2/sisr/10-PXE/nat.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+echo "1" > /proc/sys/net/ipv4/ip_forward
+sudo iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE