Docker కంటైనర్ ట్రాఫిక్ హోస్ట్ VPNని దాటవేస్తుంది: ఎలా తనిఖీ చేయాలి
హోస్ట్ VPN హోస్ట్ నెట్వర్క్ నేమ్స్పేస్ను మాత్రమే కవర్ చేస్తుంది. బ్రిడ్జ్లోని కంటైనర్ ట్రాఫిక్ సొరంగంలోకి ప్రవేశిస్తుందా లేదా నేరుగా బయటకు వెళ్తుందా అని ఈ తనిఖీలతో తెలుసుకోండి.
హోస్ట్లోని మీ బ్రౌజర్ VPN నిష్క్రమణ చిరునామాను చూపిస్తుంది, కంటైనర్ మీ ఇంటి కనెక్షన్ను నివేదిస్తుంది, మరియు ఎవరో దాన్ని లీక్ అని పిలుస్తారు. ఏమీ లీక్ కాలేదు. హోస్ట్ సొరంగం అనేది హోస్ట్ నెట్వర్క్ నేమ్స్పేస్కు చెందిన ఇంటర్ఫేస్లు, మార్గాలు మరియు నియమాల సముదాయం, మరియు బ్రిడ్జ్పై ఉన్న కంటైనర్ తన సొంత డిఫాల్ట్ మార్గంతో కూడిన మరో నేమ్స్పేస్. VPN క్లయింట్ వారాల తరబడి కనెక్ట్ అయి ఉన్నా ఒక్క కంటైనర్ ప్యాకెట్ కూడా ఎప్పుడూ లోపలికి వెళ్లని Compose స్టాక్పై నేను కూర్చున్నాను.
ట్రే చిహ్నానికి ముందు నేమ్స్పేస్ను తనిఖీ చేయండి
నేమ్స్పేస్లే మొత్తం వాదన. Docker బ్రిడ్జ్ నెట్వర్క్లో కంటైనర్ను ప్రారంభించినప్పుడు, అది నెట్వర్క్ నేమ్స్పేస్ను సృష్టిస్తుంది, veth జోడీలోని ఒక చివరను దాని లోపల కలుపుతుంది, మరియు ఆ నేమ్స్పేస్కు చిరునామా మరియు డిఫాల్ట్ మార్గాన్ని ఇస్తుంది. సొరంగం ఇంటర్ఫేస్, దానికి ఏ పేరు పెట్టినా, హోస్ట్ నేమ్స్పేస్లో నివసిస్తుంది. కంటైనర్ లోపలి ట్రాఫిక్ దాన్ని చూడలేదు, మరియు బయటి నుండి ఏ క్లయింట్ సెట్టింగ్ దాన్ని మార్చదు.
వేరుచేయడం నుండి బయటపడే రెండు మద్దతు ఉన్న చర్యలు ఉన్నాయి. --network host కంటైనర్ను హోస్ట్ నేమ్స్పేస్ లోపల ఉంచుతుంది, కాబట్టి అది హోస్ట్ మార్గాలను మరియు దాని ద్వారా సొరంగాన్ని వారసత్వంగా పొందుతుంది. --network container:vpn మరో కంటైనర్ నేమ్స్పేస్ను పంచుకుంటుంది, మరియు చాలా సైడ్కార్ డిజైన్లు పనిభారాన్ని VPN కంటైనర్ ద్వారా పంపేది ఇలాగే. రెండూ స్పష్టమైన ఎంపికలు; సాధారణంగా వాటిలో ఒకటి మాత్రమే అమలు చేసే వ్యక్తి ఉద్దేశించినది.
హోస్ట్ మోడ్ ఉచిత అప్గ్రేడ్ కాదు. కంటైనర్ తన సొంత చిరునామాను కలిగి ఉండటం ఆగిపోతుంది, పోర్ట్ ప్రచురణ వర్తించదు, మరియు అక్కడ NET_ADMIN కలిగి ఉన్న ప్రక్రియ హోస్ట్ రూటింగ్ను తిరిగి రాయగలదు. దాన్ని అంగీకరించడం సరైన నిర్ణయం కావచ్చు. ఇది ఇప్పటికే ఆన్లో ఉందని భావించడమే, ఎప్పుడూ మార్గంలో లేని సొరంగాన్ని సాయంత్రం డీబగ్ చేయడానికి కారణం.
ప్యాకెట్ను బ్రిడ్జ్ నుండి బయటకు అనుసరించండి
బ్రిడ్జ్ కంటైనర్ తన ప్యాకెట్ను తన డిఫాల్ట్ గేట్వేకు పంపుతుంది, అది హోస్ట్పై ఉన్న బ్రిడ్జ్ ఇంటర్ఫేస్. తర్వాత హోస్ట్ ప్యాకెట్ను ఫార్వార్డ్ చేస్తుంది మరియు డిఫాల్ట్ కాన్ఫిగరేషన్లో ప్యాకెట్ బయటకు వెళ్లే ముందు మూల చిరునామాను తన చిరునామాగా అనువదిస్తుంది. ఆ అనువాద దశే విధానాన్ని నిశ్శబ్దంగా ఓడిస్తుంది.
ప్యాకెట్ సొరంగం ముగింపు బిందువుకు చేరుకునేసరికి అది హోస్ట్ చిరునామాను మోస్తుంది. కంటైనర్ అసలు చిరునామాపై ఆధారపడిన ఏ నియమం, విధాన మార్గం లేదా విభజిత సొరంగ నిర్ణయమైనా సరిపోలడం ఆగిపోతుంది, మరియు వేర్వేరు నిష్క్రమణల ద్వారా బయటకు వెళ్లాల్సిన రెండు కంటైనర్లను మూలం ద్వారా మాత్రమే వేరు చేయలేము. మీకు ప్రతి కంటైనర్కు రూటింగ్ కావాలంటే, నిర్ణయం అనువాదానికి ముందు లేదా మీరు నియంత్రించే నేమ్స్పేస్ లోపల తీసుకోవాలి.
Docker ఈ నియమాలను తనే నిర్వహిస్తుంది, డీమన్ ఏ ఫైర్వాల్ బ్యాకెండ్తో కాన్ఫిగర్ చేయబడిందో దాని ద్వారా. ఫార్వార్డ్ చేయబడిన ట్రాఫిక్ కోసం మద్దతు ఉన్న హుక్ వెలుపల చేతితో రాసిన నియమాలు, DOCKER-USER, డీమన్ పునఃప్రారంభమైనప్పుడు లేదా హోస్ట్ అప్గ్రేడ్ అయినప్పుడు తిరిగి క్రమబద్ధీకరించబడవచ్చు లేదా తొలగించబడవచ్చు. ప్యాకెట్ ఫిల్టరింగ్పై Docker పత్రం గొలుసుల క్రమాన్ని చూపిస్తుంది; ఆచరణాత్మక అంశం ఏమిటంటే ప్రతి నియమానికి యజమాని మరియు మీరు నిజంగా పరీక్షించిన రీలోడ్ మార్గం అవసరం.
రెండు వ్యవస్థలను విడివిడిగా పరీక్షించండి
ఒక నేమ్స్పేస్ నుండి వచ్చిన సాక్ష్యం మరొకదాని గురించి ఏమీ చెప్పదు. VPN కంటైనర్ లోపల అమలు చేసిన అభ్యర్థన ఆ కంటైనర్కు సొరంగం పనిచేస్తుందని నిరూపిస్తుంది. అది హోస్ట్ గురించిన సాక్ష్యం కాదు, మరియు --network host కంటైనర్ నుండి అమలు చేసిన అదే ఆదేశం బ్రిడ్జ్ గురించిన సాక్ష్యం కాదు.
# host namespace
ip route get 1.1.1.1
ip -brief addr show
# a fresh container on the same bridge network
docker run --rm --network appnet alpine sh -c 'ip route; cat /etc/resolv.conf; ip -6 route'
తర్వాత పరీక్షను పోలిన ఇమేజ్లో కాకుండా నిజమైన అప్లికేషన్ కంటైనర్ లోపల పునరావృతం చేయండి. అప్లికేషన్ అదనపు మార్గం, ప్రాక్సీ పర్యావరణ చరం లేదా మరో రిజాల్వర్ కలిగి ఉండవచ్చు, మరియు వాటిలో ప్రతిదీ సమాధానాన్ని మారుస్తుంది. ప్రతిసారీ పేరు విశ్లేషణ మరియు రెండవ చిరునామా కుటుంబాన్ని తనిఖీ చేయండి: వినియోగదారు నిర్వచించిన బ్రిడ్జ్లపై కంటైనర్లు Docker అంతర్నిర్మిత రిజాల్వర్ ద్వారా 127.0.0.11లో పరిష్కరించబడతాయి, మరియు బ్రిడ్జ్పై IPv6 డిఫాల్ట్ మార్గం మీరు IPv4 మాత్రమే సొరంగాన్ని పరీక్షిస్తున్నప్పుడు ట్రాఫిక్ను బయటకు తీసుకెళ్లగలదు.
రుజువులను తాకే ముందు నమూనాను చదవండి
హోస్ట్ పనిచేసి కంటైనర్ పనిచేయనప్పుడు, కారణం దాదాపు ఎప్పుడూ నిర్మాణాత్మకం, మరియు కీలను తిప్పడం లేదా క్లయింట్ను మళ్లీ ఇన్స్టాల్ చేయడం మధ్యాహ్నాన్ని వృథా చేస్తుంది. మొదట లక్షణాన్ని వర్గీకరించండి, సరిదిద్దడం సాధారణంగా తన పేరును తానే చెప్పుకుంటుంది.
| What you see | Usual cause | First check |
|---|---|---|
| Host exits through the VPN, container shows the ISP address | The container never entered the tunnel | Default route inside the container |
| Container works until the daemon restarts, then stops | Rules outside the supported hook, or a changed backend | Daemon's reported firewall backend and DOCKER-USER |
| Container loses internal hosts after the tunnel comes up | VPN prefix overlaps the Docker bridge subnet | ip route on the host, then docker network inspect |
| Small replies arrive, large ones hang | Tunnel MTU or missing MSS clamping | Link MTU on both ends of the tunnel |
| Container falls back to the ISP address when the tunnel drops | Nothing enforces the kill switch for forwarded traffic | Stop the tunnel with a request in flight |
అతివ్యాప్తి వరుసకు దాని సొంత వాక్యం అర్హం. 172.17.0.0/16 కోసం, లేదా మీ బ్రిడ్జ్ ఉపసర్గను యాదృచ్ఛికంగా కలిగి ఉన్న 10.0.0.0/8 కోసం మార్గాన్ని నెట్టే VPN ప్రొఫైల్ సొరంగాన్ని కంటైనర్ సబ్నెట్ను క్లెయిమ్ చేయించేలా చేస్తుంది, మరియు అనువదించిన చిరునామాలకు వెళ్లే ప్రతిస్పందనలు తప్పు దిశలో వెళ్తాయి లేదా మాయమవుతాయి. Docker నెట్వర్క్ను తిరిగి సంఖ్యీకరించడం సాధారణంగా మినహాయింపులను కూడబెట్టడం కంటే శుభ్రంగా ఉంటుంది.
కవరేజీని స్పష్టం చేయండి, తర్వాత ఉద్దేశపూర్వకంగా దాన్ని బద్దలు కొట్టండి
సమీక్షలో రెండు డిజైన్లు నిలబడతాయి. VPN కంటైనర్ నేమ్స్పేస్ను పంచుకోండి మరియు కవర్ చేయబడిన ప్రతి పనిభారం ఒకే పునఃప్రారంభ సరిహద్దుతో ఒకే సొరంగాన్ని ఉపయోగిస్తుంది, ఇది ఒక సేవకు వేరే నిష్క్రమణ లేదా తన సొంత DNS మార్గం అవసరమయ్యే వరకు సులభం. లేదా కంటైనర్ నెట్వర్క్ను హోస్ట్పై ఉన్న VPN గేట్వేకు రూట్ చేయండి: ఫార్వార్డింగ్ ప్రారంభమైంది, బ్రిడ్జ్ ఉపసర్గ సొరంగం వైపు, తిరిగి వచ్చే ట్రాఫిక్ స్పష్టంగా నిర్వహించబడింది. అది ప్రతి నెట్వర్క్కు నియంత్రణను కొంటుంది మరియు డీమన్ మరియు క్లయింట్ అప్గ్రేడ్ల అంతటా నిర్వహించాల్సిన నియమాల సమితిని మీకు ఖర్చు చేస్తుంది.
ఎలా అయినా, ముఖ్యమైన పరీక్ష వైఫల్య సందర్భం. కంటైనర్ అభ్యర్థన గాలిలో ఉన్నప్పుడు సొరంగాన్ని ఆపి ప్యాకెట్ ఎక్కడికి వెళ్తుందో చూడండి. అది నేరుగా మార్గానికి తిరిగి పడితే, కవరేజీ ఎప్పుడూ అమలు చేయబడలేదు, ఎందుకంటే క్లయింట్ యొక్క kill switch క్లయింట్ సొంత ట్రాఫిక్ను నియంత్రిస్తుంది, బ్రిడ్జ్ నుండి ఫార్వార్డ్ చేసిన ప్యాకెట్లను కాదు. తర్వాత డీమన్ మరియు హోస్ట్ను పునఃప్రారంభించి ఫలితాన్ని రెండవసారి నిర్ధారించండి; చేతితో రాసిన నియమాలు మాయమయ్యే క్షణం అదే.
దాన్ని పూర్తయిందని చెప్పే ముందు నాలుగు విషయాలను నిర్ధారించండి: సొరంగం ఇంటర్ఫేస్ ట్రాఫిక్ వలెనే అదే నేమ్స్పేస్లో ఉంది, కంటైనర్ పరీక్ష నిజమైన కంటైనర్ లోపల జరిగింది, పేరు విశ్లేషణ మరియు రెండు చిరునామా కుటుంబాలు తనిఖీ చేయబడ్డాయి, మరియు సొరంగ వైఫల్య పరీక్ష ఇప్పటికీ మూసి ఉన్న రూపంలో విఫలమవుతుంది. తర్వాత ఫైర్వాల్ బ్యాకెండ్, క్లయింట్ సంస్కరణ మరియు ప్రతి నియమం యొక్క యజమానిని రాయండి. ఆ రికార్డే తదుపరి అప్గ్రేడ్ పాత ఊహల అప్రలేఖిత మిశ్రమాన్ని వదిలివేయకుండా నిరోధిస్తుంది.