VPN క్లయింట్ను కంటైనర్లో పెడితే లోపల సొరంగంతో ఒక నేమ్స్పేస్ లభిస్తుంది, తన మొత్తం ట్రాఫిక్ను VPN ద్వారా మార్గనిర్దేశం చేసే హోస్ట్ కాదు. ఇవి వేర్వేరు ప్రాజెక్టులు, మరియు వాటిని ఒకటిగా పరిగణించడమే కంటైనర్లు ప్రమాదవశాత్తు ప్రత్యేక హక్కులు పొందే మార్గం. ఈ మార్గదర్శిని మొదటి దానిని మాత్రమే కవర్ చేస్తుంది: ఒక సమీక్షించిన ఇమేజ్, ఒక రక్షిత ప్రొఫైల్ మరియు తన స్వంత నెట్వర్క్ నేమ్స్పేస్కు పరిమితమైన క్లయింట్ ప్రక్రియ.

ఎవరో ఇప్పటికే ఆమోదించిన ఆర్టిఫ్యాక్ట్ నుండి ప్రారంభించండి. క్రింది దశలు openvpn ఎగ్జిక్యూటబుల్ మరియు ధృవపత్రం, కీ మెటీరియల్ మౌంట్ లోపల ఇప్పటికే పరిష్కరించబడిన పూర్తి క్లయింట్ ప్రొఫైల్ ఉన్న ఇమేజ్ను ఊహిస్తాయి. అవి సాఫ్ట్వేర్ను నిర్మించవు, ఆధారాలను జారీ చేయవు, root లేని రన్టైమ్లు మరియు స్థానిక Windows కంటైనర్లను కవర్ చేయవు; వాటిలో ప్రతి ఒక్కటి సమాధానాన్ని మారుస్తుంది.

కంటైనర్ ఏమి పొందుతుంది, ఏమి పొందదు

ప్రొఫైల్ మరియు అది సూచించే ప్రతిదీ పరిమిత అనుమతులున్న స్థానిక డైరెక్టరీలో ఉంచి, చదవడానికి-మాత్రమే అని మౌంట్ చేయండి. ప్రొఫైల్ లోపలి సాపేక్ష మార్గాలు ఆ మౌంట్ లోపలే పరిష్కరించబడాలి; ధృవపత్రం ప్రొఫైల్ కంటే ఒక డైరెక్టరీ పైన ఉన్నప్పుడు మరియు కంటైనర్ దాన్ని ఎప్పుడూ చూడనప్పుడు ప్రజలు తప్పించుకునే వివరం ఇది.

services:
  vpn:
    image: ${VPN_CLIENT_IMAGE:?set the reviewed image reference}
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun:/dev/net/tun
    volumes:
      - ./vpn:/vpn:ro
    working_dir: /vpn
    entrypoint: ["openvpn"]
    command: ["--config", "/vpn/client.ovpn"]

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

ఇక్కడ చదవడానికి-మాత్రమే అంటే కంటైనర్ మీ హోస్ట్ ఫైల్లను మార్చలేదు; మీరు మౌంట్ చేసిన ప్రైవేట్ కీని చదవలేదు అని కాదు. మౌంట్ యొక్క మొత్తం ఉద్దేశ్యం అదే, అందుకే ఫైల్ అనుమతులు, యాజమాన్యం మరియు రహస్యం హోస్ట్కు ఎలా వచ్చింది అనేది ఇప్పటికీ ముఖ్యం. కమాండ్ లైన్లో ఎప్పుడూ పాస్వర్డ్ను ఇవ్వకండి, ఇమేజ్ పొరలో కాల్చకండి, ఎందుకంటే రెండూ తర్వాత శుభ్రం చేయలేని ప్రదేశాలలో మిగిలిపోతాయి.

సామర్థ్యాలు, entrypoint మరియు వాటి మధ్య ఉన్న ఉచ్చు

