VPN గేట్వేలో MSS క్లాంపింగ్: అది ఏమి సరిచేస్తుంది, ఏమి కాదు
క్లాంపింగ్ TCP హ్యాండ్షేక్లలో MSSని తిరిగి రాస్తుంది, సెగ్మెంట్లు టన్నెల్లో ఇమిడేలా. UDP లేదా పాడైన path-MTU తనిఖీని ఎప్పటికీ సరిచేయదు. మూడు తనిఖీలు, క్రమంగా.
చిన్న అభ్యర్థనలు పని చేస్తాయి, పెద్ద డౌన్లోడ్లు నిలిచిపోతాయి, మరియు ఎవరో MSS క్లాంపింగ్ సూచిస్తారు. ఆ సూచన సరైన క్రమంలో ప్రయత్నించదగినంత తరచుగా సరైనది, మరియు కళ్లు మూసుకుని వర్తించినట్లయితే అర్ధరోజు వృథా చేయదగినంత తరచుగా తప్పు. క్రింది మూడు తనిఖీలు నిజమైన TCP పరిమాణ సమస్యను UDP సమస్య, పాడైన path-MTU ఆవిష్కరణ, మరియు తిరిగి రాయవలసిన హ్యాండ్షేక్ను ఎప్పటికీ చూడని క్లాంప్ నుండి వేరు చేస్తాయి.
వైఫల్యం ఆకారంతో ప్రారంభించండి
పరిమాణ వైఫల్యానికి ఒక సంతకం ఉంటుంది: కనెక్షన్ ఏర్పడుతుంది, ప్రామాణీకరణ మరియు చిన్న ప్రతిస్పందనలు విజయవంతమవుతాయి, ఆ తర్వాత పూర్తి పరిమాణ సెగ్మెంట్ అవసరమైనప్పుడు బదిలీ నిరవధికంగా నిలిచిపోతుంది. టెక్స్ట్ లోడ్ చేసి చిత్రాన్ని ఎప్పటికీ పూర్తి చేయని పేజీలు చిన్న స్థాయిలో అదే వైఫల్యం. ఏదీ కనెక్ట్ కాకపోతే, సమస్య మార్గంలో ముందే ఉంది మరియు క్లాంపింగ్ సహాయపడదు. ఎప్పటికీ రాని హ్యాండ్షేక్ను క్లాంప్ సరిచేయలేదు.
ఈ సంతకం ఉండటానికి కారణం సెగ్మెంట్ పరిమాణం హ్యాండ్షేక్లోనే అంగీకరించబడుతుంది. ప్రతి వైపు TCP ఎంపికగా గరిష్ఠ సెగ్మెంట్ పరిమాణాన్ని ప్రకటిస్తుంది, పంపేవారు ప్రత్యర్థి ప్రకటనను గౌరవిస్తారు. మార్గం అంత పెద్ద సెగ్మెంట్ను మోయలేకపోతే, పంపేవాడు చివరికి ఒకదాన్ని ప్రయత్నించినప్పుడు వైఫల్యం తర్వాత కనిపిస్తుంది.
ఈ లక్షణాన్ని చదివేటప్పుడు రవాణాను కన్ను నుండి తప్పించకండి. క్లాంపింగ్ TCP ఎంపిక పునర్లేఖనం, కాబట్టి అదే టన్నెల్ కింద నిలిచిపోయే వాయిస్ లేదా వీడియో కాల్ MSS సమస్య కాదు, దానితో మెరుగుపడదు. TCP ఎంపికను తాకే ముందు రవాణాను రాయండి.
మార్గానికి ధర వేయండి, తర్వాత టన్నెల్తో పోల్చండి
రెండు సంఖ్యలు ముఖ్యం, అవి తరచుగా గందరగోళానికి గురవుతాయి. path-MTU అంటే మార్గం విభజన లేకుండా మోసే అతిపెద్ద ప్యాకెట్, IPv4 కోసం ప్రకటించిన MSS అంటే ఆ విలువ నుండి IP మరియు TCP శీర్షికల 40 బైట్లు తీసివేసినది, లేదా IPv6 కోసం 60 తీసివేసినది. టన్నెల్ ఎన్క్యాప్సులేషన్ లోపలి ప్యాకెట్ ప్రారంభం కాకముందే బడ్జెట్లో కొంత భాగం తింటుంది.
ping -M do -s 1400 198.51.100.20
tracepath 198.51.100.20
do-not-fragment బిట్తో కూడిన ping ఆ పేలోడ్ పరిమాణ ప్యాకెట్ బతికి ఉంటుందో లేదో చెబుతుంది; విఫలమయ్యే వరకు పరిమాణాన్ని మార్చండి, మార్గ పరిమితిని అనుభవపూర్వకంగా కనుగొన్నారు. tracepath అవుట్పుట్ మార్గంలో కనుగొన్న MTUని నివేదిస్తుంది, అది పని చేసినప్పుడు వేగంగా, మధ్యస్థ హాప్ ప్రోబ్లను ఫిల్టర్ చేసినప్పుడు తక్కువ విశ్వసనీయంగా ఉంటుంది.
ఇప్పుడు టన్నెల్ ఓవర్హెడ్ను తీసివేయండి. బయటి IP శీర్షిక, UDP శీర్షిక మరియు టన్నెల్-నిర్దిష్ట శీర్షిక అన్నీ అదే 1500 బైట్ల నుండి వస్తాయి, కాబట్టి సాధారణ ఈథర్నెట్ పునాదిపై ఉపయోగించగల లోపలి MTU భౌతిక లింక్ సూచించే దానికంటే తక్కువ. లెక్కించిన లోపలి MTU మీ సహచరులు ప్రకటించే దానికంటే తక్కువ ఉంటే, మీరు ఊహ కాదు, నిజమైన క్లాంప్ అభ్యర్థిని కనుగొన్నారు. లెక్కించిన విలువ ఇప్పటికే సహచరుల ప్రకటనకు మించి ఉంటే, ఇక్కడ ఆపి వేరే చోట చూడండి.
హ్యాండ్షేక్ దాటే చోట క్లాంప్ పెట్టండి
క్లాంప్ గేట్వేను దాటేటప్పుడు SYN మరియు SYN-ACK ప్యాకెట్లలో MSS ఎంపికను తిరిగి రాయడం ద్వారా పని చేస్తుంది. ఏ దిశ లేని ఇంటర్ఫేస్పై నియమం ఉంటే, చర్చ మార్పు లేకుండా ముగుస్తుంది మరియు లక్షణం కొనసాగుతుంది, కాబట్టి విలువ కంటే స్థానమే ఫలితాన్ని నిర్ణయిస్తుంది.
| Symptom | What it points to | Next check |
|---|---|---|
| Handshake completes, large transfer stalls | Segment size larger than the path can carry | Path MTU against the tunnel's effective MTU |
| Nothing connects, small or large | Routing, firewall or keying failure | Not MSS; look at the tunnel state |
| Only UDP applications stall | Datagram size or a dropped ICMP error | Platform-specific UDP handling, not clamping |
| Fixed after reconnect, returns later | Clamp applied to one direction or one interface | Rule placement and the handshake path |
దిశ మరో సగం. ఒక దిశలో క్లాంపింగ్ సగం ప్రవాహాలను సరిచేస్తుంది, మిగిలినవి అడపాదడపా కనిపించే విధంగా విఫలమవుతాయి, కాబట్టి ఫార్వర్డ్ అయ్యే ట్రాఫిక్ రెండు దిశలకూ వర్తించండి. టన్నెల్ ఇంటర్ఫేస్ కోసం Linux సాంప్రదాయ రూపం SYN ప్యాకెట్లతో సరిపోలే mangle నియమం:
iptables -t mangle -A FORWARD -o tun0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
--clamp-mss-to-pmtu నిజానికి ఏమి చేస్తుందో గమనించండి: అది విలువను మార్గం MTU నుండి పొందుతుంది, అది ఎప్పుడూ టన్నెల్ యొక్క నిజమైన పేలోడ్ బడ్జెట్ కాదు. లోపలి మార్గం మరియు బయటి మార్గం భిన్నంగా ఉండే మార్గ-ఆధారిత టన్నెల్లో, మునుపటి తనిఖీలో లెక్కించిన స్పష్ట విలువ స్వయంచాలకం కంటే ఎక్కువ అంచనా వేయగలిగినది.
కొత్త కనెక్షన్తో ధృవీకరించండి, ఫీడ్బ్యాక్ను సజీవంగా ఉంచండి
స్థాపించిన కనెక్షన్ తాను చర్చించిన MSSని నిలుపుకుంటుంది, కాబట్టి అదే సెషన్లో పరీక్షించడం ఏమీ నిరూపించదు. మార్పు తర్వాత కొత్త కనెక్షన్ తెరిచి చర్చించిన విలువను నేరుగా చదవండి, యాదృచ్ఛికంగా ముగిసే బదిలీ నుండి ఊహించడం బదులు.
ss -tin dst 198.51.100.20
iptables -t mangle -S | grep TCPMSS
మొదటి ఆదేశం సాకెట్ MSSని దాని రద్దీ స్థితితో పాటు నివేదిస్తుంది, అది క్లాంప్ ప్రభావం చూపినందుకు వేగవంతమైన నిర్ధారణ. రెండవది మీరు జోడించినట్లు భావించే నియమమే ఉన్న నియమం అని, అది ఉంచిన పట్టికలో ధృవీకరిస్తుంది.
తర్వాత మీరు సరిచేయని యంత్రాంగాన్ని రక్షించండి. path-MTU ఆవిష్కరణ ICMP fragmentation-needed సందేశాలు పంపేవారిని చేరుకోవడంపై ఆధారపడి ఉంటుంది, కాబట్టి వాటిని విసిరే ఫైర్వాల్ సరైన క్లాంప్ ఉన్నప్పటికీ పెద్ద బదిలీలను పగలగొట్టడం కొనసాగిస్తుంది. టన్నెల్ మార్గానికి ఆ సందేశాలను అనుమతించండి, లేదా క్లాంపింగ్ మీరు ఎంచుకున్న విధానానికి పరిహారం ఇస్తోందని అంగీకరించండి.
చివరగా, క్లాంప్ను ట్యూనింగ్ నాబ్గా చూసే ప్రలోభాన్ని ఎదిరించండి. అది సెగ్మెంట్ పరిమాణాన్ని పరిమితం చేస్తుంది, అది ఎప్పుడూ అవసరం లేని మార్గాల్లో థ్రూపుట్ ఖర్చు చేస్తుంది. మూడు తనిఖీల తర్వాత వర్తింపజేస్తే అది లక్ష్యిత మరమ్మత్తు; మొదట వర్తింపజేస్తే అది మూల లోపాన్ని దాచి ప్రతి తదుపరి పరీక్షకు రెండవ చరాన్ని జోడించే మార్పు. ఆ మార్పిడి ఉద్దేశపూర్వకంగా చేయదగినది, డిఫాల్ట్గా కాదు.
మీరు కొలిచిన path-MTU, తీసివేసిన టన్నెల్ ఓవర్హెడ్, జోడించిన నియమం మరియు తర్వాత చూసిన MSS రాయండి. నాలుగు సంఖ్యలు తదుపరి సంఘటనను విచారణ బదులు అన్వేషణగా మారుస్తాయి.