OpenVPN ఆధారాలు ఫైల్ లేదా నిర్వహణ సాకెట్: ఏది స్క్రిప్ట్ చేయాలి
auth-user-pass ఖాతా ప్రాంప్ట్ను నిర్వహిస్తుంది; నిర్వహణ సాకెట్ నాలుగింటినీ నిర్వహిస్తుంది. ఎక్స్పోజర్, స్క్రిప్ట్ ఖర్చు మరియు సేవలో ప్రతి ఒక్కటి ఎలా విఫలమవుతుందో పోల్చండి.
OpenVPN ను ప్రారంభించి ఎప్పటికీ కనెక్ట్ కాని స్క్రిప్ట్ సాధారణంగా నెట్వర్క్ సమస్య కాదు: క్లయింట్ టెర్మినల్ లేని ప్రాంప్ట్ ముందు కూర్చొని ఉంది. OpenVPN కు మనిషి లేకుండా ఆ ప్రాంప్ట్కు సమాధానం ఇచ్చే సరిగ్గా రెండు మద్దతు ఉన్న మార్గాలు ఉన్నాయి, auth-user-pass వెనుక ఉన్న ఆధారాల ఫైల్ మరియు నిర్వహణ సాకెట్, అవి ఒకదానికొకటి మార్చుకోలేనివి. ఫైల్ ఒక సూచనకు ఖర్చు చేసి ఒక ప్రాంప్ట్కు సమాధానం ఇస్తుంది; సాకెట్ ప్రతి ప్రాంప్ట్కు సమాధానం ఇస్తుంది మరియు loopback పోర్ట్ తెరవగల ఏదైనా ధృవీకరణ లేని నియంత్రణ ఛానెల్ను ఇస్తుంది. మీ అమరికకు ఏది సరిపోతుంది అనేది వాస్తవంగా ఏ ప్రాంప్ట్ నిరోధిస్తోంది, ఏ రహస్యాన్ని ప్రశాంతంగా వదిలేయగలరు అనే దానిపై ఆధారపడి ఉంటుంది.
యంత్రాంగాన్ని ఎంచుకునే ముందు ప్రాంప్ట్కు పేరు పెట్టండి
నాలుగు ప్రాంప్ట్లు టెర్మినల్లో ఒకేలా కనిపిస్తాయి. ఖాతా జంట సర్వర్ యొక్క PAM లేదా auth-user-pass-verify సెట్టింగ్ నుండి వస్తుంది, దానికి auth-user-pass సమాధానం ఇస్తుంది. ప్రైవేట్ కీ పాస్ఫ్రేజ్ కీ ఫైల్కు చెందుతుంది, --askpass ద్వారా చదవబడుతుంది లేదా చేతితో టైప్ చేయబడుతుంది. PKCS#12 బండిల్ దాని స్వంత పాస్వర్డ్ను అడుగుతుంది. ప్రాక్సీ ప్రామాణీకరణ ఖాతా ఆధారాలను కాదు, --http-proxy తీసుకునే auth ఫైల్ను ఉపయోగిస్తుంది.
OpenVPN systemd, PHP లేదా Node యొక్క సంతానంగా నడిచినప్పుడు టెర్మినల్ ఉండదు, కాబట్టి వీటిలో ఏదైనా నిశ్శబ్దంగా నిరోధిస్తుంది. ప్రక్రియ అక్కడే కూర్చొని ఉంటుంది, సైఫర్ లైన్ తర్వాత లాగ్ ఆగిపోతుంది, యూనిట్ చివరికి సమయం మించిపోతుంది; ఏ ప్రాంప్ట్ వేచి ఉందో చూడకుండా ప్రజలు పునఃప్రయత్న లూప్ లేదా sleep జోడించడానికి కారణం ఆ నిశ్శబ్దమే. నాలుగింటికీ నిర్వహణ సాకెట్ మాత్రమే సమాధానం ఇవ్వగలదు. ఆధారాల ఫైల్ మొదటి దానికి సమాధానం ఇస్తుంది, మరేదానికీ కాదు.
auth-user-pass: ఒక ఫైల్, ఒక ప్రాంప్ట్
ఫైల్ మొదటి వరుసలో వినియోగదారు పేరును, రెండవ వరుసలో పాస్వర్డ్ను ఉంచుతుంది, మరేమీ లేదు: కోట్లు లేవు, కీ పేర్లు లేవు, వ్యాఖ్య లేదు. మోడ్ 600 సెట్ చేసి openvpn నడిపే ఖాతాను యజమానిగా చేయండి, ఇది సేవకు తరచుగా మీ లాగిన్ కాదు, ప్రత్యేక వినియోగదారు. /root క్రింద root యాజమాన్యంలోని ఫైల్ మీ షెల్లో పనిచేసే ఆదేశానికి, బూట్లో విఫలమయ్యే యూనిట్కు మధ్య తేడా.
రెండు వివరాలు సరైన ఫైల్ను ప్రాంప్ట్గా మారుస్తాయి. CRLF సేవ్ చేసే ఎడిటర్ పాస్వర్డ్కు అతుక్కున్న క్యారేజ్ రిటర్న్ను వదిలిస్తుంది, కాబట్టి ఫైల్లో సరైనదిగా కనిపించే పాస్వర్డ్ను సర్వర్ తిరస్కరిస్తుంది; కంటితో కాదు, cat -A లేదా od -c తో తనిఖీ చేయండి. మరియు ప్రొఫైల్ లోపల ఆర్గ్యుమెంట్ లేని auth-user-pass డిజైన్ ప్రకారం «వినియోగదారుని అడగండి» అని అర్థం, దాన్ని కమాండ్ లైన్లోని రెండవ సూచన అధిగమించకపోవచ్చు, ఎందుకంటే ప్రొఫైల్ అది ఉన్న చోటే విశ్లేషించబడుతుంది.
ఎంపికల క్రమం మూడవ ఉచ్చు, అది వెర్షన్పై ఆధారపడి ఉంటుంది. కొన్ని OpenVPN 2.4 బిల్డ్లు --config ముందు వచ్చినప్పుడు --auth-user-pass ను విస్మరిస్తాయి, కాబట్టి అదే రెండు ఎంపికలు వేరే క్రమంలో కనెక్ట్ అవుతాయి. సూచనను ప్రొఫైల్ లోపల లేదా కమాండ్ లైన్లో --config తర్వాత ఉంచండి, మరేదైనా మార్చే ముందు ప్రొఫైల్లో ప్రతి సంభవాన్ని grep చేయండి.
auth-nocache ఈ యంత్రాంగానికి చెందినది కానీ ఏమీ అందించదు. క్లయింట్ ఆధారాలను మెమరీలో ఎంత కాలం ఉంచుతుందో పరిమితం చేస్తుంది, ఇది క్రాష్ తర్వాత సహాయపడుతుంది, ఫైల్ లేనప్పుడు అస్సలు సహాయపడదు. సర్వర్ వైపు సెషన్ టైమ్అవుట్ తర్వాత తిరిగి కనెక్ట్ అవ్వడం ఫైల్ను మళ్లీ చదువుతుంది, కాబట్టి బూట్లో పనిచేసిన ఆధారాలు రోజు మధ్యలో కూడా గడువు ముగియవచ్చు.
నిర్వహణ సాకెట్: ప్రతి ప్రాంప్ట్, ఎక్కువ ఉపరితలం
క్లయింట్ను లిజనర్తో ప్రారంభించి, ప్రాంప్ట్లు దానిపై నివేదించబడతాయని స్పష్టంగా ప్రకటించండి, OpenVPN 2.6 మాన్యువల్లో నమోదైన సూచనలను ఉపయోగించి:
management 127.0.0.1 3030
management-query-passwords
bash నుండి కనెక్షన్ను అదనపు ఫైల్ డెస్క్రిప్టర్పై ఉంచి, స్థానానికి బదులు ప్రాంప్ట్ పేరుతో సమాధానం ఇవ్వండి, ఎందుకంటే తిరిగి కనెక్ట్ అవ్వడం వేరే క్రమంలో అడగవచ్చు:
exec 3<>/dev/tcp/127.0.0.1/3030
while read -r -u 3 line; do
case "$line" in
*"Need 'Auth' username/password"*)
echo 'username "Auth" alice' >&3
echo 'password "Auth" secret' >&3 ;;
*"Need 'Private Key' password"*)
echo 'password "Private Key" secret' >&3 ;;
esac
done
సరిహద్దు రవాణా. నిర్వహణ ప్రోటోకాల్ loopback పై TCP మీద సాధారణ పాఠ్యం, కాబట్టి దూర నియంత్రకం చేరుకోవడానికి లిజనర్ను LAN లేదా సొరంగ చిరునామాలో ప్రచురించకూడదు; దూర నియంత్రకం అంటే SSH ఫార్వర్డింగ్, విస్తృత బైండ్ కాదు. సంఘం డీమన్ ఒకసారి ఒకే నిర్వహణ క్లయింట్ను అంగీకరిస్తుంది, కాబట్టి GUI లేదా మానిటర్ మీ స్క్రిప్ట్తో సాకెట్ను పంచుకోలేవు. రెండవ కనెక్షన్ క్యూలో పెట్టకుండా తిరస్కరించబడుతుంది, వైఫల్యం చెవుడు పట్టిన స్క్రిప్ట్లా కనిపిస్తుంది.
ఆ సాకెట్ నియంత్రణ ఛానెల్ కూడా. నిర్వహణ పాస్వర్డ్ లేకుండా 127.0.0.1:3030 కు కనెక్ట్ అవ్వగల ఏదైనా స్థితిని చదవగలదు, సొరంగాన్ని చంపగలదు లేదా తానే ప్రాంప్ట్కు సమాధానం ఇవ్వగలదు. నిర్వహణ పాస్వర్డ్ మరియు ఆధారాల ఫైల్ ఒకే తరగతి రహస్యాలు, రెండూ ఒకే శ్రద్ధకు అర్హమైనవి.
అమరికకు ఏది సరిపోతుంది
ఏకైక ప్రాంప్ట్ ఖాతా జంట అయినప్పుడు, క్లయింట్ స్థిరమైన యజమానితో సేవగా నడిచినప్పుడు, మీరు నియంత్రించని బ్యాకప్లకు బయట 600 ఫైల్ను ఉంచగలిగినప్పుడు ఆధారాల ఫైల్ను ఎంచుకోండి. కీ పాస్ఫ్రేజ్ లేదా PKCS#12 పాస్వర్డ్ పాల్గొన్నప్పుడు, రేపర్ ఇప్పటికే ప్రక్రియను పర్యవేక్షిస్తున్నప్పుడు, లేదా తిరిగి కనెక్ట్ అవ్వడాన్ని డీబగ్ చేస్తున్నప్పుడు స్థితిని మరియు ప్రాంప్ట్లను చూడాల్సినప్పుడు నిర్వహణ సాకెట్ను ఎంచుకోండి.
రెండు షరతులు నిర్ణయాన్ని కదిలిస్తాయి. రేపర్ /bin/sh అయితే, బైనరీని నేరుగా పిలిచే systemd యూనిట్ అయితే, లేదా కనీస కంటైనర్ అయితే, bash-కు మాత్రమే సాకెట్ జిగురు అందుబాటులో ఉండదు, ఫైల్ చవకైన సమాధానం. రహస్యం తరచుగా తిరుగుతూ ఉంటే, ఏ ఫైల్ దానికి మంచి ఇల్లు కాదు: చిన్న రేపర్ నుండి కీరింగ్ అడగండి, యూనిట్ రేపర్ను పిలవనివ్వండి, ఇది భ్రమణాన్ని ఒకే చోట ఉంచి పాస్వర్డ్ను షెల్ చరిత్రకు బయట ఉంచుతుంది.
ప్రక్రియ భర్తీ రెండింటి మధ్య ఉంది, ఏదానికీ చెందదు. క్రింది ఒక-లైన్ పనిచేస్తుంది ఎందుకంటే bash దాన్ని openvpn ప్రారంభం కాకముందే విస్తరిస్తుంది, క్లయింట్ వాక్యనిర్మాణాన్ని అర్థం చేసుకోవడం వల్ల కాదు:
openvpn --config client.ovpn --auth-user-pass <(printf "%s
%s
" "$USER" "$PASS")
ఇది /bin/sh క్రింద, షెల్ను దాటవేసే యూనిట్లో, మరియు bash లేదా /dev/fd లేని ఇమేజ్లలో విరిగిపోతుంది. దీన్ని ఇంటరాక్టివ్ పరీక్షల కోసం ఉంచండి, సేవ ఆధారపడే ఒప్పందంగా ఎప్పుడూ కాదు.
రహస్యాన్ని రక్షించి, తర్వాత లాగ్ నుండి ధృవీకరించండి
రెండు యంత్రాంగాలు OpenVPN ప్రక్రియ చదవగల రహస్యాన్ని వదిలిస్తాయి. పాస్వర్డ్ను ఎప్పుడూ కమాండ్ లైన్లో లేదా యూనిట్ ఫైల్లో పెట్టకండి, అక్కడ ps మరియు systemctl దాన్ని ప్రతి స్థానిక వినియోగదారుకు చూపిస్తాయి; ఫైల్కు మార్గాన్ని ఇవ్వండి, లోపలి విలువను కాదు. సర్టిఫికెట్లు ఖాతా జంటను భర్తీ చేయగల చోట, అది ప్రాంప్ట్ వర్గాన్ని దాచడం బదులు తొలగిస్తుంది.
సరైన నడక ప్రాంప్ట్ క్రమం పూర్తవడాన్ని, సెషన్ «Initialization Sequence Completed» చేరుకోవడాన్ని చూపిస్తుంది. క్లయింట్ అదే ప్రాంప్ట్ వద్ద ఆగితే సరిపోలిక విఫలమైంది: సాకెట్ పంపిన ఖచ్చితమైన పంక్తులను ముద్రించండి, కోట్లు మరియు ప్రాంప్ట్ పేరును తనిఖీ చేసి, sleep జోడించడం బదులు నమూనాను సరిచేయండి. విజయాన్ని నివేదించి ఏమీ మోసుకుపోని సొరంగం రూటింగ్ లేదా push సమస్య, ఆధారాల సమస్య కాదు.
తర్వాత మొదటి ప్రారంభం మాత్రమే కాదు, తిరిగి కనెక్ట్ అవ్వడాన్ని కూడా పరీక్షించండి. సర్వర్ వైపు సెషన్ను వదిలేయండి లేదా దాని టైమ్అవుట్ ముగిసే వరకు వేచి ఉండండి; క్లయింట్ మళ్లీ అడుగుతుంది, అక్కడే బూట్లో సరైనదిగా కనిపించిన ఫైల్ తిరిగి కనెక్ట్ అయ్యే ఖాతాకు ఇంకా చదవగలిగేదా అని చూపిస్తుంది.