PF a NAT pro lokalni sit / MTU

Dan Lukes dan at obluda.cz
Sat Mar 23 07:02:21 CET 2019


On 23.3.2019 0:54, Miroslav Lachman wrote:
>> To bys prave dobre videl v tom dumpu ;-)
> 
> Do toho tcpdumpu jsem ted koukal pomerne dlouho, ale mam pocit, ze do 
> toho cumim jak husa do flasky.

> Takhle to vypada, kdyz zkusim telnet na port 80, pak zadat GET / 
> HTTP/1.0, dvakrat ENTER a na treti ENTER dojde k disconnectu.

"GET / HTTP/1.0" nasledovany jednim prazdnym radkem je legitimni 
HTTP/1.0 pozadavek. Ten treti ENTER je tam v tomto ohledu uz navic.

V tvem pripadu ale nehraje roli, protoze server spojeni uzavira ve 
skutecnosti uz po druhem ENTERu.

Od pozadavku, ktery zasila browser se navic lisi nepritomnosti "Host: 
....." hlavicky, takze telnetem se ptas "defaultniho" WWW serveru, 
kdezto browserem se ptas nejakeho virtualu (nerikam, ze to nakonec 
neskonci u stejneho defaultniho serveru - jen rikam \v cem se telnet 
pozadavek lisi od browseroveho).

> tcpdump jsem porizovat na vnejsi sitovce (bge0) a telnet jsem delal ze 
> stanice v LAN (LAN je na bge1)

Ja mluvil o dvou dumpech a jejich porovnani, tohle je jen jeden a ja 
nevim ktery z nich. Zda se mi, ze ten uspesny. Alespon ze sitoveho 
hlediska se uspesny zda.

> 03.129676 IP AA.50181 > WW.80: Flags [S], seq 779984406, ..., length 0
> 05.634234 IP WW.80 > AA.50181: Flags [S.], seq 895119811, ..., length 0
> 05.634611 IP AA.50181 > WW.80: Flags [.], ack 1, ..., length 0

Toto je standardni 3-way TCP setup handshaking.

> 08.641792 IP WW.80 > AA.50181: Flags [S.], seq 895119811, ..., length 0
> 08.642325 IP AA.50181 > WW.80: Flags [.], ack 1, ..., length 0

Zda se ale, ze serveru treti paket nedosel, proto svuj (druhy) paket 
opakuje a klient mu na nej znovu tretim paketem odpovida.

Opakovani samo o sobe problem neni, TCP se ztratami paketu pocita, ale 
ztrata pakety v LAN podezrela je - nekde se deje neco, co by se v LAN 
spis dit nemelo. Obzvlast pokud by se opakovanymi dupmpy ukazalo, ze 
neslo o "udalost, ktera se v nasem ustavu stane jen jednou za deset 
let", ale o neco, co se opakuje casteji.

Kazdopadne, v teto chvili je TCP spojeni navazane.

> 08.650351 IP WW.80 > AA.50181: Flags [.], ack 1, ..., length 0

Uprava velikosti okna, nezajimave.

> 09.038862 IP AA.50181 > WW.80: Flags [P.], seq 1:17, ack 1, GET / HTTP/1.0\r\n
> 10.982234 IP WW.80 > AA.50181: Flags [.], ack 17, ..., length 0

Prenos prvniho radku pozadavku, vse v poradku.

> 10.982609 IP AA.50181 > WW.80: Flags [P.], seq 17:19, ack 1, ... \r\n
> 11.182130 IP WW.80 > AA.50181: Flags [F.], seq 846, ack 19, ..., length 0

Prenos prazdneho radku (druhy ENTER) - server prijem dat potvrdi a 
vzapeti zahaji sekvenci pro uzavreni spojeni (flag FIN).

Tim muzeme zbytek dumpu povazovat za nezajimavy.

