NAMN
- Provided by: dnsmasq-base (Version: 2.93-1)
- Source: dnsmasq
- Report a bug
dnsmasq [OPTION]...
dnsmasq är en lättviktig DNS-, TFTP-, PXE-, routerannonserings- och DHCP-server. Den är avsedd att tillhandahålla kopplade DNS- och DHCP-tjänster till ett LAN.
Dnsmasq accepterar DNS-förfrågningar och svarar antingen på dem från en liten, lokal cache eller vidarebefordrar dem till en riktig, rekursiv DNS-server. Den laddar in innehållet i /etc/hosts så att lokala värdnamn som inte finns i den globala DNS kan lösas och svarar också på DNS-förfrågningar för DHCP-konfigurerade värdar. Den kan också fungera som auktoritativ DNS-server för en eller flera domäner, vilket gör att lokala namn kan visas i den globala DNS. Den kan konfigureras för att utföra DNSSEC-validering
DHCP-servern dnsmasq stöder statiska adress tilldelningar och flera nätverk. Den skickar automatiskt en rimlig standarduppsättning DHCP-alternativ och kan konfigureras för att skicka valfri uppsättning DHCP-alternativ, inklusive leverantörskapselade alternativ. Den inkluderar en säker, skrivskyddad TFTP-server för att möjliggöra nät-/PXE-start av DHCP-värdar och stöder även BOOTP. PXE-stödet är fullt utrustat och inkluderar ett proxyläge som tillhandahåller PXE-information till klienter medan DHCP-adressallokering utförs av en annan server.
DHCPv6-servern i dnsmasq tillhandahåller samma uppsättning funktioner som DHCPv4-servern och inkluderar dessutom routerannonser och en smidig funktion som möjliggör namngivning för klienter som använder DHCPv4 och stateless autoconfiguration endast för IPv6-konfiguration. Det finns stöd för adressallokering (både DHCPv6 och RA) från subnät som delegeras dynamiskt via DHCPv6-prefixdelegering.
Dnsmasq är kodat med små inbyggda system i åtanke. Det syftar till att uppnå minsta möjliga minnesavtryck som är kompatibelt med de funktioner som stöds, och gör det möjligt att utelämna onödiga funktioner från den kompilerade binären.
Observera att i allmänhet är saknade parametrar tillåtna och stänger av funktioner, till exempel inaktiverar ”--pid-file” skrivning av en PID-fil. På BSD, om inte GNU getopt-biblioteket är länkat, fungerar inte den långa formen av alternativen på kommandoraden; den känns fortfarande igen i konfigurationsfilen.
Dnsmasq begränsar värdet för detta alternativ till en timme, om det inte kompileras om.
Dnsmasq kan logga asynkront: detta gör att det kan fortsätta fungera utan att blockeras av syslog, och gör att syslog kan använda dnsmasq för DNS-frågor utan risk för deadlock. Om kön med logglinjer blir full kommer dnsmasq att logga överflödet och antalet förlorade meddelanden. Standardlängden på kön är 5, ett rimligt värde är 5-25, och en maximal gräns på 100 är inställd.
De enda raderna som är relevanta för dnsmasq är namnservrarna. Dnsmasq kan inställas att söka igenom mer än en resolv.conf-fil, det första filnamnet som anges ersätter standardinställningen, efterföljande filer läggs till i listan. Detta är endast tillåtet vid sökning; filen med den senaste ändringstiden används.
Mer specifika domäner har företräde framför mindre specifika domäner, så: --server=/google.com/1.2.3.4 --server=/www.google.com/2.3.4.5 kommer att skicka förfrågningar för google.com och gmail.google.com till 1.2.3.4, men www.google.com kommer att skickas till 2.3.4.5
Matchning av domäner görs normalt på kompletta etiketter, så /google.com/ matchar google.com och www.google.com men INTE supergoogle.com. Detta kan åsidosättas med ett * endast i början av ett mönster: /*google.com/ matchar google.com och www.google.com OCH supergoogle.com. Formen utan jokertecken har prioritet, så om både /google.com/ och /*google.com/ anges kommer google.com och www.google.com att matcha /google.com/ och / *google.com/ matchar endast supergoogle.com.
Av historiska skäl är mönstret /.google.com/ likvärdigt med /google.com/. Om du vill matcha alla underdomäner till google.com men INTE google.com själv, använd /*.google.com/.
Den speciella serveradressen ’#’ betyder ”använd standardservrarna”, så --server=/google.com/1.2.3.4 --server=/www.google.com/# kommer att skicka förfrågningar för google.com och dess underdomäner till 1.2.3.4, förutom www.google.com (och dess underdomäner) som kommer att vidarebefordras som vanligt.
Det är också tillåtet att använda flaggan -S som anger en domän men ingen IP-adress. Detta talar om för dnsmasq att domänen är lokal och att den kan svara på förfrågningar från /etc/hosts eller DHCP men aldrig vidarebefordra förfrågningar på den domänen till någon uppströms server. --local är en synonym för --server för att göra konfigurationsfilerna tydligare i detta fall.
IPv6-adresser kan inkludera ett %interface scope-id, t.ex. fe80::202:a412:4512:7bbf%eth0.
Den valfria strängen efter @-tecknet talar om för dnsmasq hur källan för frågorna till denna namnservrar ska ställas in. Det kan antingen vara en ip-adress, ett gränssnittsnamn eller båda. Ip-adressen bör tillhöra den maskin på vilken dnsmasq körs, annars kommer denna serverrad att loggas och sedan ignoreras. Om ett gränssnittsnamn anges kommer förfrågningar till servern att tvingas via det gränssnittet; om en IP-adress anges kommer källadressen för förfrågningarna att ställas in till den adressen; och om båda anges kommer en kombination av IP-adress och gränssnittsnamn att användas för att styra förfrågningar till servern. Flaggan query-port ignoreras för alla servrar som har en källadress angiven, men porten kan anges direkt som del av källadressen. Att tvinga förfrågningar till ett gränssnitt är inte implementerat på alla plattformar som stöds av dnsmasq.
Uppströms servrar kan anges med ett värdnamn istället för en IP-adress. I detta fall kommer dnsmasq att försöka använda systemets resolver för att hämta IP-adressen till en server under uppstart. Om namnuppslagningen misslyckas misslyckas även starten av dnsmasq. Om systemets konfiguration är sådan att systemets resolver skickar DNS-frågor via dnsmasq-instansen som startar, kommer detta att timeout och misslyckas.
Observera att beteendet för frågor som inte matchar den angivna adresslitteralen ändrades i version 2.86. Tidigare versioner, konfigurerade med (t.ex.) --address=/example.com/1.2.3.4 och sedan frågade efter en annan RR-typ än A, skulle returnera ett NoData-svar. Från 2.86 skickas frågan uppströms. För att återställa beteendet före 2.86, använd konfigurationen --address=/example.com/1.2.3.4 --local=/example.com/
--host-record -alternativ anses läsas före värdfiler, så ett namn som visas där hindrar skapandet av PTR-poster om det också visas i värdfilen. Till skillnad från värdfiler expanderas inte namn, även när --expand-hosts är aktivt. Korta och långa namn kan visas i samma --host-record, t.ex.
--host-record=laptop,laptop.thekelleys.org,192.168.0.1,1234::100
Om time-to-live anges, åsidosätter det standardvärdet, som är noll eller värdet för --local-ttl. Värdet är ett positivt heltal och anger time-to-live i sekunder.
Om time-to-live anges, åsidosätter det standardvärdet, som är noll eller värdet av --local-ttl. Värdet är ett positivt heltal och anger time-to-live i sekunder.
Ett exempel bör göra detta tydligare. Först sekventiella nummer. --synth-domain=thekelleys.org.uk,192.168.0.50,192.168.0.70,internal-* resulterar i namnet internal-0.thekelleys.org.uk. som returnerar 192.168.0.50, internal-1.thekelleys.org.uk som returnerar 192.168.0.51 och så vidare. (notera *) Samma princip gäller för IPv6-adresser (där siffrorna kan vara mycket stora). Omvända sökningar från adress till namn fungerar som förväntat.
För det andra --synth-domain=thekelleys.org.uk,192.168.0.0/24,internal- (utan *) resulterar i en förfrågan om internal-192-168-0-56.thekelleys.org.uk som returnerar 192.168.0.56 och en omvänd förfrågan vice versa. Detsamma gäller för IPv6; representationen använder inte ::-komprimeringsfunktionen eller den speciella representationen av V4-mappade IPv6-adresser, eftersom dessa kan generera olagliga domännamn, så alla domäner har formen internal-1000-0000-0000-0000-0000-0000-0000-0008.example.com
Adressintervallet kan ha formen <startadress>,<slutadress> eller <ip-adress>/<prefixlängd> i båda formerna av alternativet. För IPv6 måste start- och slutadresserna falla inom samma /64-nätverk, eller prefixlängden måste vara större än eller lika med 64, förutom att prefixlängder kortare än 64 endast är tillåtna om icke-sekventiella namn används.
Till exempel --add-subnet=24,96 kommer att lägga till /24- och /96-undernät för IPv4- och IPv6-förfrågare. --add-subnet=1.2.3.4/24 kommer att lägga till 1.2.3.0/24 för IPv4-förfrågare och ::/0 för IPv6-förfrågare. --add-subnet=1.2.3.4/24,1.2.3.4/24 lägger till 1.2.3.0/24 för både IPv4- och IPv6-begärare.
Versioner av dnsmasq före 2.80 kontrollerade som standard inte osignerade svar och använde --dnssec-check-unsigned för att aktivera detta. Sådana konfigurationer kommer att fortsätta att fungera som tidigare, men de som använde standardinställningen utan kontroll måste ändras för att uttryckligen välja ingen kontroll. Den nya standardinställningen beror på att det är farligt att inaktivera kontrollen av osignerade svar. Det öppnar inte bara för möjligheten till förfalskade svar, utan gör också att allt verkar fungera även när uppströmsnamnserverna inte stöder DNSSEC, och i detta fall sker ingen DNSSEC-validering alls.
Tidigare versioner av dnsmasq överbelastade SIGHUP (som läser om mycket av konfigurationen) för att också aktivera tidsvalidering.
Om dnsmasq körs i felsökningsläge (--no-daemon flagga) behåller SIGINT sin vanliga funktion att avsluta dnsmasq-processen.
Som alternativ till att direkt ange subnät är det möjligt att ange namnet på ett gränssnitt, i vilket fall de subnät som antyds av det gränssnittets konfigurerade adresser och nätmask/prefixlängd används; detta är användbart när man använder konstruerade DHCP-intervall eftersom den faktiska adressen är dynamisk och inte känd när dnsmasq konfigureras. Gränssnittsadresserna kan begränsas till endast IPv6-adresser med <interface>/6 eller till endast IPv4 med <interface>/4. Detta är användbart när ett gränssnitt har dynamiskt bestämda globala IPv6-adresser som ska visas i zonen, men RFC1918 IPv4-adresser som inte ska visas. Gränssnittsnamn och adressliterala subnätsspecifikationer kan användas fritt i samma --auth-zone-deklaration.
Det är möjligt att utesluta vissa IP-adresser från svaren. Det kan användas för att säkerställa att svaren endast innehåller globala routbara IP-adresser (genom att utesluta loopback-, RFC1918- och ULA-adresser).
Undernätet/undernäten används också för att definiera in-addr.arpa- och ip6.arpa-domäner som används för omvända DNS-frågor. Om inget anges är prefixlängden som standard 24 för IPv4 och 64 för IPv6. För IPv4-undernät bör prefixlängden ha värdet 8, 16 eller 24 om du inte är bekant med RFC 2317 och har ordnat in-addr.arpa-delegeringen därefter. Observera att om inga undernät anges, besvaras inga omvända frågor.
Aktivera DHCP-servern. Adresser kommer att delas ut från intervallet <start-addr> till <end-addr> och från statiskt definierade adresser som anges i --dhcp-host alternativ. Om leasingtiden anges kommer leasingavtal att ges för den tidsperioden. Leasingtiden anges i sekunder, minuter (t.ex. 45m), timmar (t.ex. 1h), dagar (2d), veckor (1w) eller ”infinite” . Om den inte anges är standardleasetiden en timme för IPv4 och en dag för IPv6. Den minsta leasetiden är två minuter. För IPv6-intervall kan leasetiden vara ”deprecated”; detta sätter den önskade livslängden som skickas i en DHCP lease eller routerannonsering till noll, vilket gör att klienter använder andra adresser, om tillgängliga, för nya anslutningar som en förberedelse för omnumrering.
Det här alternativet kan upprepas med olika adresser för att aktivera DHCP -tjänsten för mer än ett nätverk. För direktanslutna nätverk (dvs. nätverk där maskinen som kör dnsmasq har ett gränssnitt) är nätmasken valfri: dnsmasq bestämmer den utifrån gränssnittets konfiguration. För nätverk som tar emot DHCP-tjänsten via en reläagent kan dnsmasq inte bestämma nätmasken själv, så den bör anges, annars måste dnsmasq gissa utifrån klassen (A, B eller C) för nätverksadressen. Sändningsadressen är alltid valfri. Det är alltid tillåtet att ha mer än en --dhcp-range i ett enda undernät.
För IPv6 är parametrarna något annorlunda: istället för nätmask och sändningsadress finns det en valfri prefixlängd som måste vara lika med eller större än prefixlängden på det lokala gränssnittet. Om den inte anges är standardvärdet 64. Till skillnad från IPv4-fallet härleds prefixlängden inte automatiskt från gränssnittskonfigurationen. Den minsta storleken på prefixlängden är 64.
IPv6 (endast) stöder en annan typ av intervall. I detta fall innehåller startadressen och den valfria slutadressen endast nätverksdelen (dvs. ::1) och följs av konstruktör:<gränssnitt>. Detta bildar en mall som beskriver hur man skapar intervall, baserat på de adresser som tilldelats gränssnittet. Till exempel
--dhcp-range=::1,::400,constructor:eth0
kommer att söka efter adresser på eth0 och sedan skapa ett intervall från <nätverk>::1 till <nätverk>::400. Om gränssnittet tilldelas mer än ett nätverk, kommer motsvarande intervall att skapas automatiskt, och sedan föråldras och slutligen tas bort igen när adressen föråldras och sedan raderas. Gränssnittsnamnet kan ha ett slutligt ”*” jokertecken. Observera att inte vilken adress som helst på eth0 duger: den får inte vara en autokonfigurerad eller privat adress, eller vara föråldrad.
Om --dhcp-range endast används för stateless DHCP och/eller SLAAC, kan adressen helt enkelt vara ::
--dhcp-range=::,constructor:eth0
Det valfria set:<tag> ställer in en alfanumerisk etikett som markerar detta nätverk så att DHCP-alternativ kan anges per nätverk. När det istället prefixeras med ’tag:’ ändras dess betydelse från att ställa in en tagg till att matcha den. Endast en tagg kan ställas in, men mer än en tagg kan matchas.
Det valfria nyckelordet <mode> kan vara static som talar om för dnsmasq att aktivera DHCP för det angivna nätverket, men inte att dynamiskt tilldela IP-adresser: endast värdar som har statiska adresser angivna via --dhcp-host eller från /etc/ethers kommer att betjänas. Ett statiskt subnät med adress alla nollor kan användas som en ”catch-all”-adress för att möjliggöra svar på alla informationsförfrågningspaket på ett subnät som tillhandahålls med stateless DHCPv6, dvs. --dhcp-range=::,static
För IPv4 kan <mode> vara proxy,
i vilket fall dnsmasq tillhandahåller proxy-DHCP på det
angivna subnätet. (Se --pxe-prompt och
--pxe-service för mer information.)
För IPv6 kan läget vara en kombination av ra-only, slaac, ra-names, ra-stateless, ra-advrouter, off-link.
ra-only talar om för dnsmasq att endast erbjuda Router Advertisement på detta subnät, och inte DHCP.
slaac ber dnsmasq att erbjuda Router Advertisement på detta subnät och att ställa in A-biten i routerannonseringen, så att klienten kommer att använda SLAAC-adresser. När detta används med ett DHCP-intervall eller en statisk DHCP-adress resulterar det i att klienten har både en DHCP-tilldelad och en SLAAC-adress
ra-stateless skickar routerannonser med O- och A-bitarna inställda och tillhandahåller en stateless DHCP-tjänst. Klienten kommer att använda en SLAAC-adress och använda DHCP för annan konfigurationsinformation.
ra-names aktiverar ett läge som ger DNS-namn
till dual-stack-värdar som använder SLAAC för IPv6.
Dnsmasq använder värdens IPv4-lease för att
härleda namnet, nätverkssegmentet och MAC-adressen och
antar att värden också kommer att ha en IPv6-adress
beräknad med SLAAC-algoritmen, på samma
nätverkssegment.
Adressen pingas, och om ett svar mottas läggs en AAAA-post till i
DNS för denna IPv6-adress.
Observera att detta endast sker för direktanslutna nätverk
(inte sådana som använder DHCP via en relä) och att
det inte fungerar om en värd använder
sekretessförlängningar.
ra-names kan kombineras med ra-stateless och slaac.
ra-advrouter aktiverar ett läge där
routeradresser snarare än prefix inkluderas i annonserna. Detta
beskrivs i RFC-3775 avsnitt 7.2 och används i mobilt IPv6. I
detta läge ingår även intervallalternativet,
som beskrivs i RFC-3775 avsnitt 7.3.
off-link talar om för dnsmasq att annonsera prefixet utan att on-link-biten (även kallad L) är inställd.
--dhcp-host=lap,192.168.0.199 talar om för dnsmasq att alltid tilldela maskinen lap IP-adressen 192.168.0.199.
Adresser som tilldelas på detta sätt är inte begränsade till det intervall som anges av alternativet --dhcp-range, men de måste vara i samma subnät som något giltigt dhcp-intervall. För subnät som inte behöver en pool med dynamiskt tilldelade adresser använder du nyckelordet ”static” i deklarationen --dhcp-range.
Det är tillåtet att använda klientidentifierare (kallade klient DUID i IPv6-land) istället för hårdvaruadresser för att identifiera värdar genom att lägga till prefixet ’id:’. Alltså: --dhcp-host=id:01:02:03:04,.....
hänvisar till värden med klientidentifieraren 01:02:03:04. Det är också tillåtet att ange klient-ID som text, så här: --dhcp-host=id:clientidastext,.....
En enda --dhcp-host kan innehålla en IPv4-adress eller en eller flera IPv6-adresser, eller båda. IPv6-adresser måste omges av hakparenteser, så här: --dhcp-host=laptop,[1234::56] IPv6-adresser får endast innehålla värdidentifieringsdelen: --dhcp-host=laptop,[::56] I så fall fungerar de som jokertecken i konstruerade DHCP-intervall, med lämplig nätverksdel infogad. För IPv6 kan en adress innehålla en prefixlängd: --dhcp-host=laptop,[1234:50/126] vilket (i detta fall) anger fyra adresser, 1234::50 till 1234::53. Detta (och möjligheten att ange flera adresser) är användbart när en värd har ett konsekvent namn eller hårdvaru-ID, men varierande DUID:er, eftersom det gör det möjligt för dnsmasq att respektera den statiska adressallokeringen men tilldela en annan adress för varje DUID. Detta inträffar vanligtvis vid kedjebaserad nätverksstart, eftersom varje steg i kedjan i tur och ordning tilldelar en adress.
Observera att i IPv6 DHCP kanske hårdvaruadressen inte är tillgänglig, även om den normalt är det för direktanslutna klienter eller klienter som använder DHCP-reläer som stöder RFC 6939.
För DHCPv4 betyder det speciella alternativet id:* ”ignorera alla klient-id och använd endast MAC-adresser”. Detta är användbart när en klient ibland presenterar ett klient-id men inte alltid.
Om ett namn förekommer i /etc/hosts kan den associerade
adressen tilldelas en DHCP-lease, men endast om ett --dhcp-host
-alternativ som anger namnet också finns. Endast ett
värdnamn kan anges i ett --dhcp-host -alternativ, men
alias är möjliga genom att använda CNAME. (Se
--cname).
Observera att /etc/hosts INTE används när DNS-serversidan
av dnsmasq är inaktiverad genom att DNS-serverporten är
inställd på noll.
Mer än en --dhcp-host kan associeras (med namn, hårdvaruadress eller UID) med en värd. Vilken som används (och därmed vilken adress som tilldelas av DHCP och visas i DNS) beror på det subnät där värden senast erhöll en DHCP-lease: den --dhcp-host med en adress inom subnätet används. Om mer än en adress finns inom subnätet är resultatet odefinierat. En följd av detta är att namnet som är associerat med en värd som använder --dhcp-host inte visas i DNS förrän värden erhåller en DHCP-lease.
Det speciella nyckelordet ignore talar om för dnsmasq att aldrig erbjuda en DHCP-lease till en maskin. Maskinen kan anges med hårdvaruadress, klient-ID eller värdnamn. Till exempel: --dhcp-host=00:20:e0:3b:13:af,ignore.
Detta kan vara användbart när det finns en annan DHCP-server i nätverket som ska användas av vissa maskiner.
Konstruktionen set:<tag> ställer in taggen när denna --dhcp-host-direktiv används. Detta kan användas för att selektivt skicka DHCP-alternativ endast till denna värd. Mer än en tagg kan ställas in i ett --dhcp-host-direktiv (men inte på andra ställen där set:<tag> är tillåtet). När en värd matchar något --dhcp-host-direktiv (eller ett som antyds av /etc/ethers) sätts den speciella taggen known. Detta gör det möjligt att konfigurera dnsmasq så att den ignorerar förfrågningar från okända maskiner med --dhcp-ignore=tag:!known. Om värden endast matchar ett --dhcp-host-direktiv som inte kan användas eftersom det anger en adress på ett annat subnät, sätts taggen known-othernet.
Konstruktionen tag:<tag> filtrerar vilka dhcp-host-direktiv som används. Mer än en tagg kan anges. I detta fall måste förfrågan matcha alla taggar. Taggade direktiv används före otaggade. Observera att en av <hwaddr>, <client_id> eller <hostname> fortfarande måste anges (kan vara ett jokertecken).
Ethernet-adresser (men inte klient-id) kan ha jokertecken, så till exempel --dhcp-host=00:20:e0:3b:13:*,ignore kommer att få dnsmasq att ignorera det angivna intervallet av hårdvaruadresser. Observera att ”*” måste undvikas eller anges inom citationstecken på kommandoraden, men inte i konfigurationsfilen.
Hårdvaruadresser matchar normalt alla nätverkstyper (ARP), men det är möjligt att begränsa dem till en enda ARP-typ genom att föregå dem med ARP-typen (i HEX) och ”-”. Så --dhcp-host=06-00:20:e0:3b:13:af,1.2.3.4
kommer endast att matcha en Token-Ring-hårdvaruadress, eftersom ARP-adress typen för token ring är 6.
Som ett specialfall är det i DHCPv4 möjligt att inkludera mer än en hårdvaruadress. Exempel: --dhcp-host=11:22:33:44:55:66,12:34:56:78:90:12,192.168.0.2. Detta gör det möjligt att koppla en IP-adress till flera hårdvaruadresser och ger dnsmasq tillstånd att överge en DHCP-lease till en av hårdvaruadresserna när en annan begär en lease. Observera att detta är farligt att göra: det fungerar bara tillförlitligt om endast en av hårdvaruadresserna är aktiv vid varje tillfälle och det finns inget sätt för dnsmasq att genomdriva detta. Det är till exempel användbart att tilldela en stabil IP-adress till en bärbar dator som har både trådbundna och trådlösa gränssnitt.
Alternativnumren anges i RFC2132 och efterföljande RFC:er. Den uppsättning alternativnamn som dnsmasq känner till kan hittas genom att köra dnsmasq --help dhcp. Om du till exempel vill ställa in standardroutningsalternativet till 192.168.4.4 använder du --dhcp-option=3,192.168.4.4 eller --dhcp-option=option: router,192.168.4.4 och för att ställa in tidsserveradressen till 192.168.0.4, använd --dhcp-option=42,192.168.0.4 eller --dhcp-option=option:ntp-server,192.168.0.4. Den speciella adressen 0.0.0.0 betyder ”adressen till det system som kör dnsmasq”.
Ett alternativ utan data är giltigt och innehåller bara alternativet utan data. (Det finns för närvarande bara ett alternativ med ett datafält med längden noll definierat för DHCPv4, 80:rapid commit, så denna funktion är inte särskilt användbar i praktiken). Alternativ för vilka dnsmasq normalt tillhandahåller standardvärden kan utelämnas genom att definiera alternativet utan data. Dessa är netmask, broadcast, router, DNS-server, domännamn och värdnamn. För DHCPv4 --dhcp-option = option:router resultera i att inget routeralternativ skickas, istället för standardvärdet för den värd där dnsmasq körs. För DHCPv6 gäller samma sak för alternativen DNS-server och uppdateringstid.
Tillåtna datatyper är kommaseparerade punktseparerade IPv4-adresser, []-omslutna IPv6-adresser, ett decimaltal, kolonseparerade hexadecimala siffror och en textsträng. Om de valfria taggarna anges skickas detta alternativ endast när alla taggar matchar.
Särskild bearbetning utförs på ett textargument för alternativ 119, för att överensstämma med RFC 3397. Text eller IP-adresser med fyra punkter som argument till alternativ 120 hanteras enligt RFC 3361. IP-adresser med fyra punkter som följs av en snedstreck och sedan en nätmaskstorlek kodas enligt beskrivningen i RFC 3442.
IPv6-alternativ anges med hjälp av nyckelordet
option6:,
följt av alternativnumret eller alternativnamnet.
IPv6-alternativets är skilt från IPv4-optionsnamnrymden.
IPv6-adresser i optioner måste omges av hakparenteser, t.ex.
--dhcp-option=option6:ntp-server,[1234::56].
För IPv6 betyder [::] ”den globala adressen för maskinen som kör dnsmasq”, medan [fd00::] ersätts med ULA, om den finns, och [fe80::] med den länklokala adressen.
Var försiktig: datatypens lämplighet för det skickade optionsnumret kontrolleras inte. Det är fullt möjligt att få dnsmasq att generera olagliga DHCP-paket med oförsiktig användning av denna flagga. När värdet är ett decimaltal måste dnsmasq bestämma hur stor dataposten är. Detta görs genom att undersöka optionsnumret och/eller värdet, men kan åsidosättas genom att lägga till en enda bokstavsflagga enligt följande: b = en byte, s = två byte, i = fyra byte. Detta är främst användbart med inkapslade leverantörsklassalternativ (se nedan) där dnsmasq inte kan bestämma datastorleken utifrån alternativnumret. Alternativdata som enbart består av punkter och siffror tolkas av dnsmasq som en IP-adress och infogas i ett alternativ som sådan. För att tvinga fram en bokstavlig sträng, använd citattecken. När du till exempel använder alternativ 66 för att skicka en bokstavlig IP-adress som TFTP-servernamn, måste du göra --dhcp-option=66,”1.2.3.4”.
Inkapslade leverantörsklassalternativ kan också anges (endast IPv4) med --dhcp-option: till exempel --dhcp-option=vendor:PXEClient,1,0.0.0.0 skickar det inkapslade leverantörs klassspecifika alternativet ”mftp-address=0.0.0.0” till alla klienter vars leverantörsklass matchar ”PXEClient”. Leverantörsklassmatchningen är baserad på delsträngar (se --dhcp-vendorclass för mer information) . Om ett leverantörsklassalternativ (nummer 60) skickas av dnsmasq, används det för att välja inkapslade alternativ framför de som skickas av klienten. Det är möjligt att helt utelämna leverantörsklassen; --dhcp-option=vendor:,1,0.0.0.0 i vilket fall det inkapslade alternativet alltid skickas.
Alternativ kan kapslas (endast IPv4) inom andra alternativ: till exempel --dhcp-option=encap:175, 190, ”iscsi-client0” skickar alternativ 175, inom vilket alternativ 190 finns. Om flera alternativ anges som är inkapslade med samma alternativnummer kommer de att kombineras korrekt till ett inkapslat alternativ. encap: och vendor: kan inte båda anges i samma --dhcp-option.
Den sista varianten av inkapslade alternativ är ”Vendor-Identifying Vendor Options” enligt specifikationen i RFC3925. Dessa betecknas så här: --dhcp-option=vi-encap:2, 10, ”text” Siffran i vi-encap: är IANA-företagsnumret som används för att identifiera detta alternativ. Denna form av inkapsling stöds i IPv6.
Adressen 0.0.0.0 behandlas inte särskilt i inkapslade alternativ.
Åtkomstkontroll för DHCP-klienter har samma regler som för DHCP -servern, se --interface, --except-interface, etc. Det valfria gränssnittsnamnet i --dhcp-relay-konfigurationen har en annan funktion: det styr på vilket gränssnitt DHCP-svar från servern kommer att accepteras. Detta är avsett för konfigurationer som har tre gränssnitt: ett som vidarebefordras från, ett andra som ansluter till DHCP-servern och ett tredje som är ett opålitligt nätverk, vanligtvis det bredare internet. Det undviker risken för att falska svar anländer via detta tredje gränssnitt.
Det är tillåtet att låta dnsmasq fungera som en DHCP-server på en uppsättning gränssnitt och vidarebefordra från en separat uppsättning gränssnitt. Observera att även om det är fullt möjligt att skriva konfigurationer som verkar fungera som en server och en vidarebefordran på samma gränssnitt, stöds detta inte : vidarebefordringsfunktionen har företräde.
Både DHCPv4- och DHCPv6-vidarebefordran stöds. Det är inte möjligt att vidarebefordra DHCPv4 vidare till en DHCPv6-server eller vice versa.
DHCP-reläfunktionen för IPv6 inkluderar möjligheten att snoopa prefix-delegering från vidarebefordrade DHCP-transaktioner. Se --dhcp-script för mer information.
Denna version av DHCP-relä delar upp dessa funktioner. Den använder adressen till det server-facing relä gränssnittet eller en direkt angiven adress som den adress som servern kommunicerar med. Adressen till det klient-facing gränssnittet (det första objektet i konfigurationen) används för att bestämma klientens subnät. Den lokala adressen används också som server-ID-överskrivning så att klienten alltid skickar förfrågningar via reläet. Effekten av detta är att servern inte behöver en rutt till klientnätverket och att klienterna inte behöver en rutt till servern.
Den tredje parametern är obligatorisk. Om det är ett gränssnittsnamn kan det inte vara ett jokertecken och samma filtrering som beskrivs i --dhcp-relay; svar från servern måste komma via det angivna gränssnittet. Om den tredje parametern är en IP-adress måste det vara en adress till ett lokalt gränssnitt som är routbart från servern; i detta fall sker ingen filtrering och svarspaketen kan komma via vilken rutt som helst.
Om du konfigurerar ett nätverk där klientnätverken har begränsad routing, var försiktig med att konfigurera DHCP-servern. Dnsmasq, som DHCP-server, kommer att ställa in standardrutten till det klientinriktade relägränssnittet om det inte uttryckligen konfigureras: det är en rimlig standardinställning. Den normala standard-DNS-servern (samma adress som DHCP-servern) är inte lämplig när det inte finns någon rutt mellan de två, så detta måste konfigureras uttryckligen.
”leverantörsklass” som i viss mening representerar typen av värd. Detta alternativ mappar leverantörsklasser till taggar, så att DHCP-alternativ kan levereras selektivt till olika klasser av värdar. Till exempel --dhcp-vendorclass=set:printers,Hewlett-Packard JetDirect tillåter att alternativ endast ställs in för HP-skrivare så här: --dhcp-option=tag:printers,3,192.168.4.4 Strängen för leverantörsklass är en delsträng som matchas mot den leverantörsklass som tillhandahålls av klienten, för att möjliggöra fuzzy-matchning. Prefixet set: är valfritt men tillåtet för konsistens.
Observera att endast i IPv6 har leverantörsklasser namnutrymme med ett IANA-tilldelat företagsnummer. Detta anges med nyckelordet enterprise: och specificerar att endast leverantörsklasser som matchar det angivna numret ska sökas.
--dhcp-remoteid (men inte --dhcp-circuitid) stöds i IPv6.
Värdet kan ha formen ”01:ff:*:02”, i
vilket fall värdet måste matcha (förutom
jokertecken) men den skickade optionen kan ha omatchade data efter
slutet av värdet. Värdet kan också ha samma form
som i --dhcp-option,
i vilket fall den skickade optionen behandlas som en array, och ett
element måste matcha.
--dhcp-match=set:efi-ia32,option:client-arch,6 ställer in
taggen efi-ia32 om siffran 6 förekommer i listan
över arkitekturer som skickas av klienten i alternativ 93. (Se
RFC 4578 för detaljer. ) Om värdet är en
sträng används delsträngsmatchning.
Den speciella formen med vi-encap:<företagsnummer> matchas mot leverantörsidentifierande leverantörsklasser för det angivna företaget. Se RFC 3925 för mer information om dessa sällsynta och intressanta varelser.
Som en utökning stöder tag:<tag>-klausuler begränsad jokerteckenmatchning, liknande matchningen i direktivet --interface. Detta gör det möjligt för exemplet --tag-if=set:ppp,tag:ppp* att ställa in taggen ’ppp’ för alla förfrågningar som tas emot på alla matchande gränssnitt (ppp0, ppp1, etc). Detta kan användas tillsammans med formatet tag:!<tag>, vilket innebär att ingen tagg som matchar jokertecknet får sättas.
Detta anger ett startalternativ som kan visas i en PXE-startmeny. <CSA> är klientsystemtyp, endast tjänster av rätt typ visas i en meny. De kända typerna är x86PC, PC98, IA64_EFI, Alpha, Arc_x86, Intel_Lean_Client, IA32_EFI, x86-64_EFI, Xscale_EFI, BC_EFI, ARM32_EFI och ARM64_EFI; ett heltal kan användas för andra typer. Parametern efter menytexten kan vara ett filnamn, i vilket fall dnsmasq fungerar som en startserver och dirigerar PXE-klienten att ladda ner filen via TFTP, antingen från sig själv ( --enable-tftp måste vara inställt för att detta ska fungera) eller en annan TFTP-server om den slutliga serverns adress/namn anges. Observera att suffixet ”lager” (normalt ”.0”) tillhandahålls av PXE och inte behöver läggas till basnamnet. Alternativt kan basnamnet vara ett filnamn, komplett med suffix, i vilket fall inget lagersuffix läggs till. Om en heltalstyp av starttjänst anges istället för ett basnamn kommer PXE-klienten att söka efter en lämplig starttjänst för den typen i nätverket. Denna sökning kan göras genom sändning eller direkt till en server om dess IP-adress/namn anges.
Om ingen starttjänsttyp eller filnamn anges (eller om en starttjänsttyp på 0 anges) kommer menyposten att avbryta nätverksstartsproceduren och fortsätta starta från lokala medier. Serveradressen kan anges som ett domännamn som söks upp i /etc/hosts. Detta namn kan associeras i /etc/hosts med flera IP-adresser, som används i tur och ordning.
Dnsmasq stöder PXE ”proxy-DHCP”, i detta fall ansvarar en annan DHCP-server i nätverket för att tilldela IP-adresser, och dnsmasq tillhandahåller endast informationen som anges i --pxe-prompt och --pxe-service för att möjliggöra nätverksstart. Detta läge aktiveras med hjälp av nyckelordet proxy i --dhcp-range. Om den ”andra” DHCP-servern finns på ett fjärrnätverk är det möjligt och användbart att konfigurera dnsmasq som både en PXE proxy-DHCP-server och en DHCP-relä till den fjärranslutna DHCP-servern. Se --dhcp-relay för mer information. PXE stöds för närvarande endast över IPv4.
--dhcp-pxe-vendor=PXEClient,HW-Client
aktiverar dnsmasq så att det också tillhandahåller proxy-PXE-tjänst till de PXE-klienter som har HW-Client som identifierare.
Argumenten till processen är ”add”, ’old’ eller ”del”, MAC -adressen för värden (eller DUID för IPv6) , IP-adressen och värdnamnet, om det är känt. ”add” betyder att en leasing har skapats, ’del’ betyder att den har förstörts, ”old” är en anmälan om en befintlig leasing när dnsmasq startar eller en ändring av MAC-adress eller värdnamn för en befintlig leasing (även leasinglängd eller utgångsdatum och klient-id, om --leasefile-ro är inställt och leasingens utgångsdatum om --script-on-renewal är inställt). Om MAC-adressen kommer från en annan nätverkstyp än ethernet, kommer nätverkstypen att läggas till i början, t.ex. ”06-01:23:45:67:89:ab” för token ring. Processen körs som root (förutsatt att dnsmasq ursprungligen kördes som root) även om dnsmasq är konfigurerat för att ändra UID till en icke-privilegierad användare.
Miljön ärvs från den som anropar dnsmasq, med några eller alla följande variabler tillagda
För både IPv4 och IPv6:
DNSMASQ_DOMAIN om värdens fullständiga domännamn är känt, är detta inställt på domändelen. (Observera att värdnamnet som skickas till skriptet som ett argument aldrig är fullständigt.)
Om klienten tillhandahåller ett värdnamn, DNSMASQ_SUPPLIED_HOSTNAME
Om klienten tillhandahåller användarklasser, DNSMASQ_USER_CLASS0..DNSMASQ_USER_CLASSn
Om dnsmasq kompilerades med HAVE_BROKEN_RTC, lagras längden på leasingavtalet (i sekunder) i DNSMASQ_LEASE_LENGTH, annars lagras tiden för leasingavtalets utgång i DNSMASQ_LEASE_EXPIRES. Antalet sekunder till leasingavtalets utgång lagras alltid i DNSMASQ_TIME_REMAINING.
DNSMASQ_DATA_MISSING sätts till ”1” under ”gamla” händelser för befintliga leasingavtal som genereras vid start för att indikera att data som inte lagras i den permanenta leasingdatabasen inte kommer att finnas. Detta omfattar allt utom IP-adress, värdnamn, MAC-adress, DUID, IAID och leasingavtalets längd eller utgångstid.
Om ett leasingavtal tidigare hade ett värdnamn som har tagits bort genereras en ”gammal” händelse med leasingavtalets nya status, dvs. inget namn, och det tidigare namnet anges i miljövariabeln DNSMASQ_OLD_HOSTNAME.
DNSMASQ_INTERFACE lagrar namnet på det gränssnitt som begäran kom till; detta ställs inte in för ”gamla” åtgärder när dnsmasq startas om.
DNSMASQ_RELAY_ADDRESS ställs in om klienten använde en DHCP-relä för att kontakta dnsmasq och IP-adressen för reläet är känd.
DNSMASQ_TAGS innehåller alla taggar som ställts in under DHCP-transaktionen, separerade med mellanslag.
DNSMASQ_LOG_DHCP ställs in om --log-dhcp är aktivt.
DNSMASQ_REQUESTED_OPTIONS en sträng som innehåller decimalvärdena i alternativet Parameter Request List, separerade med kommatecken, om alternativet parameter request list tillhandahålls av klienten.
DNSMASQ_MUD_URL URL:en för tillverkarens användningsbeskrivning om den tillhandahålls av klienten. (Se RFC8520 för mer information.)
Endast för IPv4:
DNSMASQ_CLIENT_ID om värden tillhandahöll ett klient-id.
DNSMASQ_CIRCUIT_ID, DNSMASQ_SUBSCRIBER_ID, DNSMASQ_REMOTE_ID om en DHCP-reläagent har lagt till något av dessa alternativ.
Om klienten tillhandahåller leverantörsklass, DNSMASQ_VENDOR_CLASS.
Endast för IPv6:
Om klienten tillhandahåller leverantörsklass, DNSMASQ_VENDOR_CLASS_ID, som innehåller IANA-företags-id för klassen, och DNSMASQ_VENDOR_CLASS0..DNSMASQ_VENDOR_CLASSn för data.
DNSMASQ_SERVER_DUID som innehåller serverns DUID: detta är detsamma för varje anrop till skriptet.
DNSMASQ_IAID som innehåller IAID för leasingavtalet. Om leasingavtalet är en tillfällig tilldelning, prefixeras detta med ’T’.
DNSMASQ_MAC innehåller klientens MAC-adress, om den är känd.
Observera att de angivna uppgifterna om värdnamn, leverantörsklass och användarklass endast anges för ”add”-åtgärder eller ”old”-åtgärder när en värd återupptar en befintlig leasing, eftersom dessa uppgifter inte finns i dnsmasq:s leasingdatabas
Alla filbeskrivare är stängda utom stdin, som är öppen för /dev/null, och stdout och stderr som fångar upp utdata för loggning av dnsmasq. (I felsökningsläge lämnas stdio-, stdout- och stderr-filerna som de ärvts från den som anropade dnsmasq).
Skriptet anropas inte samtidigt: högst en instans av skriptet körs åt gången (dnsmasq väntar på att en instans av skriptet ska avslutas innan nästa körs). Ändringar i leasingdatabasen som kräver att skriptet anropas köas i väntan på att en körande instans ska avslutas. Om denna köning tillåter att flera tillståndsändringar sker för en enda lease innan skriptet kan köras, kasseras tidigare tillstånd och det aktuella tillståndet för den leasen återspeglas när skriptet slutligen körs.
Vid start av dnsmasq kommer skriptet att anropas för alla befintliga leasingavtal när de läses från leasingfilen. Utgångna leasingavtal kommer att anropas med ”del” och andra med ’old’. När dnsmasq tar emot en HUP-signal kommer skriptet att anropas för befintliga leasingavtal med en ”old”-händelse.
Det finns ytterligare fem åtgärder som kan visas som det första argumentet till skriptet: ”init”, ”arp-add”, ”arp-del”, ”relay-snoop” och ’tftp’. Fler kan läggas till i framtiden, så skript bör skrivas så att de ignorerar okända åtgärder. ”init” beskrivs nedan i --leasefile-ro
Åtgärden ”tftp” aktiveras när en TFTP-filöverföring slutförs: argumenten är filstorleken i byte, adressen till vilken filen skickades och filens fullständiga sökväg.
Åtgärden ”relay-snoop” aktiveras när dnsmasq är konfigurerat som en DHCP relä för DHCPv6 och det vidarebefordrar en prefx-delegering till en klient. Argumenten är namnet på gränssnittet där klienten är ansluten, dess (lokal) adress på det gränssnittet och det delegerade prefixet. Denna information är tillräcklig för att installera rutter till det delegerade prefixet för en router. Se --dhcp-relay för mer information om konfigurering av DHCP-relä.
Åtgärderna ”arp-add” och ”arp-del” anropas endast om de är aktiverade med --script-arp De förses med en MAC-adress och IP-adress som argument. ”arp-add” indikerar att en ny post har kommit in i ARP- eller grannbordet, och ”arp-del” indikerar att samma post har raderats.
Funktionen lease tar emot den information som beskrivs i --dhcp-script. Den får två argument, först åtgärden, som är en sträng som innehåller ”add”, ’old’ eller ”del”, och sedan en tabell med taggvärde par. Taggarna motsvarar mestadels de miljövariabler som beskrivs ovan, till exempel innehåller taggen ”domain” samma data som miljövariabeln DNSMASQ_DOMAIN. Det finns några extra taggar som innehåller data som anges som argument till --dhcp-script.
Dessa är mac_address, ip_address och hostname för IPv4, samt client_duid, ip_address och hostname för IPv6.
Funktionen tftp anropas på samma sätt som funktionen lease, och tabellen innehåller taggarna destination_address, file_name och file_size.
Funktionerna arp och arp-old anropas endast när de är aktiverade med --script-arp och har en tabell som innehåller taggarna mac_address och client_address.
Det är tillåtet att lägga till mer än ett alias med mer än ett --bridge-interface-alternativ eftersom --bridge-interface=int1,alias1,alias2 är exakt likvärdigt med --bridge-interface=int1,alias1 --bridge-interface=int1,alias2
Det första argumentet är antingen namnet på ett gränssnitt eller en adress som är konfigurerad på ett lokalt gränssnitt, och det andra argumentet är en adress som definierar ett annat undernät där adresser kan tilldelas.
För att vara användbart måste det finnas ett lämpligt dhcp-intervall som tillåter adressallokering på detta undernät och detta dhcp-intervall MÅSTE inkludera nätmasken.
Användning av shared-network kräver också extra hänsyn till routning. Dnsmasq har inte den vanliga informationen som den använder för att bestämma standardrutten, så standardrutealternativet (eller annan routning) MÅSTE konfigureras manuellt. Klienten måste ha en rutt till servern: om tvåadressformen av shared-network används måste denna vara till den första angivna adressen. Om gränssnitts-,adress , måste det finnas en rutt till alla adresser som är konfigurerade på gränssnittet.
Den tvåadressform av shared-network kan också användas med en DHCP-relä: den första adressen är reläets adress och den andra anger, som tidigare, ett extra subnät från vilket adresser kan tilldelas.
Adressintervallet kan ha formen <ip-adress>,<ip-adress> eller <ip-adress>/<nätmask> eller bara en enda <ip-adress>. Se --dhcp-fqdn som kan ändra beteendet hos dnsmasq med domäner.
Om adressintervallet anges som ip-adress/nätverksstorlek, kan en ytterligare flagga ”local” anges, vilket har effekten att --local-deklarationer läggs till för framåt- och bakåt-DNS-frågor. T.ex. --domain=thekelleys.org.uk,192.168.0.0/24,local är identiskt med --domain=thekelleys.org.uk,192.168.0.0/24 --local=/thekelleys.org.uk/ - -local=/0.168.192.in-addr.arpa/
Adressintervallet kan också anges som ett nätverksgränssnittsnamn, i vilket fall alla subnät som för närvarande är tilldelade gränssnittet används för att matcha adressen. Detta gör det möjligt att ge värdar på olika fysiska subnät olika domäner på ett sätt som uppdateras automatiskt när gränssnittsadresserna ändras.
Gränssnittsfältet kan innehålla ett jokertecken.
Parametern mtu: kan vara ett godtyckligt gränssnittsnamn, i vilket fall MTU-värdet för det gränssnittet används. Detta är användbart för (t.ex.) att annonsera MTU för ett WAN-gränssnitt på andra gränssnitt i en router.
Om listan över gränssnitt anges, definierar den vilka gränssnitt som tar emot TFTP-tjänsten.
med /etc/dnsmasq-uncompress-ads innehållande
set -e
zcat ${1} | sed -e ”s:^:address=/:” -e ”s:$:/:”
exit 0
och /share/ads-domains.gz som innehåller en komprimerad lista över annonsserverdomäner sparar diskutrymme med stora annonsserverblocklistor.
Om detta alternativ inte är inställt är
cache-statistiken också tillgänglig i DNS som svar
på frågor av klass CHAOS och typ TXT i
domänbindning. Domännamnen är cachesize.bind,
insertions.bind, evictions.bind, misses.bind, hits.bind, auth.bind och
servers.bind om de inte inaktiverats vid kompilering. Ett exempel
på ett kommando för att fråga detta, med
hjälp av verktyget dig,
skulle vara
dig +short chaos txt cachesize.bind
Vid start läser dnsmasq /etc/dnsmasq.conf, om den
finns. (På FreeBSD är filen
/usr/local/etc/dnsmasq.conf)
(men se --conf-file och --conf-dir alternativen.) Formatet
för denna fil består av ett alternativ per rad, precis som de
långa alternativen som beskrivs i avsnittet ALTERNATIV, men utan
inledande ”--”. Rader som börjar med # är
kommentarer och ignoreras. För alternativ som endast kan anges en
gång åsidosätter konfigurationsfilen kommandoraden.
Citat är tillåtna i en konfigurationsfil: mellan "-citat
tas den speciella betydelsen av ,:. och # bort och följande
escape-tecken är tillåtna: \ \" \t \e \b
\r och \n. De senare motsvarar tabb, escape, backspace, retur och ny
rad.
När den tar emot ett SIGHUP, dnsmasq rensar sin cache och laddar sedan om /etc/hosts och /etc/ethers och alla filer som anges av --dhcp-hostsfile, --dhcp-hostsdir, --dhcp-optsfile, --dhcp-optsdir, --addn-hosts eller --hostsdir. Skriptet för ändring av DHCP-leasing kallas för alla befintliga DHCP-leasingavtal. Om --no-poll är inställt läser SIGHUP också om /etc/resolv.conf. SIGHUP läser INTE om konfigurationsfilen.
När det tar emot ett SIGUSR1, dnsmasq skriver statistik till systemloggen. Den skriver cacheminnets storlek, antalet namn som har behövt tas bort från cacheminnet innan de löpt ut för att göra plats för nya namn och det totala antalet namn som har lagts in i cacheminnet. Antalet cache-träffar och missar samt antalet auktoritativa frågor som besvarats anges också. För varje uppströms server anges antalet skickade frågor och antalet som resulterade i ett fel. Det ger också information om antalet förgreningar för TCP-anslutningar. I --no-daemon -läge eller när fullständig loggning är aktiverad (--log-queries) görs en fullständig dumpning av innehållet i cachen.
När den tar emot SIGUSR2 och loggar direkt till en fil (se --log-facility ) dnsmasq stänger och öppnar loggfilen igen. Observera att under denna operation kommer dnsmasq inte att köras som root. När den först skapar loggfilen ändrar dnsmasq ägarskapet för filen till den icke-root-användare som den kommer att köras som. Logrotate bör konfigureras för att skapa en ny loggfil med ägarskapet som matchar det befintliga innan SIGUSR2 skickas. Om TCP DNS-förfrågningar pågår kommer den gamla loggfilen att förbli öppen i barnprocesser som hanterar TCP-förfrågningar och kan fortsätta att skrivas. Det finns en gräns på 150 sekunder, efter vilken alla befintliga TCP -processer ha löpt ut: av denna anledning är det inte klokt att konfigurera loggfilskomprimering för loggfiler som just har roterats. Med logrotate är de nödvändiga alternativen create och delaycompress.
Dnsmasq är en DNS-frågevidarebefordrare: den kan inte rekursivt svara på godtyckliga frågor som börjar från rotservrarna, men vidarebefordrar sådana frågor till en fullständigt rekursiv uppströms DNS-server som vanligtvis tillhandahålls av en internetleverantör. Som standard läser dnsmasq /etc/resolv.conf för att upptäcka IP-adresserna för de uppströmsnamnsservrar som den ska använda, eftersom informationen vanligtvis lagras där. Om inte --no-poll används, dnsmasq kontrollerar ändringstidpunkten för /etc/resolv.conf (eller motsvarande om --resolv-file används) och läser den igen om den ändras. Detta gör det möjligt att ställa in DNS-servrarna dynamiskt med PPP eller DHCP, eftersom båda protokollen tillhandahåller informationen. Avsaknaden av /etc/resolv.conf är inte ett fel eftersom den kanske inte har skapats innan en PPP-anslutning finns. Dnsmasq fortsätter helt enkelt att kontrollera om /etc/resolv.conf skapas vid någon tidpunkt. Dnsmasq kan instrueras att analysera mer än en resolv.conf -fil. Detta är användbart på en bärbar dator, där både PPP och DHCP kan användas: dnsmasq kan ställas in för att avfråga både /etc/ppp/resolv.conf och /etc/dhcpc/resolv.conf och kommer att använda innehållet i den som ändrats senast, vilket ger automatisk växling mellan DNS-servrar.
Uppströms servrar kan också anges på kommandoraden eller i konfigurationsfilen. Dessa serverspecifikationer tar valfritt ett domännamn som talar om för dnsmasq att endast använda den servern för att hitta namn i den specifika domänen.
För att konfigurera dnsmasq så att den fungerar som cache för den värd där den körs, lägg till ”nameserver 127.0.0.1” i /etc/resolv.conf för att tvinga lokala processer att skicka förfrågningar till dnsmasq. Ange sedan antingen uppströmservrarna direkt till dnsmasq med hjälp av --server -alternativen eller lägg in deras adresser i en annan fil, till exempel /etc/resolv.dnsmasq och kör dnsmasq med --resolv-file /etc/resolv.dnsmasq -alternativet. Den andra tekniken möjliggör dynamisk uppdatering av serveradresserna med PPP eller DHCP.
Adresser i /etc/hosts kommer att ”skugga” olika adresser för samma namn i uppströms-DNS, så ”mycompany.com 1.2.3.4” i /etc/hosts säkerställer att frågor om ”mycompany.com” alltid returnerar 1.2.3.4 även om frågor i uppströms DNS annars skulle returnera en annan adress. Det finns ett undantag från detta: om uppströms DNS innehåller ett CNAME som pekar på ett skuggat namn, kommer sökning av CNAME via dnsmasq att resultera i den oskuggade adressen som är associerad med målet för CNAME. För att komma runt detta, lägg till CNAME till /etc/hosts så att CNAME också skuggas.
Taggsystemet fungerar enligt följande: dnsmasq taggar varje DHCP-förfrågan med taggar från tillämpliga konfigurationsrader som innehåller set:<tag>, dvs.
set:<tag> från --dhcp-range som används för att tilldela adressen;
set:<tag> från alla matchande --dhcp-host (plus taggen known eller known-othernet).
BOOTP-förfrågningar taggas med bootp. Varje förfrågan taggas också med namnet på det gränssnitt som förfrågan anlände till.
Varje konfigurationsrad som innehåller en eller flera tag:<tag>-konstruktioner gäller när alla dess taggar finns i begäran. Det vill säga:
Konfigurationstagg:A gäller för en begäran som är märkt med A.
Konfigurationstagg:B gäller för en begäran som är märkt med B.
Konfigurationstagg:A+B gäller inte för en begäran som är märkt med A.
Konfigurationstagg:A+B gäller inte för en begäran som är märkt med B.
Konfigurationstaggarna:A+B, tagg:A, tagg:B gäller för en begäran som är märkt med A+B.
set:<tag>-konstruktioner i --dhcp-range- och --dhcp-host-taggförfrågningar.
Använd tag:<tag>s i --dhcp-options för att matcha set:<tag> och tillämpa konfigurationer.
En --dhcp-option med tag:<tag> föredras framför en otaggad --dhcp-option, förutsatt att all dess taggar matchar någonstans i uppsättningen som samlats ovan.
Taggprefixet ’!’ betyder ’inte’. --dhcp-option=tag:!purple,3,1.2.3.4 skickar alternativet när begäran inte är taggad med purple. (Skalets metatecken ’!’ måste undvikas på kommandoraden men inte i en konfigurationsfil).
När man väljer --dhcp-options är en --dhcp-range-tagg underordnad andra taggar, för att göra det enkelt att åsidosätta alternativ för enskilda värdar, så:
--dhcp-range=set:interface1,......
--dhcp-host=set:myhost,.....
--dhcp-option=tag:interface1,option:nis-domain,”domain1”
--dhcp-option=tag:myhost,option:nis-domain,”domain2”
ställer in NIS-domänen till domain1 för värdar i intervallet, men till domain2 för en viss värd som kan eller inte kan falla inom intervallet.
Observera att för --dhcp-range är både tag:<tag> och
set:<tag> möjliga, för att både välja intervallet som används baserat på (t.ex.) --dhcp-host och för att påverka de alternativ som skickas, baserat på det valda intervallet.
Taggsystemet har utvecklats från ett tidigare, mer begränsat system. För bakåtkompatibilitet kan ”net:” användas istället för ”tag:” och ”set:” kan uteslutas. (Förutom i --dhcp-host, där ”net:” kan användas istället för ”set:”. ) Av samma anledning kan ’#’ användas istället för ’!’ för att ange NOT.
DHCP-servern i dnsmasq fungerar också som en BOOTP-server,
förutsatt att MAC-adressen och IP-adressen för klienterna
anges, antingen med hjälp av --dhcp-host konfigurationer eller
i /etc/ethers,
och ett --dhcp-range finns för att aktivera DHCP-servern
på ett visst nätverk. (Inställningen
--bootp-dynamic eliminerar behovet av statiska adressmappningar.)
Parametern filnamn i en BOOTP-begäran används som en tagg,
liksom taggen bootp, vilket möjliggör viss kontroll
över de alternativ som returneras till olika klasser av
värdar.
Att konfigurera dnsmasq för att fungera som en auktoritativ DNS-server är komplicerat eftersom det innebär konfiguration av externa DNS-servrar för att tillhandahålla delegering. Vi kommer att gå igenom tre scenarier med ökande komplexitet. Förutsättningar för alla dessa scenarier är en globalt tillgänglig IP-adress, en A- eller AAAA-post som pekar på den adressen och en extern DNS-server som kan delegera zonen i fråga. I den första delen av denna förklaring kallar vi A- (eller AAAA-)posten för den globalt tillgängliga adressen server.example.com och zonen för vilken dnsmasq är auktoritativ vår.zone.com.
Den enklaste konfigurationen består av två rader i dnsmasq-konfigurationen, ungefär så här
--auth-server=server.example.com,eth0 --auth-zone=our.zone.com,1.2.3.0/24
och två poster i den externa DNS
server.example.com A 192.0.43.10 our.zone.com NS server.example.com
eth0 är det externa nätverksgränssnittet som dnsmasq lyssnar på och har (globalt tillgänglig) adress 192.0.43.10.
Observera att den externa IP-adressen mycket väl kan vara dynamisk (dvs. tilldelad av en ISP via DHCP eller PPP). Om så är fallet måste A-posten länkas till denna dynamiska tilldelning av ett av de vanliga dynamiska DNS-systemen.
En mer komplex, men praktiskt användbar konfiguration har adress posten för den globalt tillgängliga IP-adressen som finns i den auktoritativa zonen som dnsmasq betjänar, vanligtvis i roten. Nu har vi
--auth-server=our.zone.com,eth0 --auth-zone=our.zone.com,1.2.3.0/24
our.zone.com A 1.2.3.4 our.zone.com NS our.zone.com
A-posten för our.zone.com har nu blivit en limpost, den
löser hönan-och-ägget-problemet med att hitta
IP-adressen till namnservern för our.zone.com när A-posten
finns inom den zonen.
Observera att detta är den enda funktionen för denna post:
eftersom dnsmasq nu är auktoritativ från our.zone.com
måste den också tillhandahålla denna post. Om den
externa adressen är statisk kan detta göras med en
/etc/hosts -post eller --host-record.
--auth-server=our.zone.com,eth0 --host-record=our.zone.com,1.2.3.4 --auth-zone=our.zone.com,1.2.3.0/24
Om den externa adressen är dynamisk måste adressen som är associerad med our.zone.com härledas från adressen för det relevanta gränssnittet. Detta görs med hjälp av --interface-name Något i stil med:
--auth-server=our.zone.com,eth0 --interface-name=our.zone.com,eth0 --auth-zone=our.zone.com,1.2.3.0/24,eth0
(Argumentet ”eth0” i --auth-zone lägger till det subnät som innehåller eth0:s dynamiska adress till zonen, så att --interface-name returnerar adressen i externa frågor.)
Vår slutliga konfiguration bygger på ovanstående, men lägger också till en sekundär DNS-server. Detta är en annan DNS-server som lär sig DNS-data för zonen genom att göra zonöverföringar och fungerar som en backup om den primära servern blir otillgänglig. Konfigurationen av den sekundära servern ligger utanför ramen för denna man-sida, men den extra konfigurationen av dnsmasq är enkel:
--auth-sec-servers=secondary.myisp.com
och
our.zone.com NS secondary.myisp.com
Genom att lägga till auth-sec-servers aktiveras zonöverföring i dnsmasq, så att sekundärservern kan samla in DNS-data. Om du vill begränsa dessa data till vissa värdar kan du använda
--auth-peer=<IP-adress för sekundärservern>
Dnsmasq fungerar som en auktoritativ server för in-addr.arpa- och ip6.arpa-domäner som är associerade med de subnät som anges i --auth-zone -deklarationer, så omvända (adress till namn) uppslagningar kan enkelt konfigureras med en lämplig NS-post, till exempel i detta exempel, där vi tillåter 1.2.3.0/24-adresser.
3.2.1.in-addr.arpa NS our.zone.com
Observera att omvända zoner (in-addr.arpa och ip6.arpa) för närvarande inte är tillgängliga i zonöverföringar, så det är ingen mening med att ordna sekundära servrar för omvända sökningar.
När dnsmasq är konfigurerat för att fungera som en auktoritativ server används följande data för att fylla den auktoritativa zonen.
--mx-host, --srv-host, --dns-rr, --txt-record, --naptr-record, --caa-record, så länge postnamnen finns i den auktoritativa domänen.
--synth-domain så länge domänen finns i den auktoritativa zonen och, för omvända (PTR) frågor, adressen finns i relevant subnät.
--cname så länge postnamnet finns i den auktoritativa domänen. Om målet för CNAME är okvalificerat, kvalificeras det med det auktoritativa zonnamnet. CNAME som används på detta sätt (endast) kan vara jokertecken, som i
--cname=*.example.com,default.example.com
IPv4- och IPv6-adresser från /etc/hosts (och
--addn-hosts)
och --host-record och --interface-name och
---dynamic-host förutsatt att adressen faller inom ett av de
subnät som anges i --auth-zone.
Adresser för DHCP-leasingavtal, förutsatt att adressen faller inom ett av de undernät som anges i --auth-zone. (Om konstruerade DHCP-intervall används, som beror på den adress som dynamiskt tilldelas ett gränssnitt, bör formen --auth-zone som definierar undernät efter ett gränssnitts dynamiska adress användas för att säkerställa att detta villkor uppfylls.)
I standardläget, där en DHCP-lease har ett
okvalificerat namn och eventuellt ett kvalificerat namn som konstruerats med
--domain,
konstrueras namnet i den auktoritativa zonen från det okvalificerade
namnet och zonens domän. Detta kan vara samma som det som anges av
--domain Om --dhcp-fqdn är inställt,
används de fullständigt kvalificerade namnen som är
associerade med DHCP-leasingavtalen och måste matcha zonens
domän.
0 - Dnsmasq har framgångsrikt förgrenats till bakgrunden eller avslutats normalt om bakgrundskörning inte är aktiverad.
1 - Ett problem med konfigurationen upptäcktes.
2 - Ett problem med nätverksåtkomst uppstod (adress i bruk, försök att använda privilegierade portar utan tillstånd).
3 - Ett problem uppstod med en filsystemoperation (saknad fil/katalog, behörigheter).
4 - Fel vid minnesallokering.
5 - Annat diverse problem.
11 eller högre - en returkod som inte är noll mottogs från lease-script-processen ”init”-anrop eller en --conf-script -fil. Avslutningskoden från dnsmasq är -skriptets avslutningskod med 10 tillagt.
Standardvärdena för resursbegränsningar i dnsmasq är i allmänhet konservativa och lämpliga för inbäddade routertypsenheter med långsamma processorer och begränsat minne. På mer kapabel hårdvara är det möjligt att öka begränsningarna och hantera många fler klienter. Följande gäller för dnsmasq-2.37: tidigare versioner skalade inte lika bra.
Dnsmasq kan hantera DNS och DHCP för minst tusen klienter. DHCP-leasingtiderna bör inte vara för korta (mindre än en timme). Värdet för --dns-forward-max kan ökas: börja med ett värde som motsvarar antalet klienter och öka det om DNS verkar långsamt. Observera att DNS prestanda också beror på prestandan hos uppströms namnservrar. Storleken på DNS-cachen kan ökas: den hårda gränsen är 10000 namn och standardvärdet (150) är mycket lågt. Om du skickar SIGUSR1 till dnsmasq loggar den information som är användbar för att justera cacheminnets storlek. Se avsnittet NOTES för mer information.
Den inbyggda TFTP-servern kan hantera många samtidiga filöverföringar : den absoluta gränsen är relaterad till antalet filhanterare som tillåts för en process och förmågan hos systemanropet select() att hantera ett stort antal filhanterare. Om gränsen är för hög med
--tftp-max kommer den att skalas ned och den faktiska gränsen loggas vid start. Observera att fler överföringar är möjliga när samma fil skickas än när varje överföring skickar en annan fil.
Det är möjligt att använda dnsmasq för att blockera webbannonsering genom att använda en lista över kända bannerannonsservrar, som alla löser till 127.0.0.1 eller 0.0.0.0, i /etc/hosts eller en ytterligare hosts-fil. Listan kan vara mycket lång, dnsmasq har testats framgångsrikt med en miljon namn. En fil av den storleken kräver en 1 GHz-processor och cirka 60 MB RAM.
Dnsmasq kan kompileras för att stödja internationalisering. För att göra detta bör målen ”all-i18n” och ”install-i18n” användas istället för standardmålen ’all’ och ”install”. När internationalisering är kompilerad kommer dnsmasq att producera loggmeddelanden på det lokala språket och stödja internationaliserade domännamn (IDN). Domän namn i /etc/hosts, /etc/ethers och /etc/dnsmasq.conf som innehåller icke-ASCII-tecken kommer att översättas till DNS-intern punycode -representation. Observera att dnsmasq bestämmer både språket för meddelanden och den antagna teckensatsen för konfigurationsfiler från miljövariabeln LANG. Detta bör ställas in till systemets standardvärde av det skript som ansvarar för att starta dnsmasq. När du redigerar konfigurationsfilerna, var noga med att göra det med endast systemets standardlokalisering och inte en användarspecifik, eftersom dnsmasq inte har något direkt sätt att bestämma vilken teckenuppsättning som används och måste anta att det är systemets standard.
/etc/dnsmasq.conf
/usr/local/etc/dnsmasq.conf
/etc/resolv.conf /var/run/dnsmasq/resolv.conf /etc/ppp/resolv.conf /etc/dhcpc/resolv.conf
/etc/hosts
/etc/ethers
/var/lib/misc/dnsmasq.leases
/var/db/dnsmasq.leases
/var/run/dnsmasq.pid
Denna manual sida är skriven av Simon Kelley <simon@thekelleys.org.uk>.