Probléma:
ügyfél --> tűzfal --> loadbalancer --> célgép1 v. célgép2
Számosságot nem tudok mondani, de zavaró mértékben előfordul az, hogy az ügyfél gépéről jönnek a SYN csomagok, de nem megy rájuk vissza a célgép1 v. célgép2 -ről SYN-ACK csomag.
Mérések szerint a SYN csomagok eljutnak a célgépekig, tehát nem korábban vesznek el.
Az ügyfél próbálkozik, próbálkozik aztán egyszercsak a SYN-jére kap SYN-ACK -t és mindenki boldog.
Feltételezve, h a mi szerverünk nem ad vissza időben SYN-ACK-t (és feltételezve, h ez előfordulhat) és nekünk kell ezt megoldani vhogy, mivel érdemes próbálkozni?
Köszi!
- 1347 megtekintés
Hozzászólások
es a syn-ack az hol ve'sz el? a loadbalancernel is van valamifele nat, ott is lehet gond. nem ertek annyira ehhez, de kiprobalnam egy udp-alapu szolgaltatassal, hogy ott milyen gyakran vesznek el a csomagok.
- A hozzászóláshoz be kell jelentkezni
A LB és a célgépek között volt mérés.
Látszott a célgépek felé menő SYN, de nem látszott a visszajövő SYN-ACK.
- A hozzászóláshoz be kell jelentkezni
es vmifele belso halon es/vagy localhoston megy a dolog?
- A hozzászóláshoz be kell jelentkezni
internetről befelé jövő forgalomról van szó
- A hozzászóláshoz be kell jelentkezni
azt ertem, de a szolgaltatast azt tudja adni a celgep, ha localhost-rol vagy valami belso halos geprol kezdemenyezed? (sima netcat-tal is, akar, igy latatlanban, mmint a szolgaltatast nem mondtad hogy mi lenne)
- A hozzászóláshoz be kell jelentkezni
belülről is teszteljük és onnan is előfordul a hiba
- A hozzászóláshoz be kell jelentkezni
nem lehet, hogy egyik gep rosszul van configolva, es az oda route-olt kereseket eldobalja? (martian-nak nezi)
milyen loadbalancert hasznaltok amugy?
Tyrael
- A hozzászóláshoz be kell jelentkezni
LB: valami cisco cucc (pontosabban most nem tudom)
biztos nem nézi martian-nak. :)
A fő kérdésem még mindig az, h mi okozhatja, h érkező SYN-re nem megy vissza izibe ACK és mivel lehet ezt elhárítani.
- A hozzászóláshoz be kell jelentkezni
A fő kérdésem még mindig az, h mi okozhatja, h érkező SYN-re nem megy vissza izibe ACK és mivel lehet ezt elhárítani.
de ha jol ertem, akkor ez localhost-on is elojon? mi a szolgaltatas? csak mert ha mar belso halon (lebutitva/leszedve mindenfele lb-t) is jelentkezik, akkor inkabb arrafele kene szaglaszni. a celgepeken tuzfal? rosszul megirt/konfigolt szerver? barmi lehet itt.
- A hozzászóláshoz be kell jelentkezni
localhostra direkt nem próbáltuk. biztos lehetne értelme, de jelen helyzetben nem megvalósítható. a LB és a cél gépek között figyelve a forgalmat látszik, h jön a SYN de nem megy vissza SYNACK. A localhost figyelése sokat ezen nem segítene.
tűzfal: nincs
> rosszul megirt/konfigolt szerver? barmi lehet itt.
igen, pontosan ez a kérdés. hogy esetleg tud-e vki OS/kernel szintű tippet adni.
- A hozzászóláshoz be kell jelentkezni
a LB és a cél gépek között figyelve a forgalmat látszik, h jön a SYN de nem megy vissza SYNACK.
És ezt ugye a célgépen sniffelve látni? Mert ott kéne nézni.
- A hozzászóláshoz be kell jelentkezni
Ehhez akkor köze nincs se az internetnek, se a tűzfalnak, se az LB-nek.
Ha egy notebookot dugnál a magában álló szerverre, akkor is ezt tapasztalnád.
Lehetséges indokok:
- aszimmetrikus ethernet duplexitás probléma
- a szerveren futó tűzfal eldobálja a csomagokat
- a szerveren futó program bindol, de nem listenel
- a szerveren futó program input queue-ja betelik (ehhez baromi sok connection kell), és a program nem szabadítja fel (mondjuk mert single-threaded, és valami lefoglalja)
- A hozzászóláshoz be kell jelentkezni
> - aszimmetrikus ethernet duplexitás probléma
erről bővebben tudsz vmit mondani?
szerk: ha etherchannel/bonding -ra gondolsz, akkor az itt most nem játszik.
> - a szerveren futó tűzfal ...
nincs tűzfal és "csak" kb. 5-10% -nyi a hiba, de jelen helyzetben ez is elfogadhatatlan
> - a szerveren futó program bindol, de nem listenel
listenel, mert a kérések többségét kiszolgálja
> - a szerveren futó program input queue-ja betelik (ehhez baromi sok connection kell),
> és a program nem szabadítja fel (mondjuk mert single-threaded, és valami lefoglalja)
OS szinten jelentéktelen számú *_WAIT-es státuszú kapcsolat van és az ESTABLISHED-ek sincsenek sokan ( < 1000). Vannak nagyobb terheléssel lazán szambázó vasaink...
- A hozzászóláshoz be kell jelentkezni
erről bővebben tudsz vmit mondani?
Összedugsz két gépet/switchet/routert/akármit etherneten, az egyik half duplexre, a másik full duplexre áll be. Ennek az lesz az eredménye, hogy az egyik doboz azt hiszi, hogy ő bármikor szólhat, nem kell megvárnia, hogy a másik éppen szünetet tartson. A másik doboz pedig azt gondolja, hogy ha a túloldalsó beszél, akkor ő nem beszélhet, és ha meghallja a másikat, miközben beszél, akkor meg kell azonnal szakítania a csomag küldését. Ez látványosan működésképtelen tud lenni.
Felismerése: a half duplex oldalon a 'late collision' nevű counter nem 0. Általában ha az egyik oldal half duplex, az már eleve gyanús, mert mindenkinek full duplexnek kéne lennie, ha nem hubot használsz. Ha akármelyik Rx vagy Tx error counter nem nulla, az szintén gyanús.
- a szerveren futó program input queue-ja betelik (ehhez baromi sok connection kell),
és a program nem szabadítja fel (mondjuk mert single-threaded, és valami lefoglalja)
OS szinten jelentéktelen számú *_WAIT-es státuszú kapcsolat van és az ESTABLISHED-ek sincsenek sokan ( < 1000). Vannak nagyobb terheléssel lazán szambázó vasaink...
ezt az esetet (meg a tűzfalas előzőét is) a SYN_RCVD állapotban levő sok connection jelzi.
- A hozzászóláshoz be kell jelentkezni
a gep tulterhelt (cpu)
a gep tulterhelt (halokartya, nezz ra a dobott/error szamra)
tul keves az aktualis syn queu
tul kicsi az aktualis nyitott kapcsolatok megengedett szama (linux eseten a conntrack tud csunya trefat jatszani, high-load ip szerverre ne rakj conntracket)
kapcsold be a synccokie funkciot, ha tudja az oprendszer
egyebkent, a syn-ack azonnal visszajon, ahogy a tcp stackban megtortenhet a bejegyzes. ez viszonylag magas prioritassal megy, valami durva malor lehet, ha megsem.
Mennyi az aktiv tcp kapcsolatok szama?
netstat --inet -an | awk '/^tcp/{print $6}' | sort | uniq -c
- A hozzászóláshoz be kell jelentkezni
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
cat /proc/sys/net/ipv4/tcp_synack_retries
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count
cat proc/sys/net/ipv4/netfilter/ip_conntrack_max
- A hozzászóláshoz be kell jelentkezni
$ netstat --inet -an | awk '/^tcp/{print $6}' | sort | uniq -c
695 ESTABLISHED
16 LISTEN
$ cat /proc/sys/net/ipv4/tcp_max_syn_backlog
1024
$ cat /proc/sys/net/ipv4/tcp_synack_retries
5
$ cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count
1614
$ cat proc/sys/net/ipv4/netfilter/ip_conntrack_max
conntack nincs
- A hozzászóláshoz be kell jelentkezni
695 ESTABLISHED
kicsit soknak tunik. ha csak egy alkalmazas (processz, akar tobbszalon is) veszi fel ezt a sok kapcsolatot akkor lehet hogy egy-egy idopillanatban a processz altal maximalisan megnyithato filedescriptorok sza'ma meghaladja meghaladja az alapertelmezett 1024-et? (lasd me'g `ulimit -n`) ha a processz ma'st (mezei fileokat, pipe-okat, unix socket izeket) is nyitogat, akkor ebbe bele lehet futni viszonylag konnyen.
mondjuk kerdes hogy ipstack/inode szinten mikor kerul lefoglala'sra az filedescriptor maga. ha a peer a syn-t kuldi, vagy amikor az ack-ot? ha csak ezutobbiban, akkor nem biztos hogy itt van a gond.
- A hozzászóláshoz be kell jelentkezni
$ ulimit -n
65536
$ cat /proc/sys/fs/file-nr
3060 0 6815744
---
> mondjuk kerdes hogy ipstack/inode szinten mikor kerul lefoglala'sra
> az filedescriptor maga. ha a peer a syn-t kuldi, vagy amikor az ack-ot?
> ha csak ezutobbiban, akkor nem biztos hogy itt van a gond.
ez jó kérdés, nem tudom...
- A hozzászóláshoz be kell jelentkezni
CLOSE_WAIT, TIME_WAIT egy se..? Nem HTTP szerver?
Esetleg nem vágsz be egy részletet a tcpdump kimenetből, amiben benne minden csomag az első SYN -től az első adatcsomagig?
- A hozzászóláshoz be kell jelentkezni
HTTP szerver, CLOSE_WAIT és TIME_WAIT alig-alig van.
Dumpot próbálok szerezni.
- A hozzászóláshoz be kell jelentkezni