రెండు సెట్టింగ్లు అవసరం, అవి సంబంధం లేని పనులు చేస్తాయి. NET_ADMIN కంటైనర్ నేమ్స్పేస్ లోపల ఇంటర్ఫేస్లు మరియు మార్గాల నిర్వహణను అనుమతిస్తుంది. /dev/net/tun పరికర నమోదు ప్రక్రియకు సొరంగ పరికరాన్ని కూడా తెరవడానికి అనుమతిస్తుంది. ఒకటి మరొకటి లేకుండా ఇస్తే స్పష్టమైన వైఫల్యం ఏర్పడుతుంది, ఇది సౌకర్యవంతం: లేని TUN పరికరం తెరిచేటప్పుడు విఫలమవుతుంది, కానీ లేని సామర్థ్యం క్లయింట్ ఇంటర్ఫేస్ను కాన్ఫిగర్ చేయడానికి ప్రయత్నించినప్పుడు విఫలమవుతుంది.

వాటిలో ఏదీ privileged: true ను సమర్థించదు. ప్రత్యేక హక్కులున్న కంటైనర్ అన్ని సామర్థ్యాలతో పాటు పరికరాల యాక్సెస్ను పొందుతుంది, ఇది ఈ పనిభారానికి అవసరమైనదానికి చాలా పెద్ద మంజూరు. రన్టైమ్ ప్రత్యేక హక్కులు మరియు సామర్థ్యాల సూచన ఈ మంజూరు ఎంత దూరం వెళ్తుందో వివరిస్తుంది. chart లేదా బ్లాగ్ పోస్ట్ దాన్ని అడిగితే, అవసరం నిజంగా లేని పరికర మార్గమా లేక లేని సామర్థ్యమా అని మొదట తనిఖీ చేయండి.

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

క్లయింట్ను ముందు తెరపై అమలు చేయండి, అది కంటైనర్ యొక్క ప్రధాన ప్రక్రియగా ఉండనివ్వండి. డెమన్గా మారే ప్రక్రియ వెంటనే నిష్క్రమిస్తుంది, కంటైనర్ లూప్లో పునఃప్రారంభమవుతుంది, మీకు అవసరమైన లాగ్లు ఒకేలా కనిపించే పునఃప్రారంభాల మధ్య చెల్లాచెదురుగా ఉంటాయి.

నేమ్స్పేస్ లోపలి నుండి ధృవీకరించండి, హోస్ట్ నుండి కాదు

స్టాక్ను పైకి లేపి, క్లయింట్ అనుసంధాన స్థితికి చేరుకున్నట్లు లాగ్లో నిర్ధారించి, ఆపై సొరంగాన్ని నిజంగా కలిగి ఉన్న నేమ్స్పేస్ను పరిశీలించండి.

docker compose up -d
docker compose logs --tail 40 vpn
docker compose exec vpn ip -br addr
docker compose exec vpn ip route

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

తర్వాత మీకు ముఖ్యమైన గమ్యాన్ని సొరంగాన్ని ఉపయోగించాల్సిన నేమ్స్పేస్ నుండి, ping మాత్రమే కాదు అప్లికేషన్తో పరీక్షించండి. పేరు పరిష్కారం వేరే వైఫల్యం, దాన్ని స్పష్టంగా పరీక్షించడం విలువైనది: పుష్ చేసిన DNS చిరునామా కంటైనర్ రిజాల్వర్ను దానంతటదే నవీకరించదు, push ను విస్మరించే స్వతంత్ర క్లయింట్ ఇమేజ్ కాన్ఫిగర్ చేసిన దాని ద్వారా పేర్లను పరిష్కరిస్తుంది.

విచ్ఛిన్న స్థితి ఒప్పందంలో భాగం

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

పనిభారం ఎప్పుడూ సాధారణ మార్గాన్ని ఉపయోగించకూడదు అయితే, ఫైర్వాల్ నియమాలు మరియు నేమ్స్పేస్ లోపల సన్నద్ధత సంకేతంతో దాన్ని స్పష్టంగా రూపకల్పన చేయండి. Kill switch అనేది మీరు రాసి పరీక్షించే విధానం, కంటైనర్లో క్లయింట్ను నడపడం ద్వారా వారసత్వంగా పొందే లక్షణం కాదు.

చివరగా, పరిమితిని గుర్తుంచుకోండి: ఈ మార్గాలు కంటైనర్ నేమ్స్పేస్లో నివసిస్తాయి, హోస్ట్ రూటింగ్ పట్టికను భర్తీ చేయవు. Docker యొక్క ఫార్వర్డింగ్, అనువాదం మరియు ఫైర్వాల్ నియమాలు బయటి మార్గంలో భాగంగానే ఉంటాయి, ప్రచురిత పోర్టు VPN ఇంటర్ఫేస్ కాదు.

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