రెండు DNS పేర్లు, ఒక OpenVPN పోర్ట్: నిజంగా ఏది ఎంచుకుంటుంది
ఒకే చిరునామా వైపు చూపే రెండు హోస్ట్ పేర్లు ఇప్పటికీ ఒకే శ్రోతను చేరుకుంటాయి. క్లయింట్ పంపే ఒక ఫీల్డ్ మాత్రమే బ్యాకెండ్ను ఎంచుకోగలదు, మరియు సాధారణ OpenVPN ఏదీ పంపదు.
రెండు A రికార్డులు, ఒక చిరునామా, ఒక డీమన్: వినియోగదారు ఏ పేరు టైప్ చేసినా వచ్చే ప్యాకెట్ ఒకేలా ఉంటుంది, మరియు 1194 పోర్ట్కు బంధించబడిన ప్రక్రియకు రెండింటినీ వేరు చేయడానికి ఏమీ లేదు. ఇది సరిదిద్దడానికి ఎదురుచూస్తున్న తప్పు కాన్ఫిగరేషన్ కాదు; ఇది పేరు శోధన వ్యక్తపరచగల పరిమితి. రెండు OpenVPN ఇన్స్టాన్సుల మధ్య ఎంచుకునే ఏదైనా క్లయింట్ కనెక్షన్లో పెట్టే మరియు ముందు భాగం తిరిగి చదవగల విలువగా ఉండాలి, మరియు సాధారణ OpenVPN క్లయింట్ అలాంటి విలువను బహిరంగంగా పెట్టదు. తర్వాత వచ్చేది ఇది మిమ్మల్ని ఎక్కడ వదిలిస్తుంది, మరియు ఏ ఏర్పాట్లు ట్రాఫిక్ను నిజంగా విభజిస్తాయి అనేది.
పరిష్కర్త తిరిగి ఇచ్చేదానితో ప్రారంభించండి
క్లయింట్ vpn-a.example అడిగి చిరునామా పొందుతుంది; ఆ చిరునామా మరియు ఒక పోర్ట్ దాని డయల్ మొత్తం. పేరు శోధన సమయంలో స్థానికంగా ఖర్చవుతుంది మరియు ఎప్పుడూ వైర్పై ఫీల్డ్ కాదు, కాబట్టి ఆవలి వైపు శ్రోత ఏ లేబుల్ ఉపయోగించారో చూడలేదు. vpn-a.example మరియు vpn-b.example ఒకే హోస్ట్కు చూపండి, రెండు శోధనలు ఒకే గమ్యాన్ని ఇస్తాయి, అందుకే డీమన్ ఏ తేడానూ నమోదు చేయకుండా రెండు కనెక్షన్లను ఒకే ఇన్స్టాన్స్లో లీనం చేసుకుంటుంది. చిరునామా ఆధారిత ప్రొఫైల్లు కూడా అదే కారణంతో పేరు ఆధారిత ప్రొఫైల్లలాగే ప్రవర్తిస్తాయి.
ఇది ఆకర్షణీయమైన ప్రత్యామ్నాయ మార్గాల కుటుంబాన్ని కూడా మూసివేస్తుంది: అదనపు మారుపేర్లు, ఒకే సాకెట్పై ప్రతి పేరుకు సర్టిఫికెట్ ఎంచుకోవడం, లేదా అడిగిన పేరుకు జోడించిన ఫైర్వాల్ నియమం. వాటిలో ఏదీ మొదటి ప్యాకెట్ క్లయింట్ నుండి బయలుదేరకముందే పారేసిన సమాచారంపై పనిచేయలేదు. రెండు సర్వర్లు వేరుగానే ఉండాలంటే, విభజన కనెక్షన్తో పాటే ప్రయాణించాలి, అంటే చిరునామా, పోర్ట్, లేదా ప్రోటోకాల్ నిర్వచించే పేలోడ్ ఫీల్డ్.
గణనలోకి వచ్చే ఏకైక ఎంపికదారు ప్యాకెట్ లోపల వెళ్తుంది
HTTP దీన్ని Host హెడర్తో నిర్వహిస్తుంది, TLS ClientHelloలోని సర్వర్ పేరు పొడిగింపుతో, అలా ఒక చిరునామా ఒక శ్రోత వెనుక అనేక సైట్లకు సేవ చేస్తుంది. రెండూ పనిచేస్తాయి ఎందుకంటే వైర్ ప్రోటోకాల్ నిర్దిష్ట సేవ కోసం అభ్యర్థనను మోస్తుంది. OpenVPN గురించిన ముఖ్యమైన వాస్తవం ఏమిటంటే మధ్యవర్తి పెట్టె పరిశీలించే పొరలో ఈ రెండు ఫీల్డ్లలో ఏదీ లేదు.
సాధారణ ఏర్పాటులో నియంత్రణ ఛానెల్ను రక్షించే TLS హ్యాండ్షేక్ బయటి సెషన్ ఏర్పడిన తర్వాత జరుగుతుంది మరియు దాని లోపలే రవాణా అవుతుంది, కాబట్టి ఆ సెషన్ను ముగించని శ్రోత అపారదర్శక ప్రవాహాన్ని చూస్తుంది. ఇది ఇప్పటికీ OpenVPN అని చెప్పగలదు, ఎందుకంటే ప్రారంభ బైట్లలోని ఆప్కోడ్ మరియు ఫ్రేమింగ్ గుర్తించదగినవి, కానీ సర్వర్ పేరు ఉంటే అది ఎన్క్రిప్ట్ చేసిన భాగంలో కూర్చుంది. బయటి ప్యాకెట్ నుండి వర్చువల్ హోస్ట్ను చదవాలని ఆశించే రూపకల్పన ప్రోటోకాల్ ఎప్పుడూ అక్కడ రాయని ఫీల్డ్ను చదువుతోంది. ఇది టన్నెల్ ఎలా నిర్మించబడింది అనే దాని నుండి వస్తుంది, మరింత తెలివైన నమూనా సరిపోలిక మూసివేయగల ఖాళీ నుండి కాదు.
ప్రోటోకాల్ విభజని ఎక్కడ ఆగుతుంది
sslh ప్రాజెక్ట్ నమోదు చేసే రకమైన మల్టీప్లెక్సర్ ఒక పోర్ట్పై వినిపిస్తుంది, ప్రారంభ బైట్లను పరిశీలిస్తుంది, మరియు గుర్తించిన ప్రోటోకాల్ మాట్లాడే ఏ బ్యాకెండ్కైనా కనెక్షన్ను అప్పగిస్తుంది. ఒకే పోర్ట్ SSH, HTTPS మరియు OpenVPNకు కలిసి సేవ చేయాల్సినప్పుడు ఇది నిజమైన విలువ.
sslh ప్రతి ప్రోటోకాల్కు వేరే పరిశోధనను ఉంచుతుంది, దాని TLS పరిశోధన నిజమైన ClientHello నుండి సర్వర్ పేరు లేదా ALPN విలువను బయటకు తీయగలదు. సాధారణ OpenVPNను గుర్తించడం TLS పొడిగింపును చదవడం కంటే భిన్నమైన వర్గీకరణ, రెండూ కలిసి పోవు, ఎందుకంటే వినిపించే సాకెట్కు ఎప్పుడూ ClientHello పంపని క్లయింట్ పరిశోధనను చదవడానికి ఏమీ లేకుండా వదిలేస్తుంది. కాబట్టి OpenVPNతో సరిపోలే నియమం “ఇది OpenVPN క్లయింట్” అని సమాధానమిచ్చి ముందుకు పోదు. ఆ నియమం వెనుక ఉన్న రెండు OpenVPN బ్యాకెండ్లను వేరు చేయలేము, ముందు భాగానికి ఎంపికకు ఆధారం లేదు, మరియు ప్రతి సెషన్ ఒకే చోట దిగుతుంది. మల్టీప్లెక్సింగ్ ఒక పోర్ట్ను వేర్వేరు సేవల మధ్య పంచుతుంది; ఒక సేవ లోపల వర్చువల్ హోస్టింగ్ చేయదు.
రెండు సర్వర్లను నిజంగా వేరు చేసే ఏర్పాట్లు
అతి చవకైన నిజాయితీ విభజన రెండవ పబ్లిక్ చిరునామా, ప్రతి ఇన్స్టాన్స్కు ఒకటి, మరియు ఇప్పటికే ఉన్న ప్రొఫైల్లు అవసరమైనది ఇప్పటికే మోస్తున్నాయి ఎందుకంటే అవి వేర్వేరు చిరునామాలకు చూపుతాయి. తదుపరిది అదే చిరునామాపై వేరే పోర్ట్, అది ప్రతి ప్రొఫైల్లో ఒక సంఖ్య తప్ప ఏమీ ఖర్చు చేయదు. TCP మరియు UDP వేర్వేరు పోర్ట్ పట్టికలను ఉంచుతాయి, కాబట్టి 1194/tcp మరియు 1194/udp సంబంధం లేని సాకెట్లు మరియు ప్రతి ఒకటి నుండి ఒకటి ఒకే హోస్ట్పై కలిసి ఉండగలదు; ఇది పేరు-మార్గనిర్దేశం కాదు, రవాణా విభజన, మరియు దానితో తరచుగా గందరగోళం చెందుతారు. రెండు ఎంపికలు ఫైర్వాల్ సమీక్షను దాటుతాయి, ఎందుకంటే నియమం ప్యాకెట్లో నిజంగా ఉన్న దానితో సరిపోతుంది.
మీకు అవసరమైన సరిహద్దు రెండు అమలుల మధ్య కాకుండా వినియోగదారు సమూహాల మధ్య నడిస్తే, వేర్వేరు క్లయింట్ కాన్ఫిగరేషన్లు, దాని స్వంత సర్టిఫికెట్ నిర్వహణ మరియు స్పష్టమైన ప్రవేశ విధానం ఉన్న ఒక ఇన్స్టాన్స్ దాన్ని కవర్ చేయగలదు. అది సర్వర్ లోపల విధానాన్ని కొంటుంది, సర్వర్ల మధ్య వేరుపాటు కాదు, మరియు రెండూ వేర్వేరు అవసరాలు. రాజీ కింద నిలబడాల్సిన వేరుపాటుకు ఇప్పటికీ చిరునామా లేదా ఫైర్వాల్ అంచు కావాలి.
OpenVPN ముందు ఉంచిన TLS ముగింపు సమర్థవంతమైన ముందు భాగానికి నిజమైన సర్వర్ పేరును బయటపెట్టగలదు, కానీ క్లయింట్ వైపు కూడా ఆ అదనపు పొరకు కాన్ఫిగర్ చేయబడి ఉంటే మాత్రమే. ఇప్పటికే ఉన్న ప్రొఫైల్లు అదే చిరునామాకు చూపించడం ద్వారా ఆ ప్రవర్తనను పొందవు.
నిర్మించే ముందు ఎంపికదారును నిరూపించండి
బ్యాకెండ్ను గుర్తించే ఫీల్డ్కు పేరు పెట్టండి, తర్వాత క్లయింట్ నిజంగా దాన్ని పంపుతుందా అని నిర్ధారించండి; సమాధానం చిరునామా అయితే ప్రణాళిక నిలబడుతుంది, అది శ్రోతను ఎప్పటికీ చేరని హ్యాండ్షేక్ లోపలి సర్వర్ పేరు అయితే, ఏ DNS పనీ దాన్ని కాపాడదు. మూడు ఆదేశాలు వినిపించే వైపును త్వరగా నిర్ణయిస్తాయి.
ss -lntup | grep -E ':443|:1194'
openssl s_client -connect vpn-a.example:443 -servername vpn-a.example </dev/null | head -n 20
journalctl -u openvpn-server@server-a -n 20 --no-pager
openssl పంక్తి ఆ చిరునామాపై ఏదో TLS ముగించే చోట మాత్రమే సర్టిఫికెట్ ఇస్తుంది; సాధారణ OpenVPN శ్రోత ఎదుట అది నిలిచిపోతుంది లేదా విఫలమవుతుంది, అదే బయటి పొర ఏమి బయటపెడుతుందో సమాధానం. journal పంక్తి, ప్రతి బ్యాకెండ్లో చదివినప్పుడు, ఏ ఇన్స్టాన్స్ సెషన్ను అంగీకరించిందో చూపుతుంది. ముందు భాగం లాగ్లు వర్గీకరించినది రాస్తాయి, ఉద్దేశించినది ఎప్పుడూ రాస్తాయి కావు, కాబట్టి వినియోగదారు ఎక్కడ దిగాడో అనే దానికి బ్యాకెండే ఏకైక అధికారం.
వేర్వేరు సర్వర్లను చేరుకోవడానికి ఉద్దేశించిన రెండు ప్రొఫైల్లతో ముగించండి, వాటిని ఒక్కొక్కటిగా కనెక్ట్ చేసి ప్రతిదానికి బ్యాకెండ్ లాగ్ను గుర్తించండి. రెండు సెషన్లు ఒకే journalలో కనిపిస్తే, ఎంపికదారు తప్పుగా కాన్ఫిగర్ చేయబడలేదు, లేదు, మరియు పరిష్కారం క్లయింట్ లక్ష్యంగా పెట్టుకోగల చిరునామా లేదా పోర్ట్. మార్గనిర్దేశన నియమాన్ని సవరించడం సహాయపడదు, ఎందుకంటే నియమానికి ఎప్పుడూ మార్గనిర్దేశనం చేయడానికి ఏమీ ఇవ్వలేదు. విభజన నిజమైన తర్వాత, తదుపరి వ్యక్తి రెండవ మారుపేరును జోడించి అది పని చేస్తుందని ఆశించకుండా ఉండేలా దాన్ని ప్రొఫైల్ల పక్కన రాయండి.