Ticket #363 (closed: fixed)

Opened 10 years ago

Last modified 9 years ago

Izboljšati prikazovanje sporočila, ko točka izgubi povezavo

Reported by: mitar Owned by: kostko
Priority: major Milestone: 2.0b
Component: firmware Version:
Keywords: Cc:
Related nodes: Realization state:
Blocking: 13, 365 Effort: normal
Blocked by: Security sensitive: no

Description

Izboljšati prikazovanje sporočila, ko točka izgubi povezavo, tako da se prikaže sporočilo takrat, ko uporabnik poskuša dostopati do IPja, do katerega točka nima route. Torej trenutno je problem, da onemogočimo dostopanje do točk omrežja, čeprav bi mogoče bile dostopne. Na takšen način je omrežje manj avtonomno, kot bi lahko bilo.

Torej če bi točka imela dostop do DNS strežnikov, potem bi še naprej spraševala njega za DNS resolve (zato da recimo deluje resolving za IPje znotraj omrežja). V kolikor dostop do DNS strežnika ni, ampak uporabnik dostopa direktno do IPja, do katerega še vedno obstaja routa, bi to moralo še vedno delovati.

(To bi bilo seveda tako posplošeno na vsa peerana omrežja.)

Change History

comment:1 Changed 10 years ago by kostko

To je že sedaj preprosto rešljivo tako da se ignorira dostop do 10.14.0.0/16, edino za DNS je malo težje izvedljivo.

comment:2 follow-ups: ↓ 4 ↓ 5 Changed 10 years ago by mitar

  • Blocking set to 13
  • Milestone changed from 3.0b to 2.0b

No, saj se lahko razbije tista skripta v več delov. Torej ko pade povezava do vseh DNS strežnikov, action spremeni dnsmasq konfiguracijo.

Sicer pa se lahko res naredi izjema, da iptables ne preusmerja na točko. V kolikor bo izpadel DNS, bo on preusmerjal na točko. Ampak še vedno pa boš imel možnost normalnega dostopanja do IPjev znotraj omrežja, če boš uporabljal direktno IP, in ti bo takrat ICMP javil, če je IP dostopen ali ne.

Mogoče bi bilo res boljše, da se to naredi že pred masovnim deploymentom. Bom dal v 2.0b.

Aja, samo malo. A ti DHCP pustiš teči ali ga izklopiš in poženeš le DNS?

comment:3 Changed 10 years ago by mitar

  • Blocking changed from 13 to 13, 365

comment:4 in reply to: ↑ 2 Changed 10 years ago by kostko

Replying to mitar:

Aja, samo malo. A ti DHCP pustiš teči ali ga izklopiš in poženeš le DNS?

dnsmasq vsebuje oboje, torej teče oboje.

comment:5 in reply to: ↑ 2 ; follow-up: ↓ 6 Changed 10 years ago by kostko

Replying to mitar:

No, saj se lahko razbije tista skripta v več delov. Torej ko pade povezava do vseh DNS strežnikov, action spremeni dnsmasq konfiguracijo.

Ko pade povezava do vseh DNS strežnikov ? Kdo bo pa to sprožil ? Potem rabiš še voditi neke sezname kaj je up in kaj je down ali imaš kakšno boljšo idejo ? Prav tako DNS redirect brez nullhttpdja je popolnoma neuporaben.

comment:6 in reply to: ↑ 5 ; follow-up: ↓ 9 Changed 10 years ago by mitar

Replying to kostko:

Ko pade povezava do vseh DNS strežnikov ? Kdo bo pa to sprožil ? Potem rabiš še voditi neke sezname kaj je up in kaj je down ali imaš kakšno boljšo idejo ?

Prav tako DNS redirect brez nullhttpdja je popolnoma neuporaben.

Seveda, nullhttpd bi se pognal prvi (lahko pa bi itak tekel ves čas celo).

Torej imamo te možnosti:

  • DNS strežniki dosegljivi, default routa obstaja: vse normalno nastavljeno
  • DNS strežniki dosegljivi, default routa ne obstaja: DNS dela normalno, iptables preusmerja promet navzven na točko samo
  • DNS strežniki nedosegljivi, default routa obstaja (verjetno malo redek primer, ampak vseeno): DNS preusmerja na točko, iptables ne preusmerja prometa na točko samo
  • DNS strežniki nedosegljivi, default routa ne obstaja: DNS preusmerja na točko, iptables preusmerja na točko

