Att implementera en DNS-cache med hjälp av DNSmasq på Linux-system kan ibland upplevas som en utmaning, men fördelarna är betydande.
En DNS-cache bidrar till att öka hastigheten vid DNS-uppslagningar, vilket är processen där webbplatsers domännamn översätts till motsvarande IP-adresser. Genom att använda en lokal DNS-cacheserver, minskar den tid det tar för webbsidor att laddas, särskilt när flera användare i nätverket besöker samma adresser.
Låt oss först definiera vad en DNS-cache egentligen är.
Vad är en DNS-cache?
DNS, eller Domain Name System, fungerar som internetets telefonbok och håller reda på alla offentliga webbplatser och deras tillhörande IP-adresser. Genom att använda DNS slipper vi memorera varje webbplats IP-adress, vilket är en förutsättning för att nätverksinfrastrukturen ska kunna kommunicera med webbplatser.
När du initierar en sökning efter en webbsida sker det en komplex process bakom kulisserna.
Även om systemet har tillgång till en mängd externa DNS-servrar, är det faktum att en lokal replika av DNS-informationen snabbar upp både överföringen och upplösningen av adresser. Det är här DNS-cachen kommer in i bilden.
Innan en förfrågan når webben, hanterar DNS-cachen identitetsupplösning för nyligen och ofta använda domäner, vilket avsevärt snabbar upp processen.
DNS-servern kontaktas enbart när en IP-adress behöver matchas till ett domännamn. Detta kan leda till ökad belastning på servern, särskilt om många förfrågningar sker samtidigt.
En DNS-cache minskar antalet DNS-förfrågningar och förbättrar svarstiderna. De matchade IP-adresserna och tillhörande information lagras lokalt. Istället för att starta en ny DNS-fråga, hämtas informationen från cachen nästa gång adressen eller domännamnet efterfrågas.
Hur löser DNS-cachelagring intermittenta DNS-problem på Amazon EC2?
De flesta Linux-system använder inte en lokal DNS-cache. Det innebär att varje DNS-förfrågan skickas direkt till den auktoritativa DNS-servern från Amazon. Denna har en begränsning i antalet förfrågningar den kan hantera samtidigt. DNS-problem uppstår när antalet förfrågningar överstiger kapaciteten.
Genom att implementera en lokal DNS-cache i systemet kan CPU- och nätverksanvändningen minskas, samtidigt som DNS-fel förhindras. Den lokala DNS-cachen kan svara på förfrågningar riktade mot externa DNS-resurser som Amazon RDS och S3.
DHCP-protokollet används när Amazon EC2-instanser i Amazon VPC:er startas för att hämta en DNS-serveradress.
När Amazon VPC används för att skapa ett virtuellt privat moln, använder Route 53 DNS Resolver en resolver inom VPC för att hantera DNS-förfrågningar för EC2-instanser som körs under lokala Amazon VPC-adresser och poster i privata zoner. Resolvern utför rekursiva sökningar via publika DNS-servrar för alla andra adresser.
En DNS-cache fungerar som en temporär logg över tidigare DNS-förfrågningar, som systemet snabbt kan konsultera vid försök att komma åt en webbplats. Den lagrar information från varje session. Denna DNS-cache gör domännamnsupplösningen smidigare och förhindrar fel med Amazon EC2 Linux-instanser.
Många användare använder Amazons Route 53-tjänst för DNS vid åtkomst till AWS. Det är användarvänligt och kostnadseffektivt, men det finns flera anledningar till att en lokal DNS-server kan vara ett bättre alternativ.
Även om bind9 är ett utmärkt alternativ för en lokal DNS-cacheserver, är dnsmasq betydligt enklare att installera och konfigurera, både på EC2-instanser och lokala datorer.
Vad är dnsmasq?
DNSmasq är ett Linux-verktyg som hanterar DNS, DHCP, TFTP och DNS-cache. Det är utformat för att vara kompakt och lätt, vilket gör det perfekt för nätverk och brandväggar med begränsade resurser.
Det är enkelt att installera och konfigurera. Dnsmasq är en flexibel och praktisk lösning för att konfigurera DNS och DHCP för subnät.
Det går att ställa in DHCP-tilldelade identifierare och relaterade instruktioner för varje server eller en underliggande styrenhet. Dnsmasq stöder både dynamiska och statiska DHCP-alternativ. Verktyget är portabelt och kan hantera DNS och DHCP för minst 1000 klienter.
När en DNS-förfrågan tas emot, svarar dnsmasq antingen från den lokala cachen eller vidarebefordrar den till en auktoritativ DNS-server. Förutom att svara på DNS-förfrågningar om adresser via DHCP, kontrollerar den filen /etc/hosts för att identifiera lokala värdnamn som inte finns listade i den publika DNS.
Genom att använda dnsmasq istället för webbläsarens inbyggda DNS-cache förbättras surfprestandan betydligt. Det är ett utmärkt val för integrerade miljöer med begränsade resurser eftersom installationen är enkel och kräver lite diskutrymme.
Funktioner i dnsmasq
- Dnsmasq underlättar integration med interna DNS-servrar genom att konfigureras för att vidarebefordra specifika domännamnsupplösningsförfrågningar till dedikerade auktoritativa servrar.
- Belastningen på servern minskar, och tillförlitligheten förbättras med den konfigurerade lokala DNS-servern.
- DNS-konfiguration för brandväggsskyddade enheter är enkel och oberoende av DNS som används av Internetleverantören.
- Om internetanslutningen bryts under en DNS-kontroll, avbryts sökningen omedelbart.
- Genom PPP (Point-to-point protocol) eller DHCP-förfrågningar kan dnsmasq samla in data direkt från den underliggande domännamnsservern.
Installation
Systemd-resolved-tjänsten måste avaktiveras innan installation och konfiguration av dnsmasq.
systemctl stop systemd-resolved
Du kan också maskera tjänsten så att den inte startas automatiskt vid omstart.
systemctl mask systemd-resolved
Efter att systemd-resolved avaktiverats, är nästa steg att installera dnsmasq. Det är förinstallerat i de flesta Linux-distributioner, men om så inte är fallet kan det installeras manuellt. Öppna en kommandoterminal och kör följande kommando:
sudo apt-get install dnsmasq
Om du använder yum, använd istället detta kommando:
sudo yum install -y dnsmasq
Detta kommando installerar och startar dnsmasq i bakgrunden.
Efter lyckad installation kan du kontrollera statusen för dnsmasq med följande kommando:
systemctl status dnsmasq
Om statusen är ”active (running)”, är installationen klar och port 53 är konfigurerad. Om statusen är ”inactive (dead)” behöver du starta om både Ubuntu-maskinen och dnsmasq. Detta åtgärdar felet.
Konfiguration
Dnsmasq är nu redo att konfigureras som lokal caching-DNS-server. Standardkonfigurationsfilen finns på /etc/dnsmasq.conf. Denna fil måste modifieras för att anpassa dnsmasq-verktyget.
Använd detta kommando för att öppna och redigera filen:
nano /etc/dnsmasq.conf
Konfigurationsfilen får endast redigeras med root-privilegier. Rensa hela filen, inklusive kommentarer, och klistra in följande konfigurationsinställningar, och spara sedan filen:
port=53 domain-needed bogus-priv listen-address=127.0.0.1 expand-hosts domain=geek-demo.com cache-size=1000
Här är en kort beskrivning av varje parameter:
- Port – Anges vilken port Dnsmasq ska använda för att ta emot DNS-förfrågningar.
- domain-needed – Vidarebefordrar endast domännamn till uppströms DNS-server.
- bogus-priv – Förhindrar vidarebefordran av domän och port.
- listen-address – Anger namnserveradressen. Normalt används den lokala värden som standard.
- domain – Konfigurerar de domäner som dnsmasq ska lägga till korta identifierare.
- cache-size – Anger maximal storlek på DNS-cachen i minnet.
Efter att alla ändringar är gjorda, spara och stäng konfigurationsfilen. Nästa steg är att redigera filen /etc/resolv.conf för att lägga till den lokala adressen för namnservern. Använd följande kommando för att öppna filen med nano:
nano /etc/resolv.conf
Här finns alla namnservrar som systemet använder. Lägg till loopback-adressen i listan. Skriv ”nameserver 127.0.0.1” som första rad i filen.
Spara och avsluta konfigurationsfilen. Starta om dnsmasq för att de nya inställningarna ska börja gälla.
systemctl restart dnsmasq
Testa lokal DNS-cacheserver
Att testa den lokala DNS-servern är enkelt. Öppna en kommandoterminal och använd kommandot dig för att söka efter DNS-cachen. Första gången du kör kommandot dig, borde resultatet vara som vanligt.
┌──(root💀kali)-[/home/writer] └─# dig adminvista.com.com ; <<>> DiG 9.18.0-2-Debian <<>> adminvista.com.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 623 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;adminvista.com.com. IN A ;; ANSWER SECTION: adminvista.com.com. 227 IN A 172.66.43.163 adminvista.com.com. 227 IN A 172.66.40.93 ;; Query time: 31 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) ;; WHEN: Sat Oct 15 07:52:49 EDT 2022 ;; MSG SIZE rcvd: 74
Notera att frågetiden är ca 31 millisekunder för att hämta information från uppströms namnserver. Kör samma kommando en gång till, och du kommer se en betydande minskning i frågetiden.
┌──(root💀kali)-[/home/writer] └─# dig adminvista.com.com ; <<>> DiG 9.18.0-2-Debian <<>> adminvista.com.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21942 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;adminvista.com.com. IN A ;; ANSWER SECTION: adminvista.com.com. 281 IN A 172.66.40.93 adminvista.com.com. 281 IN A 172.66.43.163 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) ;; WHEN: Sat Oct 15 07:58:10 EDT 2022 ;; MSG SIZE rcvd: 74
Den här gången är frågetiden 0 millisekunder. Detta beror på att efter den första sökningen, lagrade dnsmasq datan. Alla efterföljande sökningar utfördes snabbt tack vare cachen. Om du vill radera cachen, måste du starta om dnsmasq.
Sammanfattning
I den här artikeln har vi gått igenom hur du installerar och konfigurerar dnsmasq för att fungera som en lokal DNS-server. Du kanske också är intresserad av att lära dig hur du ändrar DNS-servrar för snabbare surfning på olika operativsystem.