స్థిరమైన 1,500 బైట్ అంతర్గత పాకెట్ను VPN ద్వారా తీసుకెళ్లడం
స్థిరమైన 1,500 బైట్ అంతర్గత పాకెట్ 1,500 బైట్ బాహ్య మార్గంలో నిండదు. ఓవర్హెడ్ను కొలవండి, తర్వాత పెద్ద underlay MTU లేదా మద్దతు ఉన్న ఫ్రాగ్మెంటేషన్ను ఎంచుకోండి.
మీకు వంగని అవసరం ఉంది: పంపినవాడు విడుదల చేసే అదే 1,500 బైట్ IP పాకెట్ను, హెడర్లతో సహా, ఎదుటి వైపు పొందాలి. టన్నెల్ ఆ పాకెట్ను దాని స్వంత ఫ్రేమింగ్తో కలిపి రెండవ 1,500 బైట్ IP పాకెట్ లోపల చుట్టలేదు, కాబట్టి డిజైన్లో ఏదో వదులుకోవాలి. క్రింది క్రమం నేను మార్పు విండోలో ఉపయోగించేది: బైట్ బడ్జెట్ రాయండి, underlay నిజంగా ఏమి మోయగలదో నిరూపించండి, తర్వాత సరిగ్గా ఒక రవాణా పద్ధతిని ఎంచుకుని ఎదుటి వైపు అంతర్గత పాకెట్ను నిర్ధారించండి.
ప్రొఫైల్ను సవరించే ముందు బైట్ బడ్జెట్ రాయండి
ఎన్క్యాప్సులేషన్ అనేక పొరల్లో బైట్లను జోడిస్తుంది, మొత్తం మీ ప్రొఫైల్ లక్షణం, వెతికి పట్టుకోగల స్థిరాంకం కాదు. చిరునామా కుటుంబం, సైఫర్ ఎంపిక, రవాణా ప్రోటోకాల్ మరియు ఏదైనా కుదింపు లేదా ఫ్రేమింగ్ ఎంపిక సంఖ్యను కదిలిస్తాయి, కాబట్టి మరో డిప్లాయ్మెంట్ నుండి కాపీ చేసిన వ్యవకలనం బడ్జెట్గా నిష్ప్రయోజనం. అంతర్గత అవసరంతో ప్రారంభించి, మీ కాన్ఫిగరేషన్ యొక్క కొలిచిన పాకెట్ ఒకటికి ఓవర్హెడ్ జోడించి, ఎవరైనా ఫైల్ సవరించే ముందు వచ్చే బాహ్య పరిమాణాన్ని మార్పు టికెట్లో రాయండి.
రెండు సంఖ్యలు డిజైన్ను నిర్ణయిస్తాయి: ఫ్రాగ్మెంటేషన్ లేకుండా మార్గం మోసే అతిపెద్ద బాహ్య పాకెట్, మరియు మీ ఎన్క్యాప్సులేషన్కు అవసరమైన అదనపు బైట్లు. మొదటిది రెండవదానికి 1,500 జోడించిన దానికంటే చిన్నదైనప్పుడు, వాటిలో ఒకటి మారాలి. అప్పుడు ఎంపిక సృజనాత్మకం కాకుండా ఇరుకైనది అవుతుంది, కాబట్టి ఎంపికలను చర్చించే ముందు రెండు సంఖ్యలను రాసుకుంటాను. టన్నెల్ పొరలో ఆ బైట్లను కుదించి మాయం చేసేది ఏదీ లేదు, ఏ ఒక్క MTU పూర్ణాంకం మీకు ఇచ్చిన అవసరాన్ని తీసివేయదు.
do-not-fragment ping తో underlay ను పరిశీలించండి
ఇంటర్ఫేస్ MTU ను నమ్మకుండా మార్గాన్ని కొలవండి, ఎందుకంటే బాహ్య మార్గంలో అతి చిన్న లింకే ముఖ్యం. Linux లో, -M do do-not-fragment బిట్ను సెట్ చేస్తుంది మరియు -s ICMP పేలోడ్ను తీసుకుంటుంది, కాబట్టి 20 బైట్ IP హెడర్ మరియు 8 బైట్ ICMP హెడర్ తీసివేస్తే 1,500 బైట్ ఫ్రేమ్ 1,472 బైట్ పేలోడ్తో సమాధానం ఇస్తుంది. పరీక్ష విఫలమయ్యే వరకు పేలోడ్ పెంచి, తర్వాత jumbo పరిమాణానికి దూకి మార్గం దానిని అసలు మోస్తుందో చూడండి.
ping -M do -s 1472 -c 2 198.51.100.10 ping -M do -s 8972 -c 2 198.51.100.10 tracepath -n 198.51.100.10
1,472 దాటి 8,972 వద్ద విఫలమయ్యే మార్గం 1,500 బైట్ అంతర్గత పాకెట్ను ఓవర్హెడ్తో సహా ఒకే బాహ్య పాకెట్లో మోయలేదు. VPN కాన్ఫిగరేషన్ తెరిచే ముందు మీకు కావాల్సిన సమాధానం అదే. తదుపరి రెండు విభాగాల్లో ఏది మీకు వర్తిస్తుందో కూడా అది నిర్ణయిస్తుంది, కాబట్టి రెండు పరీక్షా ఫలితాలను టికెట్ పక్కన ఉంచండి. ఇక్కడ ఊహించడం ఒక నిర్వహణ విండోను ఖర్చు చేస్తుంది, ఎందుకంటే తనను up అని నివేదించే టన్నెల్ మార్గం అంగీకరించే అతిపెద్ద పాకెట్ గురించి ఏమీ చెప్పదు.
ప్రతి హాప్ అంగీకరించిన చోట మాత్రమే మార్గం MTU పెంచండి
Jumbo ఫ్రేమ్లు end-to-end లక్షణం, మీరు యాదృచ్ఛికంగా నియంత్రించే రెండు ఎండ్పాయింట్లపై ఆన్ చేసే సెట్టింగ్ కాదు. బాహ్య మార్గంలోని ప్రతి స్విచ్, రౌటర్ మరియు ప్రొవైడర్ అప్పగింత పెద్ద పరిమాణానికి అంగీకరించాలి, ఒకే 1,500 బైట్ హాప్ మీరు ఇప్పుడే పెద్దది చేసిన పాకెట్ను నిశ్శబ్దంగా పడేస్తుంది. స్థానిక ఇంటర్ఫేస్ మాత్రమే పెంచడం టన్నెల్ పాడైనట్టు కనిపించి underlay నిశ్శబ్దంగా జారిపోయే సాధారణ సగం మార్పు.
ip link set dev eth1 mtu 9000 ip link show dev eth1 ping -M do -s 8972 -c 2 198.51.100.10
ఇంటర్ఫేస్ మార్చి, తర్వాత మరేదీ మార్చే ముందు అదే మార్గాన్ని మళ్లీ పరిశీలించండి. పరీక్ష ఇంకా విఫలమైతే, వెనక్కి తిప్పండి ip link set dev eth1 mtu 1500 మరియు మీకు సొంతం కాని లింక్ గురించి ప్రొవైడర్తో వాదించడం బదులు ఫ్రాగ్మెంటేషన్కు వెళ్లండి.
underlay పెరగలేనప్పుడు టన్నెల్ ఫ్రాగ్మెంటేషన్ ఉపయోగించండి
అంతర్గత పాకెట్ కింద మద్దతు ఉన్న ఫ్రాగ్మెంటేషన్ యంత్రాంగం అనేక బాహ్య పాకెట్లు ఒక అంతర్గత పాకెట్ను మోయడానికి అనుమతిస్తుంది, ఎదుటి టన్నెల్ ఎండ్పాయింట్ అసలైనదాన్ని స్టాక్కు అప్పగించే ముందు వాటిని తిరిగి కలుపుతుంది. Community OpenVPN యొక్క UDP fragment ఎంపిక ఆ ఆలోచన యొక్క ఒక అమలు, బాహ్య పాకెట్ యొక్క సాధారణ IP ఫ్రాగ్మెంటేషన్కు సమానం కాదు. రెండు పీర్లు ఆ ఫార్మాట్కు మద్దతు ఉన్న వెర్షన్ నడపాలి, డేటా మార్గం మీరు అనుకున్నదే ఉండాలి: OpenVPN 3 క్లయింట్లకు మరియు కెర్నల్ వేగవంతం చేసిన డేటా ఛానెల్లకు వేర్వేరు పరిమితులు ఉన్నాయి, కాబట్టి ఒక క్లయింట్పై పనిచేసే ప్రొఫైల్ మరొకదానిపై విఫలమవచ్చు.
openvpn --config client.ovpn --tun-mtu 1500 --fragment 1400 --verb 4
సాధారణ బాహ్య ఫ్రాగ్మెంటేషన్ మరో ఎంపిక, అది బలహీనమైనది. IPv6 రౌటర్లు ఫార్వార్డ్ చేసిన పాకెట్ను అసలు ఫ్రాగ్మెంట్ చేయవు, కాబట్టి చాలా పెద్ద బాహ్య పాకెట్ సరళంగా చనిపోతుంది, సంబంధిత ICMPv6 సందేశం మార్గంలో తప్పించుకుంటే మాత్రమే పంపినవాడు తెలుసుకుంటాడు. ఫ్రాగ్మెంట్లు ఫిల్టరింగ్ మరియు నష్ట వృద్ధిని కూడా ఆహ్వానిస్తాయి, కాబట్టి దీన్ని ప్రణాళికగా కాకుండా ప్రత్యామ్నాయంగా చూస్తాను.
స్ట్రీమ్ ఆధారిత బాహ్య వాహకం తన స్వంత బైట్ స్ట్రీమ్ను విభజించడం ద్వారా పరిమాణ ప్రశ్నను దాటవేస్తుంది, పునర్నిర్మించిన అంతర్గత పాకెట్ ఇప్పటికీ 1,500 బైట్ కావచ్చు. ఇది దాని స్వంత ఖర్చుతో కూడిన రవాణా నిర్ణయం, TCP లోపలి TCP యొక్క ప్రసిద్ధ ప్రవర్తనతో సహా, కాబట్టి MTU వాదన యొక్క దుష్ప్రభావంగా కాకుండా ఉద్దేశపూర్వకంగా తీసుకోండి.
అంతర్గత పాకెట్ మార్పు లేకుండా చేరుతుందని నిర్ధారించండి
ధృవీకరణ విజయవంతమైన హ్యాండ్షేక్ కాదు. రెండు చివరలా టన్నెల్ ఇంటర్ఫేస్పై క్యాప్చర్ చేయండి మరియు అప్లికేషన్ నిజంగా పంపిన పాకెట్ పరిమాణాన్ని, విషయాన్ని ఎదుటి వైపు పొందిన దానితో పోల్చండి.
ip link show dev tun0 ping -M do -s 1472 -c 2 10.8.0.1 tcpdump -ni tun0 -c 5 'icmp and greater 1000'
క్యాప్చర్ ఎదుటి చివర పూర్తి పరిమాణ అంతర్గత పాకెట్ను చూపిస్తే, రవాణా ఎంపిక పనిచేస్తుంది, మిగిలిన పని దాన్ని నమోదు చేయడం. టన్నెల్ తనను up అని నివేదిస్తున్నప్పుడు ఏమీ చూపకపోతే, బాహ్య పాకెట్ ఎండ్పాయింట్ల మధ్య ఎక్కడో పడేయబడుతోంది, ఇది మిమ్మల్ని సైఫర్ సెట్టింగ్లకు కాకుండా పరీక్షకు తిరిగి పంపుతుంది.
టికెట్ మూసే ముందు మూడు విషయాలు నమోదు చేయండి: కొలిచిన బాహ్య బడ్జెట్, ఎంచుకున్న యంత్రాంగం, అంతర్గత పాకెట్ తప్పించుకుందని నిరూపించిన ఆదేశం. ఈ టన్నెల్ను తదుపరి తాకే వ్యక్తికి మూడూ అవసరం, వాటిలో ఏదీ కాన్ఫిగరేషన్ ఫైల్ నుండి మాత్రమే తిరిగి నిర్మించలేరు.