మూడు Linux హోస్ట్లు, ఒక రూపకల్పన: బహిరంగంగా చేరుకోగల OpenVPN హబ్, ఒక ల్యాప్టాప్ మరియు లోపలికి ఏమీ ఫార్వర్డ్ చేయని సాధారణ హోమ్ రౌటర్ వెనుక ఉన్న నిష్క్రమణ యంత్రం. నిష్క్రమణ తానే హబ్కు డయల్ చేస్తుంది. ఆ తర్వాత వినియోగదారు ఇంటర్నెట్ ట్రాఫిక్ ల్యాప్టాప్లో సొరంగంలోకి ప్రవేశించి నిష్క్రమణ సొంత పైకి లింక్ ద్వారా బయటకు వెళ్తుంది. ఈ ఏర్పాటులో ఆశ్చర్యకరమైనదంతా ఒక వివరం నుండి వస్తుంది: కనెక్షన్ను నిష్క్రమణే ప్రారంభించింది, కాబట్టి లోపలికి మార్గం ఇప్పటికే ఉంది మరియు దాన్ని సృష్టించడానికి పోర్ట్ ఫార్వర్డింగ్ అవసరం లేదు.

కింది వివరణ కాన్ఫిగరేషన్ క్రమాన్ని కాదు, ప్యాకెట్ మార్గాన్ని అనుసరిస్తుంది, ఎందుకంటే ఏ భాగం ఏ నిర్ణయం తీసుకుంటుందో తెలిసిన తర్వాతే కాన్ఫిగరేషన్కు అర్థం ఉంటుంది. ప్రతి పొర సరిగ్గా ఒక నిర్ణయం తీసుకుంటుంది, రెండు పొరలను ఒకటిగా భావించే చోట తప్పులు పోగవుతాయి.

రెండు రవాణా సెషన్లు, ఒక అంతర్గత మార్గం

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

outer: consumer --TLS--> hub
outer: exit     --TLS--> hub
inner: consumer --tun--> hub --internal--> exit --tun--> uplink

రెండు బాహ్య కనెక్షన్లు క్లయింట్ వైపు నుండి బయటకు వెళ్తాయి కాబట్టి, నిష్క్రమణ రౌటర్ ఎప్పుడూ ఇన్బౌండ్ SYN చూడదు మరియు ఎప్పుడూ గమ్యస్థాన NAT నియమం అవసరం పడదు. స్థాపించిన రవాణాను సజీవంగా ఉంచాల్సి ఉంటుంది, ఏ పొడవైన కనెక్షన్కైనా అది ఇప్పటికే చేస్తుంది. పబ్లిక్ ఇంటర్నెట్లో ఏదీ మొదట నిష్క్రమణను చేరుకోవాల్సిన అవసరం లేదు, అందుకే ఆ పైకి లింక్పై డైనమిక్ చిరునామా సమస్య కాదు. రౌటర్ బయటకు వెళ్లే సెషన్ను అనుమతించాలి, కానీ అది బ్రౌజర్ ఇప్పటికే ఉపయోగించే అదే అనుమతి.

iroute సర్వర్ లోపల నిజంగా ఏమి ఇన్స్టాల్ చేస్తుంది

ఏ తోటి ఏ గమ్యస్థానాన్ని కలిగి ఉందో నిర్ణయించే ఏకైక పరికరం హబ్, ఆ నిర్ణయాన్ని అది కర్నెల్లో కాదు, తన సొంత వినియోగదారు స్థల రూటింగ్ పట్టికలో తీసుకుంటుంది. నిష్క్రమణ కోసం exit-node అనే client-config-dir నమోదు అక్కడ డిఫాల్ట్ ప్రిఫిక్స్ను కోరవచ్చు:

# /etc/openvpn/server/ccd/exit-node
iroute 0.0.0.0 0.0.0.0

ఆ పంక్తి సర్వర్ ప్రాసెస్కు "ఏ గమ్యస్థానమైనా ఉన్న అంతర్గత ప్యాకెట్లు ఈ క్లయింట్వి" అని చెబుతుంది. అది హబ్ ఆపరేటింగ్ సిస్టమ్కు డిఫాల్ట్ మార్గాన్ని జోడించదు మరియు హబ్ను ఇంటర్నెట్ గేట్వేగా మార్చదు. OpenVPN 2.6 సూచన క్లయింట్-నిర్దిష్ట అంతర్గత రూటింగ్ మరియు కర్నెల్ రూటింగ్ను ప్రత్యేక యంత్రాంగాలుగా ఉంచుతుంది, ఈ విభజన వల్లనే ఈ రూపకల్పన హబ్ డిఫాల్ట్ మార్గాన్ని తాకకుండా పనిచేస్తుంది.

