OpenVPN పూర్తి టన్నెల్ మీ SSH సెషన్ను కట్ చేస్తుంది: తిరిగి వచ్చే మార్గాన్ని సరిచేయండి
డిఫాల్ట్ రూట్ SSH ప్రతిస్పందనలను టన్నెల్లోకి పంపుతుంది. peer ను పిన్ చేయండి, redirect-gateway ను ఫిల్టర్ చేయండి లేదా మెషిన్ను కోల్పోయే ముందు మూలం ప్రకారం రూట్ చేయండి.
మీరు SSH ద్వారా చేరుకునే మెషిన్పై పూర్తి-టన్నెల్ OpenVPN క్లయింట్ను ఆన్ చేయడం ఒక సెకనులో సెషన్ను కట్ చేయవచ్చు, మెషిన్ ఏ తప్పూ చేయడం లేదు. టన్నెల్ ప్యాకెట్లు సర్వర్ను చేరుకునే విధానాన్ని మార్చదు; ప్రతిస్పందనలు బయటకు వెళ్లే విధానాన్ని మారుస్తుంది. డిఫాల్ట్ రూట్ tun0 వైపు చూపిన వెంటనే, మీ SSH క్లయింట్కు ప్రతిస్పందన ప్రొవైడర్ నెట్వర్క్లోకి వెళుతుంది, దానికి మీ చిరునామాకు తిరిగి వెళ్లే మార్గం లేదు. కనెక్షన్ వేలాడుతుంది, తదుపరి ప్రయత్నం సమయం మించి విఫలమవుతుంది, డెమన్ అంతా పోర్ట్ 22 పై వినిపిస్తూనే ఉంటుంది.
VPN లాగ్ చదవడానికి ముందు రౌటింగ్ పట్టికను చదవండి. టన్నెల్ పైకి వచ్చిందని లాగ్ చెబుతుంది, అది సరైనదే. ప్రశ్న ఏమిటంటే ప్రతి ప్రతిస్పందన ఏ ఇంటర్ఫేస్కు అప్పగించబడుతుంది, అది టన్నెల్ ఇప్పుడే తిరిగి రాసిన పట్టికలో ప్రతి ప్యాకెట్కు జరిగే శోధన.
ప్రతిస్పందన తప్పు ద్వారం నుండి ఎందుకు బయటకు వెళుతుంది
లోపలికి వచ్చే ప్యాకెట్లు ఇప్పటికీ భౌతిక ఇంటర్ఫేస్పై వస్తాయి, ఎందుకంటే VPN క్లయింట్ ఇంటర్నెట్ మీ సర్వర్ పబ్లిక్ చిరునామాను చేరుకునే విధానాన్ని మార్చలేదు. ప్రతిస్పందనలు వేరే నిర్ణయం: ప్రతి ప్యాకెట్కు కెర్నల్ గమ్యాన్ని వెతుకుతుంది, --redirect-gateway తర్వాత డిఫాల్ట్ నమోదు టన్నెల్ అని చెబుతుంది. ప్రొవైడర్ నిష్క్రమణ తాను సేవ చేయని గమ్యాన్ని చూసి ప్యాకెట్ను పడేస్తుంది.
OpenVPN సొంత రక్షణ సరిగ్గా ఒక గమ్యాన్ని మాత్రమే కవర్ చేస్తుంది. 2.6 చేతిపుస్తకం --redirect-gateway ను ఒక క్రమంగా వివరిస్తుంది: టన్నెల్కు ముందు ఉపయోగించిన గేట్వే ద్వారా VPN peer కోసం హోస్ట్ రూట్ను జోడిస్తుంది, తద్వారా ఎన్క్రిప్ట్ చేసిన ట్రాఫిక్ తనలోకి తిరిగి వెళ్లలేదు, ఆపై డిఫాల్ట్ రూట్ను భర్తీ చేస్తుంది. ఆ హోస్ట్ రూట్ peer కోసం మాత్రమే. మీ SSH క్లయింట్ మరో ఇంటర్నెట్ చిరునామా మాత్రమే, ఎలాంటి మినహాయింపూ పొందదు.
ఒక ప్రిఫిక్స్ తప్పును ముందుగానే మినహాయించడం విలువైనది. పొడవు లేని ip route add -net 0.0.0.0 gw 10.8.0.1 dev tun0 ఒకే చిరునామా 0.0.0.0 తో సరిపోతుంది, ఇంటర్నెట్తో కాదు; అది 0.0.0.0/0 ఉండాలి. డిఫాల్ట్ను తీసుకోవడం టన్నెల్ సొంత రవాణాను విచ్ఛిన్నం చేస్తే, ముగింపు బిందువును భౌతిక ఇంటర్ఫేస్ ద్వారా హోస్ట్ రూట్గా జోడించండి, ప్రొవైడర్ నిజమైన చిరునామాను ఉపయోగించి.
తక్షణ మరమ్మత్తు కోసం మీ SSH క్లయింట్ చిరునామాను పిన్ చేయండి
అత్యంత వేగవంతమైన మరమ్మత్తు ఏమిటంటే, టన్నెల్ ఉనికిలోకి రాకముందు సర్వర్ ఉపయోగించిన గేట్వే ద్వారా మీ క్లయింట్ చిరునామాకు హోస్ట్ రూట్. మీ వైపు సర్వర్ చూసే చిరునామాను కనుగొని, ఆపై పాత గేట్వే తెలుసుకోవడానికి సర్వర్ పట్టికను చదవండి:
curl -s https://ifconfig.co
ip route
సర్వర్పై, క్లయింట్ ప్రారంభమయ్యే ముందు మినహాయింపును జోడించండి. ఇక్కడ చిరునామాలు ప్లేస్హోల్డర్లు; ఆకారమే ముఖ్యం:
sudo ip route add 80.128.240.55 via 192.168.178.1
ఇది నివేదించబడిన సందర్భంలో ఉపయోగించిన మరమ్మత్తు, ఇది వెంటనే పనిచేస్తుంది. ఇది రెండు ఊహించదగిన విధాలుగా సున్నితమైనది కూడా: రీబూట్లో రూట్ అదృశ్యమవుతుంది, మీ ISP మరో చిరునామా ఇచ్చిన క్షణంలో అది తప్పుగా మారుతుంది. దీన్ని అత్యవసర చర్యగా పరిగణించి ఉద్దేశపూర్వకంగా శాశ్వతం చేయండి, నెట్వర్క్ యూనిట్ లేదా dispatcher హుక్ ద్వారా, లేదా ఇది తాత్కాలికమని అంగీకరించి పునరుద్ధరణ మార్గాన్ని రాసి పెట్టుకోండి.
క్లయింట్ డిఫాల్ట్ రూట్ను తీసుకోకుండా నిరోధించండి
మరింత శుభ్రమైన ఎంపిక ఏమిటంటే, టన్నెల్ డిఫాల్ట్ రూట్ను అసలు భర్తీ చేయకుండా నిరోధించడం. route-nopull, --client లేదా --pull తో ఉపయోగించినప్పుడు, రూట్లు, block-outside-dns మరియు DNS సర్వర్ల వంటి DHCP శైలి ఎంపికలు తప్ప నెట్టబడిన ఎంపికలను అంగీకరిస్తుంది, కాబట్టి మీకు అవసరమైన ప్రిఫిక్స్లను మాత్రమే జోడిస్తారు. మరింత సన్నని సాధనం లాగే ఫిల్టర్, ఇది ఒక సమస్యాత్మక సూచనను పడేసి మిగతాది ఉంచుతుంది:
route-nopull
pull-filter ignore "redirect-gateway"
ఒకటి లేదా మరొకటి ఉపయోగించండి, రెండూ కాదు, ఏమి మారుతుందో స్పష్టంగా ఉంచుకోండి. టన్నెల్ ద్వారా డిఫాల్ట్ రూట్ లేకపోతే సర్వర్ ఇకపై ప్రొవైడర్ ద్వారా ఇంటర్నెట్ బ్రౌజ్ చేయదు; మీరు స్పష్టంగా రూట్ చేసిన దానిని మాత్రమే చేరుకుంటుంది. పూర్తి టన్నెల్యే సెటప్ మొత్తం ఉద్దేశ్యమైతే, ఇది తప్పు స్విచ్, పైన ఉన్న హోస్ట్ రూట్యే సరైనది.
తిరిగి వచ్చే మార్గాన్ని మూలం లేదా కనెక్షన్ ప్రకారం విభజించండి
లోపలికి వచ్చే చిరునామా స్థిరంగా ఉన్నప్పుడు, మూల నియమం టన్నెల్ సొంత రూట్లను తాకకుండా ప్రతిస్పందనలను స్థానికంగా ఉంచుతుంది. భౌతిక ఇంటర్ఫేస్ చిరునామాకు LAN ప్రిఫిక్స్ మరియు భౌతిక డిఫాల్ట్ ఉన్న దాని సొంత పట్టికను ఇవ్వండి, ఆపై అక్కడి నుండి వచ్చే ట్రాఫిక్కు ఆ పట్టికను ఎంచుకోండి:
ip rule add from 192.168.1.11 table 128
ip route add table 128 to 192.168.1.0/24 dev eth0
ip route add table 128 default via 192.168.1.1
ఇది పనిచేయడానికి కారణం, లోపలికి వచ్చే SSH కనెక్షన్కు ప్రతిస్పందనలు క్లయింట్ కనెక్ట్ అయిన చిరునామా నుండే వస్తాయి. ప్రతి లోపలికి వచ్చే సేవ పని కొనసాగించాల్సిన నివేదించబడిన సందర్భం సరిగ్గా ఈ ఆకారాన్ని ఉపయోగించింది. లోపలికి వచ్చే చిరునామా తేలుతూ ఉంటే లేదా మార్గం చలనశీలమైతే, బదులుగా కనెక్షన్ను గుర్తించండి: భౌతిక ఇంటర్ఫేస్ నుండి వచ్చే మొదటి ప్యాకెట్పై conntrack గుర్తు పెట్టండి, OUTPUT లో ప్రతిస్పందన ప్యాకెట్లపై దాన్ని కాపీ చేయండి, గుర్తించిన ప్యాకెట్లను భౌతిక గేట్వే వైపు చూపే పట్టిక ద్వారా రూట్ చేయండి.
iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234
iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321
ip route add default via 192.168.1.1 dev eth0 table 3412
ip rule add fwmark 4321 table 3412
పరీక్షిస్తున్నప్పుడు కనెక్షన్ గుర్తు, ఫైర్వాల్ గుర్తు మరియు పట్టిక సంఖ్యను వేరుగా ఉంచండి. రెండు పాత్రలకు ఒకే సంఖ్యను తిరిగి ఉపయోగించడం సరైనదిగా కనిపించే మరియు తప్పు ప్యాకెట్లను తాకే నియమాన్ని సృష్టిస్తుంది. పట్టిక డిఫాల్ట్ నమోదుకు సాధారణ Ethernet లింక్పై LAN గేట్వేతో పాటు via కూడా అవసరం; బేర్ dev eth0 ఇంటర్ఫేస్ పాయింట్-టు-పాయింట్ అయినప్పుడు లేదా తదుపరి హాప్ మరో విధంగా పరిష్కరించబడినప్పుడు మాత్రమే పనిచేస్తుంది. నివేదించబడిన Jessie హోస్ట్ బేర్ రూపం పనిచేసిన లింక్పై ఉంది, అది కాపీ చేయదగిన పంపిణీ నియమం కాదు.
బయటే లాక్ అవ్వకుండా ధృవీకరించండి
డిస్కనెక్ట్ చేసి పరీక్షించవద్దు. మొదటి సెషన్ను తెరిచి ఉంచండి, టన్నెల్ను పైకి తీసుకురండి, మీ సొంత చిరునామా ఏ మార్గం తీసుకుంటుందో కెర్నల్ను అడగండి:
ip route get 80.128.240.55
సమాధానం టన్నెల్ కాదు, భౌతిక ఇంటర్ఫేస్ మరియు పాత గేట్వేను పేర్కొనాలి. ఆపై రెండవ SSH కనెక్షన్ తెరవండి; అదే నిజమైన పరీక్ష, ఎందుకంటే పాత సెషన్ కొత్త కనెక్షన్ పునఃసృష్టించలేని స్థితిపై జీవించగలదు. రెండవది వేలాడుతూ మొదటిది ఇంకా సమాధానం ఇస్తుంటే, నియమం ముఖ్యమైన ట్రాఫిక్ను ఎప్పుడూ తాకలేదు, గుర్తులు లేదా మూల చిరునామాయే చూడాల్సిన స్థలం.
మొత్తం వ్యాయామం పాటు బ్యాండ్ వెలుపలి కన్సోల్ను అందుబాటులో ఉంచుకోండి. మీరు ఇప్పుడే విరిచిన టన్నెల్యే ఏకైక ప్రవేశ మార్గంగా ఉన్న సర్వర్ను ఆ టన్నెల్ ద్వారా సరిచేయలేరు, మీరు జోడించిన పట్టిక సంఖ్యలు మరియు ప్రిఫిక్స్లను రాసి పెట్టుకుంటే వెనక్కి తిప్పడం సులభం.