Skip to main content

4.3 DNS en Virtual Hosts - Theorie

In deze les bespreken we wat DNS is, wat een host file is en waarom we dat nodig hebben bij het opzetten van een virtual host op Apache. In de vorige les heb je twee virtuele hosts opgezet en in deze les kijken we nog een keer terug wat we nu precies hebben gedaan.

DNS

Computers op het internet zijn verbonden via netwerken en om te weten welk netwerkpakketje naar welke computer moet worden verstuurd, worden IP adressen gebruikt.

Dit werkt hetzelfde als een telefoonnummer; om twee telefoons met elkaar te verbinden en iemand te kunnen bellen heb je zijn telefoonnummer nodig. Bij computers heb je in plaats van telefoonnummers, ip-adres nodig.

Elke computer die is verbonden met een netwerk heeft een IP-adres. Dit zijn nummers en die zijn lastig te onthouden. Daarom is er een soort "telefoonboek-systeem" waarbij een naam van een computer of een systeem kan worden omgezet naar een nummer. Dit systeem heet DNS. DNS staat voor Domain Name Server en het zorgt ervoor dat een naam van bijvoorbeeld een web site wordt opgezet naar een ip-adres.

Ook dit werkt weer hetzelfde als bij een telefoon. In plaats van een telefoonnummer ga je naar het adresboek en zoek je een naam. Je klikt op de naam en je telefoon belt het nummer dat aan de naam is gekoppeld. Je telefoonboek is het DNS systeem van jouw telefoon.

Host file

Op Linux en Windows heb je een host file. Dit is een gewoon ene text bestandje dat ergens op jouw disk staat. Op Linux staat deze file in de /etc directory en onder Windows staat deze file in de folder c:\windows\system32\drivers\etc\.

De host file is een soort DNS systeem dat alleen werkt voorvop de machinelokale computer; dat is dus de computer waar diede host file op staat.

Stel je wilt naar ubuntu.local. In het grote DNS systeem van internet bestaat deze site niet, maar in je eigen host file kun je deze naam wel definiëren.local. Jouw eigen machine kijkt eerst of die een naam kan vinden in de host file. Als dat zo is dan gebruikt jouw machine het nummer zoals dat in de host file staat. Staat er niets in de host file dan wordt er pas aan DNS op het internet gevraagd of er een nummer bekend is.

De host file ziet er eenvoudig uit, bijvoorbeeld:

127.0.0.1       localhost
127.0.0.1       mysite

De eerste regel staat bijna in elke host file. Deze rgelregel is een mapping (=verbinding) van localhost naar 127.0.0.1.  Zoals je weetweet, wijst het ip ip-nummer 127.0.0.1 altijd naar 'zichzelf'. Dat is een afspraak. In dit voorbeeld is mysite ook gemapped op 127.0.0.1. Of je dus localhost of mysite intypt in de browser maakt dan niet uit.uit, beide verwijzen naar 127.0.0.1.

  • Wat is DNS?
  • Wat is de host file onder Windows en hoe kun je die aanpassen?
  • Waarom is het gevaarlijk als iemand zo maar jouw host file zou kunnen aanpassen?

Deze vragen en meer, worden in de onderstaande video beantwoord:

Virtual Host

In de meeste eenvoudige vorm staat elke web sitewebsite op zijn eigen server.server:

Voor de grote sites is dat ook zo. Het is voor grote sites zelfs zo dat er vaak meerdere servers worden gebruikt voor één site.sit:

Facebook draait op 30 000 servers (schatting 2019). Hoeveel servers er aan een web sitewebsite hangen hangt dus af van de hoeveelheid gebruikers.

Als je weinig gebruikers hebt dan kun je ook eenvoudig meerdere web sites op één server draaien. Om dat te kunnen doen moeten we zogenaamde Virtuele hosts opzetten.draaien:

In dit plaatje zie je drie sites die allemaal op éémn server draaien. Hoe doen we dat?