వినియోగదారుకు అద్దం సూచన అవసరం, pushగా అందించబడుతుంది, తద్వారా వారి సొంత ట్రాఫిక్ స్థానిక గేట్వే ద్వారా బయటకు వెళ్లకుండా సొరంగంలోకి ప్రవేశిస్తుంది. సబ్నెట్ టోపాలజీలో పూల్ నిష్క్రమణ tun పరికరంలో అనుసంధానించిన మార్గం, కాబట్టి తిరిగి వచ్చే దిశకు అదనపు push అవసరం లేదు; నిష్క్రమణ పొందకూడనిది కింది మళ్లింపు, అది తన పైకి ట్రాఫిక్ను తాను ఉపయోగించాలని ప్రయత్నిస్తున్న సొరంగంలోకి తిరిగి పంపుతుంది. దాన్ని వినియోగదారుకు మాత్రమే పంపండి మరియు CCD ఫైల్ ఎంపికైందని నమ్మడం బదులు క్లయింట్పై వర్తింపజేసిన మార్గాలను చదవండి.

# /etc/openvpn/server/ccd/consumer-01
push "redirect-gateway def1"

ఫార్వర్డింగ్ చేసేది నిష్క్రమణ కర్నెల్

నిష్క్రమణ లోపల వినియోగదారు నుండి ప్యాకెట్ tun ఇంటర్ఫేస్పై ఏదో ఇంటర్నెట్ హోస్ట్ చిరునామాకు వస్తుంది. కర్నెల్ తన రూటింగ్ పట్టికను చూసి, ఉత్తమ సరిపోలికగా నిజమైన పైకి లింక్ను కనుగొని, తర్వాత రెండు స్వతంత్ర విధానాలను వర్తింపజేస్తుంది: ఈ ప్యాకెట్ అసలు ఫార్వర్డ్ చేయవచ్చా, మరియు ఆ మూల చిరునామాతో ఆ ఇంటర్ఫేస్ నుండి బయటకు వెళ్లవచ్చా. ఫార్వర్డింగ్ ఒక sysctl, అనేక పంపిణీలలో డిఫాల్ట్గా ఆఫ్ ఉంటుంది.

కాబట్టి నిష్క్రమణకు నిరంతరం ఆన్ చేయబడిన IPv4 ఫార్వర్డింగ్, వినియోగదారు సొరంగ మూలాలను పైకి లింక్ వైపు అనుమతించే నియమం మరియు tun ద్వారా తిరిగి వచ్చే సమాధాన మార్గం అవసరం. మొత్తం హోస్ట్కు ఫార్వర్డింగ్ ఆన్ చేయడం దాని ద్వారా రూట్ అయ్యే మిగతా అన్నింటి ప్రవర్తనను కూడా మారుస్తుంది, కాబట్టి నియమం అన్నింటినీ అంగీకరించడం బదులు మూలాలు మరియు ఇంటర్ఫేస్లను పేర్కొనాలి.

తిరిగి వచ్చే మార్గాన్ని మూల అనువాదం కొంటుంది

ఇంటర్నెట్ హోస్ట్కు 10.90.0.x చిరునామాకు ఎలాంటి మార్గం లేదు, కాబట్టి సమాధానాలు నిష్క్రమణను చేరుకునే ముందే తిరస్కరించబడతాయి. ప్యాకెట్ పైకి లింక్ను విడిచిపెట్టినప్పుడు మూలాన్ని తిరిగి రాయడం దాన్ని పరిష్కరిస్తుంది, కనెక్షన్ ట్రాకింగ్ తిరిగి వచ్చేటప్పుడు ఆ పునర్లేఖనాన్ని తిప్పికొడుతుంది.

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 10.90.0.0/24 -o enp1s0 -j MASQUERADE
ip -4 route get 10.90.0.9   # run on the exit: must point at the tun

పైనున్న నియమం ఒక పైకి ఇంటర్ఫేస్ కోసం ప్రారంభ బిందువు, ఫైర్వాల్ విధానం కాదు. మూలాన్ని మీరు నిజంగా అధికారం ఇచ్చిన కేటాయింపులకు పరిమితం చేయండి, నిష్క్రమణ సొంత ఇన్పుట్ విధానాన్ని వేరుగా ఉంచండి, తద్వారా సొరంగ ట్రాఫిక్ కోసం మస్కరేడింగ్ స్థానిక సేవలను నిశ్శబ్దంగా బహిర్గతం చేయదు. డైనమిక్ పైకి చిరునామా ఉన్న హోస్ట్లో మస్కరేడ్ చిరునామాన్ని చేతితో ట్రాక్ చేయడం నుండి కూడా మిమ్మల్ని కాపాడుతుంది.

