DNS neresolvuje po výpadku konektivity

Pavouk106

  • *****
  • 2 400
    • Zobrazit profil
    • Můj blog
    • E-mail
DNS neresolvuje po výpadku konektivity
« kdy: 17. 05. 2012, 14:39:48 »
Ahoj,

mám na svém domácím mini-serveru vlastní DNS, které běžně resolvuje moji doménu pro lidi zvenku i zevnitř. Tento server má pouze vnitřní IP a je schovaný za routerem (RB433), který zároveň funguje jako DHCP (i pro ten mini-server; mini-server nemá pevně nastavenou IP přímo ve své konfiguraci, ale od DHCP dostává vždy tu samou). Všechny potřebné porty (i pro další služby) jsou pochopitelně na routeru forwardované, vše běhá jak má.

Jednou takhle vytáhnu RB433 ze sítě (odpojím napájení, aby bylo jednoznačně jasno) a zapojím ho po XY hodinách zpět. Mini-server celou dobu mezitím jede. Po znovupřipojení RB433 už mi mini-server přestane resolvovat adresy a to jak pro vnější síť (internet), tak i vnitřní klienty (např. můj desktop).

Co se za tu dobu "výpadku" routeru mohlo s mini-server stát:
1. Vytikala mu IP adresa (mám nastaveno na hodinu, vytikala zcela jistě - neověřil jsem si, jestli v síti zůstalo zařízení s původní IP nebo ne)
2. Vytikáním adresy MOŽNÁ přešel na nějakou vyhrazenou (takové ty 169.nějaká.hatla.patla)
3. DNS dál naslouchalo pouze na původní adrese (192.168.1.1)

Po naskočení routeru a tím pádem DHCP a konektivity do internetu se mini-server chytí a je dostupný na své správné vnitřní IP. Zvenčí napíšu do prohlížeče svoji doménu a čekám a čekám a nic... Když napíšu IP, tak mi ale server odpoví. Z toho mi plyne, že IP má svou správnou, forward je v pohodě, konektivita taky, jen DNS se nechytlo.

Kdy jsem se připojil a server (SSH) přes IP adresu a otočil službu named, vše se rozjelo.

Netušíte, proč mi DNS taky nejelo samo (jako třeba Apache)? Jak se tomu do budoucna vyvarovat (pokd by se router třeba musel restartovat a zrovna v tu chvíli vytikala IP adresa)? Jde mi o řešení na úrovni DNS, ne o délku zápůjčky IP adresy nebo jiné podobné věci.

Těm kdo to dočetli: gratuluji, děkuji a pokuste se být tvůrčí ;-)
« Poslední změna: 18. 05. 2012, 11:41:42 od Petr Krčmář »


Re:DNS neresolvuje po výpadku DHCP/konektivity
« Odpověď #1 kdy: 17. 05. 2012, 14:53:39 »
Co se za tu dobu "výpadku" routeru mohlo s mini-server stát:
1. Vytikala mu IP adresa (mám nastaveno na hodinu, vytikala zcela jistě - neověřil jsem si, jestli v síti zůstalo zařízení s původní IP nebo ne)
2. Vytikáním adresy MOŽNÁ přešel na nějakou vyhrazenou (takové ty 169.nějaká.hatla.patla)
3. DNS dál naslouchalo pouze na původní adrese (192.168.1.1)
Nebylo by lepsi napsat, co se stalo, nez co se stat mohlo?

1. napsat, o jaky DNS server se jedna + vsechny relevantni veci (hlavne OS a verzi)
2. overit, jestli DNS server po vypadku bezi, nebo treba spadne
3. pokud bezi, jestli pred a po vypadku odpovida na dotazy pres lo (# host www.google.com 127.0.0.1)
4. vlozit sem vsechny relevantni logy, nebo alespon ty, co se tykaji DNS serveru

Strelba od boku: interfacu vyprsi IP, DNS server na ni zanevre a az dostane IP znovu, uz se na ni nebinduje. Nebo proste po vyprseni IP spadne (proc ne, taky reseni :)

Pavouk106

  • *****
  • 2 400
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:DNS neresolvuje po výpadku DHCP/konektivity
« Odpověď #2 kdy: 17. 05. 2012, 15:58:01 »
Samozřejmě by to bylo lepší :-) Ale ono jaksi k výpadku routeru došlo ve dvě v noci, v osm jsem ho nahodil a fofrem letěl makat, takže na studování nebyl čas :-)

Gentoo Linux, balíky aktuální tak ke dvěma týdnům zpět, DNS je BIND v jedné z nejnovějších verzí. Opět nesedím přímo u stroje a nemám ani možnost se k němu připojit... (mám tendence to řešit vždycky, když u toho nesedím :-D )

