ఒకే Linux హోస్ట్‌పై రెండో OpenVPN క్లయింట్‌ను జోడించడం రెండు స్థలాలలో ఒకదానిలో విఫలమవుతుంది. గానీ బయటి సొరంగం ఆ రవాణాను ఆక్రమించుకోవడంతో లోపలి క్లయింట్ తన సర్వర్‌ను చేరుకోలేదు, లేదా రెండో క్లయింట్ మార్గ పట్టికను తిరిగి రాస్తుంది, మొదటి సొరంగం పనిచేయడం ఆగిపోతుంది. రెండు సమస్యలూ రూటింగ్‌లో ఉన్నాయి, ఎన్‌క్రిప్షన్‌లో కాదు, కొత్త సొరంగం ఏదైనా అప్లికేషన్ ట్రాఫిక్ మోసుకెళ్లక ముందే రెండూ పరిష్కారమవుతాయి. ఇక్కడ చిరునామాలు ఉదాహరణకు: tun0 బయటి సొరంగం, 203.0.113.9 లోపలి సర్వర్, TCP 9999 లోపలి మార్గాన్ని ఉపయోగించాల్సిన ప్రవాహం.

రెండు వైఫల్య విధానాలు, ఒక మార్గ పట్టిక

లోపలి క్లయింట్ తన సర్వర్ వైపు UDP సాకెట్ తెరుస్తుంది, ఆ సాకెట్ ఇతరుల మాదిరిగానే ప్రస్తుత మార్గ పట్టికను అనుసరిస్తుంది. బయటి సొరంగం ఇప్పటికే డిఫాల్ట్‌ను కలిగి ఉంటే, హ్యాండ్‌షేక్ ప్యాకెట్లు బయటి సొరంగంలోకి వెళ్తాయి. బయటి సర్వర్ లోపలి సర్వర్‌ను చేరుకోగలిగి, అవతలి వైపు ప్రవాహాన్ని మోయడానికి అంగీకరించినప్పుడే అది పనిచేస్తుంది; లేకపోతే హ్యాండ్‌షేక్ ఆగిపోతుంది, క్లయింట్ మళ్లీ ప్రయత్నిస్తుంది.

రెండో వైఫల్యం సర్వర్ push నుండి వస్తుంది. సాధారణ push redirect-gateway def1, అది డిఫాల్ట్ మార్గాన్ని భర్తీ చేయకుండా 0.0.0.0/1 మరియు 128.0.0.0/1 ను ఇన్‌స్టాల్ చేస్తుంది. అందువల్ల తమ సొంత /1 జతను ఇన్‌స్టాల్ చేసే రెండు క్లయింట్లు ఢీకొంటాయి, దాదాపు ప్రతి గమ్యానికీ కొత్త జత గెలుస్తుంది. రెండోది కనెక్ట్ అయిన తర్వాత సొరంగం చనిపోతే పట్టికలో ఆ రెండు ప్రిఫిక్స్‌లను చూడండి, ఎందుకంటే డిఫాల్ట్ మార్గం కూడా ఎప్పుడూ మారకపోవచ్చు.

ప్రవాహాన్ని గుర్తించి దానికి పట్టిక ఇవ్వండి

ఎంచుకున్న ట్రాఫిక్‌ను mangle పట్టికలో గుర్తించి, విధాన నియమంలో ఆ గుర్తును సరిపోల్చి నడిపించండి. నియమం డిఫాల్ట్ మార్గం లోపలి పరికరమైన ప్రత్యేక పట్టికను చూపుతుంది, కాబట్టి గుర్తించిన ప్యాకెట్లు మాత్రమే లోపలి మార్గాన్ని తీసుకుంటాయి.

iptables -t mangle -A PREROUTING -p tcp -m multiport --dport 9999 -j MARK --set-mark 0x9999
ip rule add fwmark 0x9999 table 200 pref 1000
ip route add default dev tun1 table 200

ఈ నియమ సమూహంలో చాలా వైఫల్యాలు రెండు తప్పుల నుండి వస్తాయి. firewall సెట్ చేసే గుర్తు విలువ, నియమం సరిపోల్చే విలువ ఒకటే అయి ఉండాలి, ఎందుకంటే భేదం లోపాన్ని గానీ ప్రభావాన్ని గానీ ఇవ్వదు. మరియు PREROUTING బయట నుండి వచ్చే ప్యాకెట్లను మాత్రమే చూస్తుంది, కాబట్టి ఈ హోస్ట్‌లో ప్రారంభమయ్యే కనెక్షన్‌కు గుర్తించబడక ముందే అదే సరిపోలిక ఉన్న OUTPUT నియమం కావాలి.

రెండో క్లయింట్ నుండి మార్గ యాజమాన్యాన్ని తీసుకోండి

రెండు ఎంపికలు రెండో క్లయింట్ పట్టికను సవరించకుండా నిరోధిస్తాయి, అవి వేర్వేరు స్థానాల్లో పనిచేస్తాయి. route-nopull push చేసిన మార్గ ఎంపికలను పట్టించుకోదు, కాబట్టి ఏమీ ఇన్‌స్టాల్ కాదు. route-noexec push చేసిన ఎంపికలను క్లయింట్ వాతావరణంలోకి అంగీకరిస్తుంది కానీ పట్టిక మార్పును hook కు వదిలేస్తుంది, సర్వర్ ఏమి అందించిందో చూడాల్సినప్పుడు అదే మీకు కావాలి.