Allereerst moeten we ervoor zorgen dat alle drie de (domein)namen naar dezelfde server verwijzen. Laten we ervan uitgaan dat de server één IP IP-adres heeft. Dat betekent dat we de drie servers alle drie aan hetzelfde IP-adres koppelen.

Dat kan via DNS, maar als we moeten testen als developer is het goedkoper en sneller om deze drie domeinnamen via onze host file allemaal naar hetzelfde ip-adres te laten verwijzen. In het hoofdstuk hiervoor en in de film die daar bij hoort wordt uitgelegd hoe dat werkt.

De server krijgt nu het verzoek om een pagina te tonen, maar hoe weet de server nu welke pagina hij moet tonen? Dat hangt af van de domeinnaam die wordt gebruikt. als je www.dreamer.com intypt dan moet de webserver een ander pagina laten zien dan wanneer je www.broken.com intypt.

 

De server ziet dus welk domein er wordt gevraagd en afhankelijk van dat domein worden de files in een andere document root op de harddisk van de webserver gebruikt. Weet je nog de document root is de plaats waar de web pagina's (html files, php files e.d.) op de server staan?

Elk domein heeft dus zijn eigen document root. Deze worden geconfigureerd in Apache configuratie files. Onder Ubuntu staan deze files in /etc/apache2/sites-availble/

Je kunt 'oneindig' veel virtual hosts files aanmaken. In een virtual host file kun je heel veel zeken configureren. De hoofdzaak is om een mapping (=verbinding) te maken tussen de domeinnaam en de document root.

In zijn meest eenvoudige vorm ziet de virtual host config file er als volgt uit:

ServerName      ubuntu.local
DocumentRoot    /var/www/ubuntu.local

In dit voorbeeld is er dus een mapping gemaakt tussen ubuntu.local en de document root /var/www/unbuntu.local De Apache server gaat dus kijken wat het gevraagde domein is. Is dit ubuntu.local dan zal de webserver de files die in /var/www/ubuntu.local/ staan gebruiken om de website te laten zien.

Troubleshoot DNS

Troubleshooten is er proberen achter te komen waarom iets niet werkt.

Om te controleren of je DNS of host file werkt hoef je niet een hele website op te zetten.

Onder Linux en Windows heb je een paar handige commando's:

nslookup

nslookup vps789715.ovh.net

Met nslookup kijk je of jouw systeem een de naam kan omzetten naar een ip-nummer. Of dat dan via DNS of de host file loopt, weet je niet. Om dat te bepalen zou je de host file tijdelijk even leeg kunnen maken en dan controleren of nog steeds hetzelfde ip-nummer wordt gevonden bij de naam.

ping

ping 84.116.46.23

Met ping 'kloppen' we aan bij de server. Als de server 'leeft' dan antwoord die op een ping. Het antwoord kun je terug zien op je console.

Zie je dit:

64 bytes from 84.116.46.23: icmp_seq=9 ttl=57 time=6.889 ms

dan zie je dat de server op ip-adres 84.116.46.23 binnen 6.9 millie seconden (0.006 seconden ) een antwoord heeft verstuurd. Je weet nu dat de server bestaat en 'aan' staat.

Zie je dit:

Request timeout for icmp_seq 0

dan reageert de server niet en zou het kunnen dat de server niet bestaat of uit staat.

Let op dat om beveiligingsredenen een server soms niet reageert op een ping.

Ping Tijden

Ping-tijden en afstanden hebben een relatie. De snelste ping time van Amsterdam naar London (±340 km) is ongeveer 15 ms (0.014 seconden). Amsterdam Sydney, Australië is ongeveer 280 ms. Ping-tijden zijnook afhankelijk van de snelheid van de server, de drukte op het netwerk, de snelheid van jouw lokale netwerk (WiFi), de kwaliteit van jouw verbinding (WiFi), etc. etc.

--