v2.1: aug 2023

Auteur Cees Epema <[email protected]>

1. Voorbereiding

Voordat je begint: in dit document staan de volgende afkortingen:
  1. <WAN_NIC> de naam van jouw WAN netwerkkaart. Meestal is dit enp0s3 in Debian, wanneer je met Virtualbox werkt. Hetzelfde geldt voor

  2. <LAN_NIC>. Dit is de adapternaam van je LAN kaart (Vaak enp0s8).

In VMWare heten de adapters meestal ens33 en ens36.

1.1. Image downloaden

Eerst de Debian netinstall iso downloaden vanaf debian.org: Debian netinstall

1.2. VM sjabloon maken (VirtualBox/VMWare)

  • 2048 GiB RAM

  • 1 NIC voor WAN (NAT)

  • 1 NIC voor LAN (LAN-Segment of Internal network)

  • 40 GiB disk

1.3. Installatie

  • Hostname gateway

  • Desktop en Printserver niet installeren

  • SSH inschakelen voor toegang via host bridge adapter (Alleen wanneer nodig)

1.4. VM Clonen

Clone deze machine, zodat je later een verse Debian hebt voor andere projecten!

2. Configuratie in guest (Alle instructies als # root)

2.1. Aanpassing in /etc/hosts

Controleer of je hostnaam en FQDN (=fully qualified domainname) goed staan in je /etc/hosts bestand. Het zal er zo uit moeten zien:

192.168.199.1	gateway.dominion.lan	gateway

'gateway.dominion.lan' is de FQDN en 'gateway' de hostname, dominion.lan is de domeinnaam.

2.2. Configuratie WAN en LAN in /etc/network/interfaces

Gebruik het commando ip -c l om de*namen* van je NIC te weten te komen.
source /etc/network/interfaces.d/*

## Loopback
auto lo
iface lo inet loopback

## WAN
auto <WAN_NIC>
iface <WAN_NIC> inet dhcp

## LAN
auto <LAN_NIC>
iface <LAN_NIC> static
address 192.168.199.1
netmask 255.255.255.0
network 192.168.199.0
broadcast 192.168.199.255
gateway 192.168.199.1
dns-domain dominion.lan
dns-nameservers 192.168.199.1, 208.67.220.220
dns-search dominion.lan

2.3. Ipv4 forwarding instellen

Voeg de volgende regel toe:

nano /etc/sysctl.conf
net.ipv4.ip_forward = 1

2.4. Bind9 DNS installeren en configureren

Installeren van bind9:

apt install bind9

Template /etc/bind/db.local kopieren naar /etc/bind/db.forward.com

cp -av /etc/bind/db.local /etc/bind/db.forward.com

Maak het bestand leeg met:

cat > /etc/bind/db.forward.com /dev/null

Template /etc/bind/db.empty kopieren naar /etc/bind/db.reverse.com

cp -av /etc/bind/db.empty /etc/bind/db.reverse.com

Maak het bestand leeg met:

cat > /etc/bind/db.reverse.com /dev/null

2.5. /etc/bind/named.conf.local aanpassen:

Maak eerst een backup van het bestanden leeg het daarna:

cp -av /etc/bind/named.conf.options{,.bak}
cat > /etc/bind/named.conf.options /dev/null

Kopieer nu de inhoud van het onderstaande bestand in /etc/bind/named.conf.local

zone "dominion.lan" {
type master;
file "/etc/bind/db.forward.com";
};

zone "199.168.192.in-addr.arpa" {
type master;
notify no;
file "/etc/bind/db.reverse.com";
};

2.6. named.conf.options aanpassen:

acl "trusted" {

	127.0.0.1; // loopback
	192.168.199.1; // ns1
	192.168.199.2; // repo
	192.168.199.3; // mail
	192.168.199.6; // fileserver (via sshfs)
	192.168.199.7; // web
	192.168.199.8; // proxy
	192.168.199.9; // samba (fileserver via samba)
};

options {

	directory "/var/cache/bind";

   	forwarders {

		1.1.1.1; // (Hier mag je ook Google's 8.8.8.8 resolver neerzetten, maar ik heb een beetje een hekel aan Google)
		208.67.220.220; // (OpenDns)
	};

	allow-query {

		192.168.199.0/24;
		127.0.0.1;
	};

	allow-transfer {

		192.168.199.0/24;
		127.0.0.1;
	};

	dnssec-validation yes;
	version "Not available";
	recursion yes;
	allow-recursion { any; };
	querylog yes;

};

2.7. Inhoud /etc/bind/db.forward.com (Forward zones)

Kopieer de onderstaande inhoud in /etc/bind/db.forward.com

$TTL	604800
@	IN	SOA	ns.dominion.lan. root.localhost. (
				     2	; Serial
				604800	; Refresh
				 86400  ; Retry
			       2419200  ; Expire
				604800  ; Negative Cache TTL
)

@		IN	NS	ns.dominion.lan.
ns		IN	A	192.168.199.1
repo		IN	A	192.168.199.2
mail		IN	A	192.168.199.3
fileserver	IN	A	192.168.199.6
web		IN	A	192.168.199.7
proxy		IN	A	192.168.199.8
samba		IN	A	192.168.199.9

2.8. Inhoud /etc/bind/db.reverse.com (Reverse zones)

Kopieer de onderstaande inhoud in /etc/bind/db.reverse.com

$TTL    604800
@       IN      SOA     ns.dominion.lan. root.localhost. (
                                     3  ; Serial
                                604800  ; Refresh
                                 86400  ; Retry
                               2419200  ; Expire
                                604800  ; Negative Cache TTL
)

@               IN      NS      ns
ns              IN      A       192.168.199.1
repo            IN      A       192.168.199.2
mail            IN      A       192.168.199.3
fileserver      IN      A       192.168.199.6
web             IN      A       192.168.199.7
proxy           IN      A       192.168.199.8
samba           IN      A       192.168.199.9
Om in je bind configuratie fouten op te sporen, kun je twee commando’s gebruiken:
  1. named-checkconf -z

  2. named-checkzone dominion.lan /etc/bind/db.forward.com

Meestal krijg je dan een regelnummer te zien, waar de fout wordt verduidelijkt.

3. isc-dhcp-server installeren en configureren

Installatie isc-dhcp-server:

apt install isc-dhcp-server

3.1. LAN adapter toevoegen

nano /etc/default/isc-dhcp-server

Nu weet de dhcp server op welke interface hij zijn diensten aan moet bieden! Oude situatie:

INTERFACESv4=""

Wijzigen in:

INTERFACESv4="<LAN_NIC>"

3.2. Aanpassen van /etc/dhcp/dhcpd.conf

Ik noem hier alleen de opties die van belang zijn en laat alle becommentarieerde regels weg…​

Op de plaats van fixed-address ab:cd:ef:01:02:03 moet je later het mac-adres van de machine invullen, die gebruik maakt van deze gateway.Je wilt dat deze machine automatisch een fixed address krijgt.

option domain-name "dominion.lan";
option domain-name-servers ns.dominion.lan;

default-lease-time 600;
max-lease-time 7200;

ddns-update-style interim;
ddns-update;
update-static-leases on;

authorative;

subnet 192.168.199.0 netmask 255.255.255.0 {
 option domain-name-servers 192.168.199.1, 192.168.199.254;
 option domain-name "ns.dominion.lan";
 option routers 192.168.199.1;
 option broadcast-address 192.168.199.255;
 pool {
	default-lease-time 600;
	max-lease-time 7200;
	range 192.168.199.50 192.168.199.200;
      }
}

host repo {

	hardware ethernet 08:00:27:f7:88:02;
	fixed-address 192.168.199.2;
	max-lease-time 84600;
}
host mail {

	hardware ethernet 08:00:27:f7:88:03;
	fixed-address 192.168.199.3;
	max-lease-time 84600;
}
host printserver {

	hardware ethernet 08:00:27:f7:88:04;
	fixed-address 192.168.199.4;
	max-lease-time 84600;
}
host fileserver {

	hardware ethernet 08:00:27:f7:88:06;
	fixed-address 192.168.199.6;
	max-lease-time 84600;
}
host web {

	hardware ethernet 08:00:27:f7:88:07;
	fixed-address 192.168.199.7;
	max-lease-time 84600;
}
host proxy {

	hardware ethernet 08:00:27:f7:88:08;
	fixed-address 192.168.199.8;
	max-lease-time 84600;
}
host samba {

	hardware ethernet 08:00:27:f7:88:09;
	fixed-address 192.168.199.9;
	max-lease-time 84600;
}
Je kunt fouten in je isc-dhcp-server configuratie opsporen met het commando:
  1. /usr/sbin/dhcpd -cf /etc/dhcp/dhcpd.conf

Herstart nu bind9 en isc-dhcp-server. Wanneer dat niet goed gaat, reboot je je machine. (Gewoon reboot als commando intikken)

systemctl restart bind9 isc-dhcp-server

Als het goed is krijg je nu geen foutmeldingen meer van bind9 of isc-dhcp-server.

4. /etc/resolv.conf aanpassen met permanente resolvconf service

Bij elke reboot, worden de gegevens in /etc/resolv.conf overschreven door de netwerkinstellingen, die bij de installatie van het besturingssysteem werd gemaakt. Het heeft met andere woorden, weinig zin om veranderingen in dit bestand aan te brengen. Ze worden immers toch weer overschreven.

Een oplossing kan de resolvconf service bieden. De service zorgt ervoor dat /etc/resolv.conf door jou beheerde instellingen overneemt. Zo heb je de controle weer terug! Belangrijk is dan wel dat je /etc/network/interfaces de regels dns-nameservers en dns-search bevat. Controleer dat.

4.1. Eerst de service installeren:

apt install resolvconf

4.2. Inhoud /etc/resolv.conf wissen

Wis de inhoud van /etc/resolv.conf:

cat > /etc/resolv.conf /dev/null

4.3. Configuratie aanpassen

In de map /etc/resolvconf/resolv.conf.d/ staan vier bestanden: * original * head * base * tail

Pas het /etc/resolvconf/resolv.conf.d/tail bestand aan.

nameserver 192.168.199.1
search dominion.lan

De overige bestanden kun je ongemoeid laten

Herstart je systeem om te kijken of /etc/resolv.conf de juiste info heeft.

reboot

Controleer /etc/resolv.conf. In ieder geval zou je moeten zien

nameserver 192.168.199.1
search dominion.lan

Wanneer dit niet werkt, pas je in /etc/resolvconf/resolv.conf.d/ het bestand head aan.

echo -e "nameserver 192.168.199.1 \n search dominion.lan" >> /etc/resolvconf/resolv.conf.d/head

5. Firewall instellen voor het NAT-ten van verkeer vanaf aangesloten clients

  • Verwijder de bestaande iptables regels:

iptables -F
  • Verwijder de bestaande NAT regels:

 iptables -F -nat

Dit commando werkt niet altijd. Soms moet je in Debian expliciet aangeven dat je mangle - en nat regels wil verwijderen. Soms verwijder je ze ook in een keer met iptables -F

  • Verwijder de bestaande FORWARD regels:

iptables -F -mangle

Dit commando werkt niet altijd. Soms moet je in Debian expliciet aangeven dat je mangle - en nat regels wil verwijderen. Soms verwijder je ze ook in een keer met iptables -F

  • Bekijk de inhoud (er mogen geen regels meer instaan:

 iptables -L
  • Sta inkomend verkeer toe op de loopback adapter:

iptables -A INPUT -i lo -j ACCEPT
  • Sta inkomend verkeer toe van services die al verbonden zijn (ESTABLISHED) en services die gebonden zijn aan een bestaande NIC:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • Sta inkomend verkeer toe vanaf alle lokale interfaces naar de WAN interface. (Vind de interface naam met 'ip -l')

iptables -A INPUT -m state --state NEW -i <WAN_NIC> -j ACCEPT
  • Laat verkeer door vanaf de WAN interface naar de LAN interface

iptables -A FORWARD -i <WAN_NIC> -o <LAN_NIC> -m state --state ESTABLISHED,RELATED -j ACCEPT
  • Laat ook verkeer door van de LAN interface naar de WAN interface

iptables -A FORWARD -i <LAN_NIC> -o <WAN_NIC> -j ACCEPT
  • Stuur verkeer door wat door de WAN NIC ge-nat moet worden

iptables -t nat -A POSTROUTING -o <WAN_NIC> -j MASQUERADE
  • Nu zou je een gevulde iptables moeten hebben. Controleer het met:

 iptables -L
  • Sla je regels op:

 iptables-save >/etc/firewall.conf
  • Inlezen van regels:

iptables-restore </etc/firewall.conf
  • Voeg de onderstaande regel (15) toe aan /etc/network/interfaces Tussen de WAN en de LAN interface:

pre-up iptables-restore </etc/firewall.conf

6. Test je systeem

  • Herstart je gateway machine

  • Test of iptables regels goed ingeladen zijn met

iptables -L
  • Bekijk de status van je DNS service:

systemctl status bind9
  • Bekijk de status van je isc-dhcp-server

systemctl status isc-dhcp-server
  • Kijk of je de DNS records goed kunt vinden (Hiervoor moet je de package dnsutils installeren (apt install dnsutils)

nslookup ns.dominion.lan

7. Nieuwe debian testclient maken

  • Maak een nieuwe Debian vm

  • Zet de nieuwe Debian in het zelfde LAN-segment (VMWare)/Internal-network(VirtualBox) als de gateway OF

  • Zet de nieuwe Debian op host-only, wanneer je geen netwerk segment gebruikt

  • Start de nieuwe machine

  • Kijk of je een ip adres van je gateway dhcp server krijgt

ip a
  • Pas de hostname aan naar een machine, die ook in je dns-records voorkomt. Bijv. web, proxy of mail

hostnamectl set-hostname web
  • Zoek uit welk mac adres je nieuwe machine heeft (Zie het door : gescheiden adres bij link/ether)

ip a
Vb 08:ea:06:e6:bd:0a
  • Kopieer dit mac adres en zet het in je gateway machine in /etc/dhcp/dhcpd.conf bij de sectie hardware-address 'host web'

  • Herstart je nieuwe machine

reboot
  • Kijk of je het juiste ip adres hebt gekregen met ip a

8. Klaar!

Je gateway zou nu goed moeten werken.