Hook push చేసిన విలువలతో తన వాతావరణంలో నడుస్తుంది, మీరు ఆమోదించిన ఎంట్రీలను మాత్రమే జోడించాలి. దాన్ని idempotent చేయండి: తిరిగి నిర్మించే ముందు అది కలిగి ఉన్న పట్టికను ఖాళీ చేయండి, మునుపటి అమలు శుభ్రమైన స్థితిని వదిలిందని భావించవద్దు. తిరిగి కనెక్ట్ అయినప్పుడు hook మళ్లీ పిలువబడుతుంది, శుభ్రం చేయకుండా జోడించే hook నకిలీ మార్గాలను కూడబెడుతుంది.

ఒక యజమానిని ఎంచుకుని రాసి ఉంచండి. రెండు ఎంపికలను సెట్ చేసే ప్రొఫైల్, లేదా చేతి స్క్రిప్ట్‌తో పోటీపడే hook, తర్వాత ఎవరూ వివరించలేని పట్టికను సృష్టిస్తుంది.

రెండు సర్వర్ చిరునామాలను పిన్ చేయండి

లోపలి క్లయింట్ కనెక్ట్ అవ్వక ముందు లోపలి సర్వర్‌కు బయటి పరికరం ద్వారా హోస్ట్ మార్గం కావాలి. ఆ ఎంట్రీయే లోపలి రవాణాను డిఫాల్ట్‌ను అనుసరించనివ్వకుండా బయటి సొరంగంలో ఉంచుతుంది.

ip route add 203.0.113.9/32 dev tun0
ip route get 203.0.113.9

ప్రధాన పట్టికలో బయటి సర్వర్ కూడా సరిపోలే హోస్ట్ మార్గాన్ని జోడించండి, లేకపోతే తిరిగి కనెక్ట్ అయినప్పుడు బయటి క్లయింట్ సొంత రవాణా దాని సొంత సొరంగంలోకి రూట్ కావచ్చు. క్రమం ఐచ్ఛికం కాదు: సంబంధిత ఇంటర్‌ఫేస్ ఉన్న తర్వాత ఈ ఎంట్రీలను జోడించండి, అంటే కనెక్షన్ తర్వాత నడిచే hook లేదా స్క్రిప్ట్. ఆఫ్‌లో ఉన్న పరికరానికి చూపే మార్గం తొలగించబడుతుంది లేదా నిర్లక్ష్యం చేయబడుతుంది, కాబట్టి బూట్ సమయంలో రాసిన ఎంట్రీ మీరు ఊహించిన క్రమాన్ని దాటదు.

మొత్తం పట్టిక చదవడం కంటే లుకప్‌ను తనిఖీ చేయండి. మార్గ లుకప్ అవుట్‌పుట్ kernel ఉపయోగించే పరికరాన్ని, మూల చిరునామాను పేర్కొంటుంది, క్లయింట్ తన సాకెట్ తెరిచినప్పుడు సరిగ్గా అదే పొందుతుంది.

గొలుసును పరీక్షించి వైఫల్యాన్ని కనిపించేలా చేయండి

లోపలి క్లయింట్ కనెక్ట్ అవుతున్నప్పుడు బయటి ఇంటర్‌ఫేస్‌పై క్యాప్చర్ చేయండి. లోపలి హ్యాండ్‌షేక్ బయటి సొరంగం లోపల ఎన్‌క్రిప్ట్ చేసిన పేలోడ్‌గా కనిపించాలి; అది 203.0.113.9 వైపు సాధారణ UDPగా కనిపిస్తే, హోస్ట్ మార్గం లేదు, గొలుసు ఎప్పుడూ నిర్మించబడలేదు.

భౌతిక అప్‌లింక్‌కు నిశ్శబ్దంగా తిరిగిపోయే గొలుసు అత్యంత చెడ్డ ఫలితం, ఎందుకంటే ఇంటర్‌ఫేస్ స్థితి ఏమీ ప్రకటించదు, లోపలి ట్రాఫిక్ తప్పు మూల చిరునామా నుండి బయటకు వెళ్తుంది. బయటి సొరంగం పడిపోయినప్పుడు రెండో క్లయింట్ నేరుగా తిరిగి కనెక్ట్ కాగలిగితే, ఆ మార్గాన్ని నిలిపివేయండి లేదా వైఫల్యం కనిపించేలా దాన్ని బయటి ఇంటర్‌ఫేస్‌కు కట్టండి.

రెండు ప్రవాహాలు, ఒక నియమ డంప్‌తో ముగించండి: గుర్తించిన మరియు గుర్తించని కనెక్షన్లు వేర్వేరు మార్గాలు తీసుకోవాలి, ip rule show మీరు ఉద్దేశించిన ప్రాధాన్యతను జాబితా చేయాలి. రెండు ప్రవాహాలూ ఒకే మార్గం తీసుకుంటే, గుర్తు మీరు అనుకున్న చోట వర్తించడం లేదు.

సంబంధిత వ్యాసాలు