Torej kot se vidi, so to dve ločeni stvari. Eno je delovanje DNS strežnikov, drugo je dostop navzven (oziroma po #365 v splošnem do peeranih omrežij). Tako bi to jaz tudi ločil. Za sedaj bi pač torej gledali default routo in na podlagi nje vklapljali ali izklapljali iptables. Pri DNS strežnikih pa bi ob dodajanju in odstranjevanju povezave gledali (da, delali seznam), če obstaja vsaj eden na voljo. V kolikor ne, se bi vklopil drugi način delovanja DNS strežnika.

Želel bi si tudi, da se takoj ob vklopu zazna, da OLSR še ni recimo vzpostavljen in da točka prikazuje to sporočilo. Ker sedaj je tudi mali problem, da ko vklopiš točko, DNS pogosto ne dela in potem ne več točno, če točka že teče in se "zbuja" ali je kaj drugega narobe. V tem primeru pa bi ti prikazalo pač to naše sporočilo. In potem ko bi OLSR vzpostavil stvari, bi te vrglo na nodogsplash.

comment:7 Changed 10 years ago by mitar

Torej pri zadnjih treh točkah mora biti pognan nullhttpd in ker to kvari to "razdelitev" prikazovanja sporočila bi mogoče imeli le-tega pognanega ves čas? Saj spomina ne porablja toliko, ker uporablja isto knjižnico kot nodogsplash. (Vsaj ne bi ga smel.) Torej je le en dodaten proces. Prav tako se mi zdi, da bi lahko bil dostop do njega omejena na le lokalen dostop (tako da se ne bi videlo navzven, da proces teče)? Torej če paket pride do točke in ga ta preusmeri na nullhttpd je to le lokalen dostop potem, kajne?

comment:8 Changed 10 years ago by kostko

  • Status changed from new to closed
  • Resolution set to fixed

Implementirano z revizijo [860]. Rebuild bo skupaj s #13.

comment:9 in reply to: ↑ 6 Changed 10 years ago by mitar

Replying to mitar:

DNS strežniki nedosegljivi, default routa obstaja (verjetno malo redek primer, ampak vseeno): DNS preusmerja na točko, iptables ne preusmerja prometa na točko samo

Kaže se, da to sploh ni tako redek primer zaradi #426. In zato se je pokazala tudi velika napaka pri tem. Namreč ko se za DNS zazna, da ne deluje (čeprav je sicer povezava v redu), začne DNS preusmerjati na točko, iptables pa ne naredi nič. Posledica je, da je uporabnik preusmerjen na točko, na navaden port 80 na točki, ki pa trenutno preusmerja na bazo točk. Skratka, uporabnik dobi občutek, da je brez razloga kar tako preusmerjen na našo stran, katerokoli stran svojo stran odpre in preprosto ne more normalno uporabljati omrežja. In to traja najmanj tako dolgo, dokler se naslednjič ne požene preverjanje DNSa. Zelo neprijetno.

Zato bi jaz naredil tako, da če so DNS strežniki nedosegljivi, ampak default povezava obstaja, se ne naredi nič. Torej takšno stanje pomeni ali napako pri nas (kar bo upamo da redko) ali začasno napako/izgubo paketka na povezavi pri merjenju, kar se bo prej ali slej samo popravilo in verjetno lahko uporabnik z večkratnim poskušanjem vseeno uspe dostopati do DNS strežnika. V kolikor pa je le prvi znak izpada povezave, pa bo izpadla tudi default povezava in se bo potem vklopilo sporočilo.

comment:10 Changed 9 years ago by mitar

Mogoče še da opišem še eno izmed osnovnih motivacij za prikazovanje tega sporočila. Torej problem je, da če DNS ni dosegljiv, se niti pozdravna stran? ne odpre, saj ne uspe dobiti željenega IP naslova in zato brskalnik niti ne pošlje zahtevka, ki bi ga lahko točka prestregla.

Zato se mi je zdelo dobro, da DNS vedno deluje oziroma da kaj vrne, tudi če sicer ne deluje povezava do DNS strežnika. Samo problem je, da potem po pozdravni strani stvari ne delujejo dobro, če se preusmerja še naprej na točko. Mogoče bi lahko naredili tako, da če so DNS strežniki nedosegljivi (glede na test) in default routa obstaja, da se uporabi iptables mark Nodogsplasha za neprijavljene uporabnike, da se DNS requeste preusmeri na vzporeden lokalen DNS strežnik (na drugem portu), ki vedno vrača IP točke za vse requeste. Po prijavi pa tega več ne počne.

Ampak to se mi zdi, da dela sistem vedno bolj kompliciran in to ni dobro. Tako da mogoče pač pustimo DNS strežnike pri miru, kakor sem opisal zgoraj.

comment:11 Changed 9 years ago by mitar

  • Status changed from closed to reopened
  • Resolution fixed deleted

comment:12 Changed 9 years ago by mitar

OK, tu sem se zmotil. To ni povezano s #426, saj tisto testiranje delovanja DNSja je nepovezano s tem. Tukaj se gleda obstoj oziroma neobstoj rout do DNS strežnikov. Ampak v vsakem primeru je preusmerjanje DNS zahtevkov na točko v primeru nedostopnosti DNS strežnikov napačno delovanje, saj točka to obdela kot normalen zahtevek in to pomeni, da trenutno preusmeri na bazo točk. Prav tako to onemogoča uporabniku uporabo nekega drugega DNS strežnika, saj bi lahko njegov operacijski sistem zaznal, da se DNS strežnik ne odziva in šel povprašati katerega drugega, ki pa deluje.

comment:13 Changed 9 years ago by mitar

Še en primer tega problema z redirectom sem našel. Torej če povezava deluje toliko (kar verjetno pomeni, da default routa obstaja), da lahko delaš na točki, točka pa preklopi DNS, se zgodi kaj takšnega:

$ opkg install tcpdump
Installing tcpdump (3.9.8-2) to root...
Downloading http://bindist.wlan-lj.net/profiles/atheros/./tcpdump_3.9.8-2_mips.ipk
Connecting to bindist.wlan-lj.net (10.254.132.97:80)
wget: too many redirections

No, v splošnem se to ne bo dogajalo pogosto, tako da se ne bi s tem preveč obremenjeval. Le, da je dokumentirano.

comment:14 Changed 9 years ago by mitar

Hm, malo sem gledal loge na eni točki in recimo, medtem ko sta prišla dva dogodka:

Timestamp: 2010-01-26 14:34:30.899664
Event: DNS resolver has failed
Timestamp: 2010-01-26 14:45:50.733283
Event: DNS resolver restored

Se je v logu videlo tole:

Jan 26 14:20:40 hrvatskitrg-2 daemon.info dnsmasq[4234]: exiting on receipt of SIGTERM
Jan 26 14:20:40 hrvatskitrg-2 user.info : dnsmasq: failed to bind DHCP server socket: Address already in use
Jan 26 14:20:40 hrvatskitrg-2 daemon.crit dnsmasq[4408]: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:54 hrvatskitrg-2 daemon.crit dnsmasq[4408]: FAILED to start up
Jan 26 14:32:55 hrvatskitrg-2 daemon.info dnsmasq[4955]: started, version 2.46 cachesize 150
Jan 26 14:32:55 hrvatskitrg-2 daemon.info dnsmasq[4955]: compile time options: IPv6 GNU-getopt no-DBus no-I18N TFTP
Jan 26 14:32:55 hrvatskitrg-2 daemon.info dnsmasq[4955]: DHCP, IP range 10.254.132.98 -- 10.254.132.126, lease time 30m
Jan 26 14:32:55 hrvatskitrg-2 daemon.info dnsmasq[4955]: using nameserver 10.254.0.2#53
Jan 26 14:32:55 hrvatskitrg-2 daemon.info dnsmasq[4955]: using nameserver 10.254.0.1#53
Jan 26 14:32:55 hrvatskitrg-2 daemon.info dnsmasq[4955]: read /etc/hosts - 1 addresses
Jan 26 14:32:55 hrvatskitrg-2 user.info : dnsmasq: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:55 hrvatskitrg-2 daemon.crit dnsmasq[4962]: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:55 hrvatskitrg-2 daemon.crit dnsmasq[4962]: FAILED to start up
Jan 26 14:32:55 hrvatskitrg-2 daemon.info dnsmasq[4955]: exiting on receipt of SIGTERM
Jan 26 14:32:56 hrvatskitrg-2 user.info : killall: dnsmasq: no process killed
Jan 26 14:32:56 hrvatskitrg-2 user.info : killall: dnsmasq: no process killed
Jan 26 14:32:56 hrvatskitrg-2 user.info : dnsmasq: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:56 hrvatskitrg-2 daemon.crit dnsmasq[5004]: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:56 hrvatskitrg-2 daemon.crit dnsmasq[5004]: FAILED to start up
Jan 26 14:32:56 hrvatskitrg-2 user.info : dnsmasq: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:56 hrvatskitrg-2 daemon.crit dnsmasq[5007]: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:56 hrvatskitrg-2 daemon.info dnsmasq[5010]: started, version 2.46 cachesize 150
Jan 26 14:32:56 hrvatskitrg-2 daemon.info dnsmasq[5010]: compile time options: IPv6 GNU-getopt no-DBus no-I18N TFTP
Jan 26 14:32:56 hrvatskitrg-2 daemon.info dnsmasq[5010]: DHCP, IP range 10.254.132.98 -- 10.254.132.126, lease time 30m
Jan 26 14:32:56 hrvatskitrg-2 daemon.crit dnsmasq[5007]: FAILED to start up
Jan 26 14:32:56 hrvatskitrg-2 daemon.info dnsmasq[5010]: using nameserver 10.254.0.2#53
Jan 26 14:32:56 hrvatskitrg-2 daemon.info dnsmasq[5010]: using nameserver 10.254.0.1#53
Jan 26 14:32:56 hrvatskitrg-2 daemon.info dnsmasq[5010]: read /etc/hosts - 1 addresses
Jan 26 14:32:57 hrvatskitrg-2 daemon.crit dnsmasq[5015]: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:57 hrvatskitrg-2 user.info : dnsmasq: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:57 hrvatskitrg-2 daemon.crit dnsmasq[5015]: FAILED to start up
Jan 26 14:32:57 hrvatskitrg-2 daemon.crit dnsmasq[5017]: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:57 hrvatskitrg-2 user.info : dnsmasq: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:57 hrvatskitrg-2 daemon.crit dnsmasq[5017]: FAILED to start up
Jan 26 14:32:58 hrvatskitrg-2 daemon.crit dnsmasq[5019]: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:58 hrvatskitrg-2 user.info : dnsmasq: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:58 hrvatskitrg-2 daemon.crit dnsmasq[5019]: FAILED to start up
Jan 26 14:32:58 hrvatskitrg-2 daemon.crit dnsmasq[5021]: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:58 hrvatskitrg-2 user.info : dnsmasq: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:58 hrvatskitrg-2 daemon.crit dnsmasq[5021]: FAILED to start up
Jan 26 14:32:59 hrvatskitrg-2 user.info : dnsmasq: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:59 hrvatskitrg-2 daemon.crit dnsmasq[5023]: failed to bind DHCP server socket: Address already in use
Jan 26 14:32:59 hrvatskitrg-2 daemon.crit dnsmasq[5023]: FAILED to start up
Jan 26 14:33:00 hrvatskitrg-2 user.info : dnsmasq: failed to bind DHCP server socket: Address already in use
Jan 26 14:33:00 hrvatskitrg-2 daemon.crit dnsmasq[5025]: failed to bind DHCP server socket: Address already in use
Jan 26 14:33:00 hrvatskitrg-2 daemon.crit dnsmasq[5025]: FAILED to start up
Jan 26 14:33:01 hrvatskitrg-2 user.info : dnsmasq: failed to bind DHCP server socket: Address already in use
Jan 26 14:33:01 hrvatskitrg-2 daemon.crit dnsmasq[5027]: failed to bind DHCP server socket: Address already in use
Jan 26 14:33:01 hrvatskitrg-2 daemon.crit dnsmasq[5027]: FAILED to start up
Jan 26 14:33:01 hrvatskitrg-2 daemon.crit dnsmasq[5029]: failed to bind DHCP server socket: Address already in use
Jan 26 14:33:01 hrvatskitrg-2 user.info : dnsmasq: failed to bind DHCP server socket: Address already in use
Jan 26 14:33:01 hrvatskitrg-2 daemon.crit dnsmasq[5029]: FAILED to start up
Jan 26 14:38:57 hrvatskitrg-2 daemon.info dnsmasq[5010]: exiting on receipt of SIGTERM
Jan 26 14:38:57 hrvatskitrg-2 daemon.crit dnsmasq[5237]: failed to bind DHCP server socket: Address already in use
Jan 26 14:52:54 hrvatskitrg-2 daemon.crit dnsmasq[5237]: FAILED to start up
Jan 26 14:38:57 hrvatskitrg-2 user.info : dnsmasq: failed to bind DHCP server socket: Address already in use
Jan 26 14:52:55 hrvatskitrg-2 daemon.info dnsmasq[5654]: started, version 2.46 cachesize 150
Jan 26 14:52:55 hrvatskitrg-2 daemon.info dnsmasq[5654]: compile time options: IPv6 GNU-getopt no-DBus no-I18N TFTP
Jan 26 14:52:55 hrvatskitrg-2 daemon.info dnsmasq[5654]: DHCP, IP range 10.254.132.98 -- 10.254.132.126, lease time 30m
Jan 26 14:52:55 hrvatskitrg-2 daemon.info dnsmasq[5654]: using nameserver 10.254.0.2#53
Jan 26 14:52:55 hrvatskitrg-2 daemon.info dnsmasq[5654]: using nameserver 10.254.0.1#53
Jan 26 14:52:55 hrvatskitrg-2 daemon.info dnsmasq[5654]: read /etc/hosts - 1 addresses
Jan 26 14:52:56 hrvatskitrg-2 daemon.info dnsmasq[5654]: exiting on receipt of SIGTERM
Jan 26 14:52:56 hrvatskitrg-2 daemon.info dnsmasq[5673]: started, version 2.46 cachesize 150

Zanimiva se mi zdi tudi časovna inverzija dveh vrstic proti koncu.

comment:15 Changed 9 years ago by kostko

Ali lahko na kratko opišeš kaj naj bi se popravilo ? Torej če prav razumem bi sedaj ukinil olsr_dns_action in toggle DNS redirectiona dodal v olsr_gateway_action ? Da/ne ?

comment:16 follow-up: ↓ 17 Changed 9 years ago by mitar

Ne. olsr_dns_action bi naredil tako, da ko pade DNS nastavi le nek flag. In potem v olsr_gateway_action, ko pade gateway, pogleda, če je nastavljen še ta flag. Če je, potem nastavi še DNS. Če ni, potem nastavi le preumerjanje.

Enako pa tudi v olsr_dns_action, če se sproži in je preusmerjanje že nastavljeno, se mora nastaviti še DNS.

(Samo da preverim, preusmerjanje znotraj celotnega tega ticketta dela le za IPje zunaj našega omrežja, kajne?)

comment:17 in reply to: ↑ 16 Changed 9 years ago by kostko

Replying to mitar:

(Samo da preverim, preusmerjanje znotraj celotnega tega ticketta dela le za IPje zunaj našega omrežja, kajne?)

Tako je, to velja samo za vse kar ni 10.254.0.0/16.

comment:18 Changed 9 years ago by kostko

  • Status changed from reopened to needs_rebuild

Implementirano z revizijo [995].

comment:19 Changed 9 years ago by kostko

Delovanje je sedaj takšno:

Error: Failed to load processor graphviz
No macro or processor named 'graphviz' found

comment:20 Changed 9 years ago by kostko

  • Status changed from needs_rebuild to closed
  • Resolution set to fixed

Paketi in image builderji posodobljeni.

Note: See TracTickets for help on using tickets.