DNS రీడైరెక్ట్ తర్వాత dnsmasq ప్రశ్నలు VPN నుండి బయటికి వెళ్లడం ఎందుకు
రౌటర్ వైపు REDIRECT ఒక LAN DNS ప్రశ్నను కొత్త రిజాల్వర్ సాకెట్గా మారుస్తుంది. క్లయింట్ ప్రవాహంపై ఉన్న గుర్తులు అక్కడికి ఎప్పటికీ చేరవు, కాబట్టి అప్స్ట్రీమ్ నిష్క్రమణను నేరుగా సెట్ చేయండి.
LAN క్లయింట్ తన VPN-ను సరిగ్గా చేరుకుంటుంది, అయినా దాని DNS ప్రశ్నలు తప్పు పై లింక్పై కనిపిస్తాయి. ఇది సాధారణ అర్థంలో లీక్ కాదు; రౌటర్ ప్రశ్నను పంపడం ఆపి తానే దానికి సమాధానం ఇచ్చినప్పుడు ఇలా జరుగుతుంది. ఇంటర్సెప్షన్ గమ్యాన్ని స్థానిక సాకెట్కు తిరిగి రాస్తుంది, ఆపై రిజాల్వర్ తన స్వంత మూల చిరునామా మరియు తన స్వంత రూటింగ్ నిర్ణయంతో రెండవ, సంబంధం లేని సంభాషణను తెరుస్తుంది. క్లయింట్ ప్రవాహంపై వేసిన గుర్తులు మొదటి సంభాషణను వివరిస్తాయి మరియు రెండవ దాని గురించి ఏమీ చెప్పవు.
గుర్తు ప్రశ్నతో పాటు ప్రయాణించదు
ప్యాకెట్ గుర్తులు conntrack నమోదుపై మరియు ఎగురుతున్న ప్యాకెట్పై నివసిస్తాయి. ఒక REDIRECT నియమం ఆ ప్రయాణాన్ని ముగిస్తుంది: పేలోడ్ స్థానిక సాకెట్కు అప్పగించబడుతుంది, అసలు నమోదు తన పని చేసింది. ఆ తర్వాత రౌటర్ నుండి బయటికి వెళ్లేది రిజాల్వర్ ప్రక్రియ సృష్టించిన కొత్త సాకెట్, దాని మూలం రౌటర్ తన చిరునామానే.
అందుకే LAN క్లయింట్ చిరునామాపై కీలకం చేసిన పాలసీ మార్గం ఎప్పటికీ అప్స్ట్రీమ్ ప్రశ్నతో సరిపోలదు. కొత్త సాకెట్ క్లయింట్కు కాదు, dnsmasqకు చెందుతుంది, మరియు కెర్నల్ రౌటర్ సొంత ట్రాఫిక్ కోసం మార్గాన్ని అంచనా వేస్తుంది. మూల నియమాలు, ఇంటర్ఫేస్ నియమాలు మరియు గుర్తు నియమాలు అన్నీ వేరే tuple చూస్తాయి. గుర్తు వ్యాపిస్తుందని భావించడం ఈ సెటప్లో అత్యంత సాధారణ పొరపాటు, మరియు క్లయింట్ వైపు క్యాప్చర్లో అది కనిపించదు.
రెండు సంభాషణలు నిజంగా ఒక పేరు మరియు ఒక సమయాన్ని పంచుకుంటాయి, క్యాప్చర్ను త్వరగా చూసినప్పుడు అవి ఒకే ప్రవాహంలా కనిపించడానికి కారణం అదే.
ఎక్కడ ఫార్వార్డింగ్ స్థానిక పరిష్కారంగా మారుతుంది
53వ పోర్టు రీడైరెక్ట్ అవుతోందా, మరో హోస్ట్కు అనువదించబడుతోందా, లేదా యథాతథంగా ఉంచబడుతోందా అని కనుగొనడంతో ప్రారంభించండి, ఎందుకంటే మూడు సందర్భాలు వేర్వేరుగా ప్రవర్తిస్తాయి. స్థానిక పోర్టుకు రీడైరెక్ట్ ఫార్వార్డింగ్ను ముగిస్తుంది, మరో మెషీన్కు అనువాదం ప్యాకెట్ను కదలికలో ఉంచి క్లయింట్ tupleను అర్థవంతంగా ఉంచుతుంది.
రెండు ప్రోటోకాల్లను చూడండి. UDP మరియు TCP ద్వారా చేరగల రిజాల్వర్ రెండింటిపై పరీక్షించబడుతుంది, UDP మాత్రమే కవర్ చేసే నియమ సమూహం పెద్ద సమాధానాల కోసం నిశ్శబ్ద రంధ్రాన్ని వదిలిస్తుంది. రౌటర్ సొంత కాన్ఫిగరేషన్ మేనేజర్ సృష్టించే నియమాలు కూడా లెక్కించబడతాయి, సృష్టించిన ఫైల్ను సవరించడం సాధారణంగా తదుపరి రీలోడ్కు ఓడిపోతుంది.
sudo nft list ruleset | grep -n -B2 -A4 'dport 53'
sudo iptables -t nat -L -n -v | grep -E ':53|dns'
sudo ss -lunp | grep ':53'
ఆ అవుట్పుట్లు వరుసగా మూడు ప్రశ్నలకు సమాధానం ఇస్తాయి: ప్రశ్నను ఏది తిరిగి రాస్తుంది, దాన్ని ఏది స్వీకరిస్తుంది, మరియు వినే సాకెట్ను ఏ ప్రక్రియ కలిగి ఉంది. యజమాని తెలిసిన తర్వాత అప్స్ట్రీమ్ పాలసీకి నివసించడానికి స్థలం ఉంటుంది.
రిజాల్వర్కు దాని సొంత నిష్క్రమణ పాలసీ ఇవ్వండి
కొన్ని పేర్లకు మాత్రమే టన్నెల్ అవసరమైనప్పుడు డొమైన్-నిర్దిష్ట అప్స్ట్రీమ్ అత్యంత శుభ్రమైన సాధనం. dnsmasq డొమైన్కు పరిమితమైన server పంక్తిని అంగీకరిస్తుంది, ఐచ్ఛిక ఇంటర్ఫేస్ లేదా మూల చిరునామాతో ప్రశ్నను ఎంచుకున్న పరికరం నుండి బయటకు పంపుతుంది. ఆ మార్గదర్శనమే రెండవ సంభాషణను VPNను అనుసరించేలా చేస్తుంది.
server=/corp.example/10.30.0.53@tun_work
log-queries
పైన ఉన్న డొమైన్, చిరునామా మరియు ఇంటర్ఫేస్ మీ సొంత విలువల కోసం ప్లేస్హోల్డర్లు. డొమైన్ ఎంపిక మరియు నిష్క్రమణ నియంత్రణ వేర్వేరు నిర్ణయాలుగానే ఉంటాయి: మార్గం ఉండాలి, మూల చిరునామాకు అప్స్ట్రీమ్ రిజాల్వర్ అనుమతి ఇవ్వాలి, ఫైర్వాల్ సమాధానాన్ని అనుమతించాలి. ఇంటర్ఫేస్ మార్గదర్శనం మాత్రమే fail-closed కాదు, ఎందుకంటే అదృశ్యమైన టన్నెల్ రిజాల్వర్ను మరో మార్గంపై పడేయవచ్చు. గోప్యంగా ఉండాల్సిన పేరు స్థలం నుండి ఏదైనా పబ్లిక్ ప్రత్యామ్నాయాన్ని దూరంగా ఉంచండి.
పంక్తిని సృష్టించిన ఫైల్లో కాదు, రౌటర్ మద్దతు ఇచ్చే కాన్ఫిగరేషన్ యజమాని వద్ద ఉంచండి, లేకపోతే తదుపరి రీలోడ్ సవరణను తుడిచివేస్తుంది.
పంచుకున్న కాష్ ఏమి కాపాడలేదు
ఒక కాష్తో ఒక ఫార్వార్డర్ ప్రతి LAN క్లయింట్కు సేవ చేస్తుంది, అది కొన్ని నెట్వర్క్లకు అవసరమైన భేదాన్ని పడగొడుతుంది. ఇద్దరు క్లయింట్లు ఒకే పేరును వేర్వేరుగా పరిష్కరించాల్సి వస్తే, ఎవరు అడిగారో తిరిగి పొందడానికి పంచుకున్న సాకెట్కు మార్గం లేదు. ప్రతి క్లయింట్ పాలసీ వేర్వేరు రిజాల్వర్ సందర్భాలలో లేదా గుర్తింపును కాపాడే ఫార్వార్డింగ్ లక్షణంలో నివసించాలి.
కాష్ చేసిన సమాధానం కూడా కొత్త మార్గం గురించి సాక్ష్యం కాదు. అప్స్ట్రీమ్ మార్గం విరిగి ఉన్నప్పటికీ సమాధానం జ్ఞాపకం నుండి రావచ్చు.
53వ పోర్టు నియమాలు DNSను HTTPS లేదా TLS ద్వారా మాట్లాడే అనువర్తనాల గురించి ఏమీ చెప్పవు. ఆ ప్రశ్నలు ఎప్పటికీ రీడైరెక్ట్ను చేరవు, కాబట్టి 53వ పోర్టుపై మాత్రమే నిర్మించిన పాలసీ ట్రాఫిక్లోని ఒక ఉపసమితిని వివరిస్తుంది మరియు దాన్ని ఉపసమితిగా నమోదు చేయాలి.
రెండవ సంభాషణను ధృవీకరించండి, మొదటిది కాదు
మీరు నియంత్రించే ఒక పేరుతో పరీక్షించి రెండు వైపులా చూడండి. క్లయింట్ వైపు క్యాప్చర్ ప్రశ్న LANను విడిచిందని నిరూపిస్తుంది; తర్వాత అది ఎక్కడికి వెళ్లిందో రౌటర్ వైపు మాత్రమే నిరూపిస్తుంది.
sudo tcpdump -ni tun_work udp port 53
ip route get 10.30.0.53
dig +short corp.example @10.30.0.53
ప్రతి ప్రయత్నానికి ముందు కాష్ను ఖాళీ చేయండి, ఎందుకంటే వెచ్చని సమాధానం విరిగిన అప్స్ట్రీమ్ను దాస్తుంది. TCPపై పునరావృతం చేయండి, ఆపై టన్నెల్ ఆఫ్ చేసి పునరావృతం చేయండి, రిజాల్వర్ తన ఇష్టమైన మార్గం పోయినప్పుడు ఏమి చేస్తుందో చూడటానికి. ఆ చివరి ప్రవర్తనే డిజైన్ fail-closedా లేక కేవలం అదృష్టమా అని నిర్ణయిస్తుంది.