<html>
	<head>
		<meta charset="UTF-8">	
		<title>06 - preparation (isc_dhcp_live_boot)</title>
	</head>

	<body>
		<h1 style="color:blue">06 - preparation (isc_dhcp_live_boot)</h1>
		<h2>Table of contents</h2>
		<ul>
			<li><a href="#namen">Purpose of this exercise</a></li>
			<li><a href="#navidezniRacunalniki">Virtual machines, needed for the purpose of exercise</a></li>
			<li><a 
href="#skicaPodomrezja">Schematics of our subnet</a></li>
			<li><a href="#simpleArbiterGW">Setting up simpleArbiterGW</a></li>
			<li><a href="#DHCP">Setting up DHCP Server</a></li>
			<li><a href="#clientA">Setting BootableClient A</a></li>
			<li><a href="#clientB">Setting up BootableClient B</a></li>
		</ul>


		<h2 id="namen">Purpose of this exercise</h2>
		<p>How to perform live boot using a DHCP server.</p>

		<h2 id="navidezniRacunalniki">Virtual machines needed to perform the task.</h2>
		<p>We need VirtualBox and the following 4 virtual 
machines:
			<ul>
				<li><a href="http://www.polz.si/media/uploads/kpov/virtualke/simpleArbiterGW.vdi">simpleArbiterGW</a></li>
				<li><a href="http://www.polz.si/media/uploads/kpov/virtualke/simpleArbiterDhcp.vdi">DHCP Server</a></li>
				<li>Bootable Client A (diskless 
machine)</li>
				<li>Bootable Client B (diskless 
machine)</li>
			</ul>
		</p>

		<h2 id="skicaPodomrezja">Schematics of our subnet</h2>
		<img style="width: 800px; height: 610px;" src="../images/01.png" alt="slika-01"></img>
		<p>Our goal is to make BootableClient A get it's IP 
through DHCP server and boot up using file 
A, which is located on simpleArbiterGW,</br>If we run 
BootableClient B  machines, we would like it to retrieve it's IP 
through DHCP server and boot from some live ISO which is also located on 
SimpleArbiterGW.
	    </p>

	    <h2 id="simpleArbiterGW">Setting up <mark>simpleArbiterGW</mark></h2>
	    <p>Download <a 
href="http://www.polz.si/media/uploads/kpov/virtualke/simpleArbiterGW.vdi">simpleArbiterGW.vdi</a> 
and then run VirtualBox. After the file is downloaded, choose the New 
option in VirtualBoxu and set simpleArbiterGW in the Name 
field.</br>Memory size, should be set accordingly (1gb will suffice). Then choose "Use an existing virtual hard drive file" and select simpleArbiterGW.vdi clicking Create.</p>
		</br>
	    <img style="width: 800px; height: 464px;" src="../images/02.png" alt="slika-02"></img>
	    <p>We start our virtual machines simpleArbiterGW using the 
following login 
credentials; username: "root",  password: "kaboom".</br></br>
	    At the start, the computer on NAt get's it's IP(in our case 10.0.2.15).</br>(to check this use<b>ifconfig</b>) We now use this address and eth0 interface to access the internet.<p>
	    <img style="width: 800px; height: 384px;" src="../images/03.png" alt="slika-03"></img>
	    <p>However, we would like this machine to have 2 
interfaces! One on NAT(we already have this one), and the other one on Internal Network,</br>throuh which we will communicate wiht the DHCP Server and other machines on our Internal Network.</br></br>
	    We add a new interface, by turning off the virtual machine, 
select our machine in VirtualBox and select   
računalnik, ter v VirtualBoxu <b>Settings -> Network</b></br>
	    <b>Adapter</b> 1 is already set to NAT, we set <b>Adapter 
2</b> to
Internal Network</p>
	    <img style="width: 800px; height: 137px;" src="../images/04.png" alt="slika-04"></img>
	    <p>So, now we have two network interfaces!</br>In VirtuaBox 