Body 2, 3 a 4 beru v potaz.
2. jsem si téměř jistý, že služba běžela.
3. Musím vyzkoušet, díky za tip
4. Logy možná nebudou potřeba (nejspíš bych v nich mohl vykoukat něco sám).

Střelba od boku mi právě připadá celkem logická - bind zanevře na vytikanou IP a od té doby si můžu trhnout nohou... Protože mám i IPv6, můžu si tohle otestovat (vypnu DHCP server, nechám vytikat IPv4 adresu a pak uvidíme, co DNS, když se zeptám přímo s parametrem -6 z jiného IPv6 stroje).

Potřeboval jsem nakopnout a to se stalo. Až to ověřím/vyzkouším, dám sem vědět.

(ta odpověď na avatar mě moc neuspokojila :-) )

Re:DNS neresolvuje po výpadku DHCP/konektivity
« Odpověď #3 kdy: 18. 05. 2012, 09:07:28 »
Je ten miniserver přímo zapojen do routeru? Pokud ano a máš nainstalovaný ifplug, tak ten má tendenci vypnout rozhraní, když je odpojen kabel. S tím se vypnou i všechny závislé služby. Když pak ten router zapneš, tak se nahodí rozhraní znovu a pustí DHCP klient, ovšem v té době router teprve bootuje, takže na něm DHCP server ještě neběží. Server si pak přiřadí APIPA adresu 169.254.* Tím se ale nevysvětluje, pokud ti funguje Apache a nefunguje DNS…

Leda že bys měl v konfigu BINDa pevně nastavenou adresu na které má poslouchat.

Re:DNS neresolvuje po výpadku DHCP/konektivity
« Odpověď #4 kdy: 18. 05. 2012, 09:33:05 »
Tím se ale nevysvětluje, pokud ti funguje Apache a nefunguje DNS… Leda že bys měl v konfigu BINDa pevně nastavenou adresu na které má poslouchat.
Může mít nastavené i rozhraní, na kterém bind poslouchá. U apache to nebývá tak častý, ten spíš bude poslouchat na všem, takže jakmile dostane rozhraní novou (stejnou) adresu, bind na ní (už) neposlouchá, ale apache jo.


Pavouk106

  • *****
  • 2 400
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:DNS neresolvuje po výpadku DHCP/konektivity
« Odpověď #5 kdy: 18. 05. 2012, 11:03:05 »
ifplug nepoužívám, rozhraní by mělo stále jet. Je to strčené do routeru přes switch (takže tím spíš).

V konfiguraci BINDu mám napsané všechny IP, na kterých naslouchat (včetně lokálních, OpenVPN i IPv6 i IPv6 lokálních). Mám je napevno. V tom vidím nejspíš problém.

Možná, že by nebylo od věci přehodit na naslouchání na interface, to by mohlo problém řešit.

Bohužel, experimentovat teď v nejbližší době nemohu, nejdřív v sobotu večer nebo v neděli.

Josef Liška

Re:DNS neresolvuje po výpadku konektivity
« Odpověď #6 kdy: 18. 05. 2012, 12:33:41 »
Ahoj,
je to celkem jasné, bind nebo jiný nameserver, který jede primárně přes udp totiž musí otevřít soket pro každé rozhraní zvlášť, aby byla odpověď zaslána
na správnou stranu. Kdyby poslouchal na 0.0.0.0:53 resp. na :::53, tak by kernel nevěděl, kam poslat odpověď.

Takže to, co se stalo bylo asi toto:
1) ztráta lease
2) proběhl v noci logrotate, tím došlo k reloadu bindu v době, kdy nebyla správná adresa, na kterou by bylo možné udělat bind()
3) obnova lease

Řešení v debianu by bylo dát reload do /etc/network/if-up.d/

S podobným problémem se lze setkat např. u ntpd.


Re:DNS neresolvuje po výpadku konektivity
« Odpověď #7 kdy: 18. 05. 2012, 14:04:55 »
Kdyby poslouchal na 0.0.0.0:53 resp. na :::53, tak by kernel nevěděl, kam poslat odpověď.
UDP snad nema zdrojovou adresu? Nebo proc by nemel vedet, kam ma poslat odpoved?

Takže to, co se stalo bylo asi toto:
1) ztráta lease
2) proběhl v noci logrotate, tím došlo k reloadu bindu v době, kdy nebyla správná adresa, na kterou by bylo možné udělat bind()
3) obnova lease
Stejne by to ale chtelo prozkoumat. Dhclient na FreeBSD napr. pokud nedostane odpoved od DHCP serveru, pouzije tu adresu, kterou dostal minule. Takze k tomuhle efektu by nedoslo.