హబ్ ఎక్కడ అమలు చేయగలదు, ఎక్కడ చేయలేదు

client-to-client మరియు సాంప్రదాయ వినియోగదారు స్థల డేటా మార్గంతో హబ్ సర్వర్ ప్రాసెస్ లోపలే తోటివారి మధ్య అంతర్గత ప్యాకెట్లను అందజేస్తుంది. అవి ఎప్పుడూ హబ్ కర్నెల్ FORWARD గొలుసు ద్వారా వెళ్లవు, కాబట్టి అక్కడి కర్నెల్ నియమం ఎంత జాగ్రత్తగా రాసినా తోటివారి మధ్య ప్రయాణాన్ని పరిమితం చేయలేదు. అమలు సర్వర్ సొంత విధానంలోనే ఉండాలి: ఎవరు కనెక్ట్ కావచ్చు, ఏ CCD ఫైల్ పొందుతారు, నిష్క్రమణ డిఫాల్ట్ యాజమాన్యం అసలు ఇవ్వబడుతుందా.

అందుకే డిఫాల్ట్ iroute విస్తృత విశ్వాస నిర్ణయం. నిష్క్రమణ ఏకపక్ష ఇంటర్నెట్ చిరునామాల నుండి తిరిగి వచ్చే ట్రాఫిక్ను చట్టబద్ధంగా అంగీకరించాలి, మరియు అది మీరు నియంత్రించే, ప్యాచ్ చేసే, పర్యవేక్షించే యంత్రం అయి ఉండాలి. అదే యాజమాన్యాన్ని మీరు రౌటర్ అప్పగించని తోటికి ఇవ్వడం ఈ రూపకల్పన ఆహ్వానించే తప్పు.

సభ్యత్వమే నిజమైన నియంత్రణ. తన సొంత మార్గాలను కాన్ఫిగర్ చేయగల ఏ క్లయింట్ అయినా నిష్క్రమణను ఉపయోగించడానికి ప్రయత్నించవచ్చు, కాబట్టి ఎవరు కనెక్ట్ కావచ్చు లేదా నిష్క్రమణ ఏ తోటివారికి సేవ చేస్తుంది అనేది పరిమితం చేయడం రూపకల్పనలో భాగం, తర్వాతి ఆలోచన కాదు.

నిష్క్రమణ కనుమరుగైనప్పుడు సురక్షితంగా విఫలం కావడం

నిష్క్రమణను ఆఫ్లైన్ చేయండి, అంతర్గత డిఫాల్ట్ యాజమాన్యం దాని సెషన్తో పాటు కనుమరుగవుతుంది. జరగకూడనిది ఏమిటంటే హబ్ నిశ్శబ్దంగా ప్రత్యామ్నాయ నిష్క్రమణగా మారడం: VPN పూల్ నుండి హబ్ పైకి లింక్కు ఎలాంటి డిఫాల్ట్ మార్గం లేదు, హబ్పై అదే ట్రాఫిక్ను సంతోషంగా ఫార్వర్డ్ చేసే విస్తృత మస్కరేడ్ నియమం లేదు. ఆ వైఫల్యాన్ని ఉద్దేశపూర్వకంగా పరీక్షించండి, తర్వాత ఇప్పటికే తెరిచిన పేజీకి బదులు కొత్త ప్రవాహంతో పునరుద్ధరణను పరీక్షించండి.

# on the consumer, with the exit up and then down
ip -4 route get 1.1.1.1
curl -sS -o /dev/null -w '%{http_code}\n' https://example.com

నిష్క్రమణ వెళ్లిన తర్వాత కూడా వినియోగదారు ట్రాఫిక్ ఇంటర్నెట్ను చేరుకుంటే, వేరే ఏదో దాన్ని మోస్తోంది మరియు మీరు ఉద్దేశించిన సరిహద్దు లేదు. DNS మరియు IPv6 లను కూడా ప్రత్యేక నిర్ణయాలుగా పరిగణించండి: IPv4 మార్గం మరియు మస్కరేడ్ AAAA ట్రాఫిక్ గురించి ఏమీ చెప్పవు, హబ్ నెట్టిన రిజాల్వర్ ప్రశ్న నిజంగా ఎక్కడి నుండి బయటకు వెళ్తుందో అక్కడి నుండే సమాధానం ఇస్తుంది.

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