we can define multiple Internal Networks, however, for our needs two 
will suffice. We save the settings and restart simpleArbiterGW.</br></br>
	    What we must do now, is to assign both interfaces IP addresses. We do this by setting the<b>interfaces</b>file 
	    located at<b>/etc/network</b>.</p>
	    <img style="width: 800px; height: 229px;" src="../images/05.png" alt="slika-05"></img>
	    <p>Eth0 was already handled by and integrated DHCP, so eth0 had been assigned an IP).</br>
		We have to set up the other network interface. If we don't know it's name, we find it out using <b>ifconfig -a</b>.</p>
		<img style="width: 800px; height: 117px;" src="../images/06.png" alt="slika-06"></img>
		<p>We can conclude the interface names is set to Eth1.
		Now we would like to assign an IP naslov to Eth1.</br>
		Ifconfig could be used, but rebooting the machine would reset the settings. Which is not ideal :)</br>
		So configuring  <b>/etc/network/interfaces would be a better idea.</b></br></br>
		Let's make up a random local network or a local area network or local area network address and assign it to eth1.
		</p>
		<img style="width: 800px; height: 296px;" src="../images/07.png" alt="slika-07"></img>
		<p>We save the config file. Our machine still has no IP on eth1 so we use the <b>ifup eth1</b> command</p>
        <img style="width: 800px; height: 23px;" src="../images/08.png" alt="slika-08"></img></br>
        <p>Now we use the <b>ifconfig</b> command, to see whether and ip is assigned to eth1 interface</p>
        <img style="width: 800px; height: 389px;" src="../images/09.png" alt="slika-09"></img>
        <p>We can see the IP is set. Now let's set up the DHCP 
Server!</p>

        <h2 id="DHCP">Setting up <mark>DHCP Server</mark></h2>
	    <p>We download  <a href="http://www.polz.si/media/uploads/kpov/virtualke/simpleArbiterDhcp.vdi">simpleArbiterDhcp.vdi</a> and start VirtualBox. After the file had been dowloaded we select New in VirtualBoxu and unde rthe Name tag write DHCP Server.</br>We set the Memory size accordingly(1gb of memory should be sufficient). We also select "Use an existing virtual hard drive file" and select the simpleArbiterDhcp and press Create.</p>
		</br>
	    <img style="width: 800px; height: 464px;" src="../images/10.png" alt="slika-10"></img>
	    <p>We run DHCP Server virtual machine and login using "root" ad username and "kaboom" as password.</br></br>
	    <p>At first, our machine has no assigned IP, since none was set! Let+s configure it in <b>/etc/network/interfaces</b>.</br>But which interface should we configure? Using <b>ifconfig -a</b> command, we see it's <b>eth0</b>interface.<br>
	    Again we select our IP address.</p>
	    <img style="width: 800px; height: 283px;" src="../images/11.png" alt="slika-11"></img>
	    <p>We save the configuration file. Our computer still has no IP address assigned to eth0, so using <b>ifdown eth0</b> and then <b>ifup eth0</b>we provide one.</p>
        <img style="width: 800px; height: 25px;" src="../images/12.png" alt="slika-12"></img>
        <p>Now let us use <b>ifconfig</b> command, to check whether there is an IP assigned to interface eth0</p>
        <img style="width: 800px; height: 329px;" src="../images/13.png" alt="slika-13"></img>
        <p>We got it! We install DHCP server using <b>apt-get install isc-dhcp-server</b></p>
        <img style="width: 800px; height: 322px;" src="../images/14.png" alt="slika-14"></img>
        <p>We see a bunch of errors. Why? Bacause, we have no internet access! <br>
        We need to specify the Gateway for our inteface. Our Gateway will be set as IP of our simpleArbiter virtual machine.</br> We do this using the<b>route add default gw 192.168.251.1 eth0</b> command</p>
        <img style="width: 800px; height: 43px;" src="../images/15.png" alt="slika-15"></img>
        <p>Try pinging Google's DNS server at 8.8.8.8, to check if now have internet access.</br>
        We do this using the <b>ping 8.8.8.8</b> command.</p>
        <img style="width: 800px; height: 361px;" src="../images/16.png" alt="slika-16"></img>
        <p>Google's DNS server is responding. Great! </br>
        However, we still cannot run <b>apt-get install isc-dhcp-server</b></br>
    	Let's tempororly add another interface and set it to NAT, so we get internet access and install the DHCP server.</br></br>
    	We add a new interface by turning off the virtual computer, in VirtualBox we select our virtual machine and then select <b>Settings -> Network</b></br>
	    <b>Adapter 1</b> has already been set to Internal Network, we set <b>Adapter 2</b> to NAT</p>
	    <img style="width: 800px; height: 134px;" src="../images/17.png" alt="slika-17"></img>
	    <p>We run DHCP Server and in file<b>/etc/network/interfaces</b> at the end of the line add <b>iface eth1 inet dhcp</b>, then save the file and run <b>ifup eth1</b>.<br>
	    Now we have access to the internet and can install our DHCP server with <b>apt-get install isc-dhcp-server install</b> command</br>
	    <img style="width: 800px; height: 26px;" src="../images/18.png" alt="slika-18"></img></br>
	    <p>Let's see what's in<b>/var/log/syslog</b>, which is a file where our system information is stored in.</p>
	    <img style="width: 800px; height: 323px;" src="../images/19.png" alt="slika-19"></img></br>
	    <p>Looks like we need to set up a DHCP server and specify where it should listen! </br>
		DHCP settings are stored in <b>/etc/dhcp/dhcpd.conf</b>. Let's set it! </br>
		First let's comment out <b>option domain-name-servers</b> to avoid having errors.</p>
		<img style="width: 800px; height: 26px;" src="../images/20.png" alt="slika-20"></img></br>
		<p>Then we configure DHCP server, so it would serve IPs a a certain subnet. We add the following lines:</p>
		<img style="width: 800px; height: 417px;" src="../images/21.png" alt="slika-21"></img>
		<p><b>(subnet)</b> We set the subnet and the IP range, which the DHCP server should use, and which file it should serve.</p>Some PXEs are so unintelligent, that you should specify where they should get the files from and to do that you specify next-server </br>(IP from which it will be served from, in our case simpleArbiter), we also specify gateway, which, in our case is also simpleArbiter.</br></br>Since we would like, that in the case of BootableClient B another file to be served, we do it by defining a special host like this:</br><b>(host special)</b> Under <b>hardware ethernet</b> we specifiy MAC address of our BootableClient B, we assign it a static ip and where the file <b>live-ISO</b> is located.</p>
		<p>We save the settings and kill the process named <b>dnsmasq</b>using<b>kilall dnsmasq</b>.</p>
		<img style="width: 740px; height: 34px;" src="../images/22.png" alt="slika-22"></img>
		<p>We restart our DHCP server, to apply the new settings. This is done using <b>service isc-dhcp-server restart</b></br> command. DHCP server is now ready! We supply BootableClientA and BootableClientB and test them!</p>


		<h2 id="clientA">Setting up <mark>BootableClient A</mark></h2>
		<p>We open VirtualBox and select <b>New</b>, for the  
