v2.1: aug 2023
Auteur Cees Epema <[email protected]>
1. Voorbereiding
Voordat je begint: in dit document staan de volgende afkortingen: |
-
<WAN_NIC> de naam van jouw WAN netwerkkaart. Meestal is dit
enp0s3
in Debian, wanneer je met Virtualbox werkt. Hetzelfde geldt voor -
<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: |
-
named-checkconf -z
-
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: |
-
/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.