Timto dumepm tedy moc nepozname - zde je nejaky problem az na aplikacni 
urovni - s timto klientem se dany (defaultni) WWW server proste nechce 
bavit. At uz poroto, ze je to obecna vlastnost toho defaultniho serveru 
(se kterym se nikdo normalne nebavi) nebo je to nejaky sofistokovanejsi 
problem - jako treba to, ze klient nema reverz a server ma nastaveno, ze 
s takovymi se nema bavit. Detailni duvod odmitnuti by mohl byt v error 
logu serveru.

Pro ucely nasi analyzy bys musel pokladat dotaz ekvivalentni tomu, ktery 
poklada browser - tedy nejmene Host: parametr hlavicky.

Tenhle dump nam tedy s analyzou primarniho problemu moc nepomuze, tenhle 
dump ma svuj vlastni, nezavisly a samostatny, problem.

> Tak jsem zkusil Jirkuv tip na velikost packetu... a maximalni velikost, 
> kterou jsem z toho stroje schopen pingat, je 552. Na 553 uz mi neprijde 
> odpoved.

Z hlediska specifikace je takova LAN legitimni a i zde by mela 
komunikace probihat (za predpokladu, ze firewall nebrani pruchodu ICMP 
nutnych pro PMTU), ale jde o cislo neobvykle male. Jsou tu tedy dva 
problemy - primarni, zrejme ty nebo nekdo jiny blokujes neco, co je pro 
TCP nutne a druhy, ze velikost paketu, kter eprochazeji, je neobvykle 
mala. To druhe problem byt nemusi, mozna nejaka technologie nekde po 
ceste pruchod vetsich paketu opravdu neumoznuje, ale je to rozhodne 
vyrazna neobvyklost.

Budem se ale venovat nejprve te prvni. To se ti bude nejlepe analyzovat 
znovu dumpem (sorry), konkretne dvema - jednim porizenym na strane 
klienta, druhym, ze stejneho okamzikuk, porizenym na strane serveru.

A rovnou ti reknu co v nem hledas a nejspis najdes. V urcite fazi 
komunikace jedna ze stran (spis server, ale nikoliv nutne) posle velky 
paket (oznaceny "don't fragment" coz je u TCP standard). Paket, zrejme, 
neprojde a odesilateli by melo prijit ICMP "fragmentation needed" 
odeslane tim, pro koho byl ten paket velky.

No a to ICMP neprijde. Nejspis ho nekde po ceste nejaky spatne nastaveny 
filtr sezere. Je potreba zjistit kdo po ceste je zere (spis nez ping 
pouzivajici ICMP je na tohle lepsi traceroute -F -P TCP ... packetlen) a 
zajistit napravu.

Muze to byt i tvuj firewall, ale ja bych to videl spis na firewall na 
strane serveru. Duvod, proc se problem projevuje tobe a nikomu jinemu je 
ta nizka maximalni velikost paketu - ty na limit narazis. Ostatni 
nejspis ne a tak jim nepruchodnost filtru pro ICMP nevadi.

> A ted mi nekdo reknete, cim to muze byt?

Skoro to vypada, ze to je rozbity. ;-)

> ifconfig na bge0 hlasi mtu 576 (ale proc?)

A jde rucne zvysit ? Pokud ano, tak to neni tvrde omezeni, ale nekdo 
nebo neco tam to cislo nakonfigurovalo. Nejsem si jisty, jestli to 
nemuze udelat treba DHCP - kazdopadne, puvodce je treba najit a eliminovat.

Nejde zvysit (a po nastartovani v single-mode je uz takhle mala ?) - tak 
to je nejaky hardware-related problem. Do dalsich spekulaci bych se 
pustil az to bude potvrzeno.

> Kazdopadne specialni dik pro Jirku, protoze me by asi vazne nenapadlo 
> hledat problem ve velikosti packetu / MTU.

Casem to naopak v tehls eisuacich budes povazovat za "pricinu prvni 
volby". Ja po tobe ten dump chtel predevsim proto, ze preci jen existuji 
i dalsi mozne priciny a z dumpu je videt jak problem s MTU tak ty mozne 
dalsi.

Dan



More information about the Users-l mailing list