<b>Name</b> field we specify
BootableClient A and for the <b>Hard drive</b> we select <b>Do not add a 
virtual 
hard drive</b> (as we want diskless device), </br>and select Create. 
We want the computer to be on Internal network so vse select our 
<b>Bootable Client 
A</b> and select </br><b>Settings->Network</b> where we change Adapter 
1 to Internal Network.</p>
		<img style="width: 800px; height: 678px;" src="../images/23.png" alt="slika-23"></img>
		<p>We also want our computer to boot through the network, so 
under<b>Boot Order</b>tab select <b>Network</b>.</br>
		We save the setting by clicking <b>OK</b></p>
		<img style="width: 800px; height: 697px;" src="../images/24.png" alt="slika-24"></img>
		<p>We run our BootableClient-a A and it get's it's 
IP(which is great), using the DHCP server and the simpleArbiter serves 
it exactly the file we specified. <b>A.0</b></p> 
		<img style="width: 800px; height: 494px;" src="../images/25.png" alt="slika-25"></img>



		<h2 id="clientB">Setting up<mark>BootableClient 
B</mark></h2>
		<p>We open virtual box and select <b>New</b> and under the <b>Name</b> tag write BootableClient B and under the <b>Hard drive</b>tab choose <b>Do not add a virtual hard drive</b> (since we want a diskless machine), </br>and then press the Create button, which will create a virtual machine. We want our machine to be connected to out Internal network so we select <b>Bootable Client B</b> and then select </br><b>Settings->Network</b> and set the Adapter 1 to Internal Network.</br>
		Under <b>MAC Address</b>  we specify the same MAC address that is specified in the (dhcpd.conf -> host special) file, since we want our machine to be an exception</br> and will be served a special file named<b>live-ISO</b></p>
		<img style="width: 800px; height: 678px;" src="../images/26.png" alt="slika-26"></img>
		<p>We want our machine to perform a netboot, so under the <b>System</b></p>   <b>Boot Order</b> tag specify only <b>Network</b>.</br>
		We save the setting by clicking the <b>OK</b> button</p>
		<img style="width: 800px; height: 697px;" src="../images/27.png" alt="slika-27"></img>
		<p>We run our BootableClient-a A and it get's it's IP address using DHCP server and simpleArbiter serves it the file we selected called <b>live-ISO</b></p> 
		<img style="width: 800px; height: 494px;" src="../images/28.png" alt="slika-28"></img>


	</body>
</html>