ඔබේ ටනල් බහාලුම ක්‍රියාත්මක වේ, docker compose exec vpn curl -s https://ifconfig.me සපයන්නාගේ ලිපිනයෙන් පිළිතුරු දෙයි, එහෙත් ඔබේ ඩෙස්ක්ටොප් බ්‍රවුසරය තවමත් ඔබේ ISP හරහා පිටවෙයි। එම පරතරය අපේක්ෂිතය। VPN සේවාලාභියෙකු ධාවනය කරන බහාලුමක් ජාල නාම අවකාශයක්, මාර්ග සහ ටනල් අතුරුමුහුණතක් රඳවා ගනී, HTTP හෝ SOCKS කතා කරන කිසිවක් නොවේ; එය මත පෝට් එකක් ප්‍රකාශයට පත් කිරීමෙන් කිසිදා නොතිබූ ශ‍රාවකයක් නිර්මාණය කළ නොහැක।

සේවාලාභියා ධාවනය වන ස්ථානය නිර්මාණය තීරණය කරයි। සහෝදර බහාලුමකට ටනලයේ නාම අවකාශයට යා හැක, ඩෙස්ක්ටොප් යෙදුමකට නොහැක, සහ රවුටරයකට ප්‍රොක්සි ක්ෂේත්‍රයක් නොව මාර්ග අවශ්‍යය। සිතියම වැරදුනොත් රෝග ලක්ෂණය එකමය: සම්බන්ධතාවය ප්‍රතික්ෂේප විය, නැතහොත් නිහඬව පැරණි මාර්ගය ගන්නා රථවාහන।

සැකසුම සේවාලාභියා ධාවනය වන ස්ථානයට ගැළපෙන්න

Compose සංස්කරණය කිරීමට පෙර එක් ප්‍රශ්නයක් අසන්න: සේවාලාභියා VPN බහාලුමේ ජාල නාම අවකාශය තුළ ආරම්භ කළ හැකිද? දැනටමත් Linux බහාලුමක් ලෙස ධාවනය වන සියල්ලට හැක। ඔබේ මේසයේ ඇති බ්‍රවුසරයට, IDE එකට හෝ CLI එකට නොහැක, එහි ප්‍රොක්සි සැකසුම ප්‍රොටොකෝල සේවාවක් අපේක්ෂා කරන නිසා, නාම අවකාශයක් නොවේ।

ClientArrangementWhat must already exist
Another Compose serviceShares the vpn namespace via network_mode: service:vpnA working tunnel and correct start order
Host browser, IDE or CLIProxy listener inside the namespace, published to host loopbackA configured SOCKS or HTTP proxy and its access rules
Router, VM or phoneThe container as a layer-3 gatewayForwarding, NAT and a return route

මේ තුන මිශ්‍ර නොවේ। බහාලුමේ පාලම් ලිපිනයට යොමු වූ HTTP ප්‍රොක්සි ක්ෂේත්‍රයක් එහි ප්‍රොක්සියක් නාද නොකරන්නේ නම් කිසිවකට ළඟා නොවේ, ප්‍රොක්සි ශ‍රාවකයක් රවුටරයක රථවාහන රවුට් නොකරයි। පළමුව තීරණය කර, පසුව ගැළපෙන කොටස අනුගමනය කරන්න।

ටනල් නාම අවකාශය සහෝදර බහාලුමක් සමඟ බෙදා ගන්න

ප්‍රොක්සි ප්‍රොටොකෝලයක් සම්බන්ධ නොවන නිසා මෙය ලාභම විකල්පයයි। යෙදුම vpn සේවාවේ නාම අවකාශයට එක් වී එහි අතුරුමුහුණත්, මාර්ග සහ පෝට් අවකාශය උරුම කර ගනී:

services:
  vpn:
    image: your-vpn-client
    cap_add:
      - NET_ADMIN
    healthcheck:
      test: ["CMD-SHELL", "ip link show tun0 >/dev/null"]
      interval: 10s
      retries: 5
  app:
    image: your-app
    network_mode: service:vpn
    depends_on:
      vpn:
        condition: service_healthy

නාම අවකාශය වෙනත් සේවාවකට අයත් වීමෙන් සීමා තුනක් පැන නගී। යෙදුමට තමන්ගේම networks යතුරක් නොලැබේ, එකතු වීමට නාම අවකාශයක් නොමැති නිසා। පෝට් ප්‍රකාශයට පත් කිරීම vpn සතුය, නාම අවකාශය එහි ජීවත් වන නිසා। තවද vpn නැවත නිර්මාණය කිරීම යෙදුම එක් වූ නාම අවකාශය විනාශ කරයි, එබැවින් docker compose up -d --force-recreate vpn ඔබට app ද නැවත නිර්මාණය කිරීමට ඉඩ දෙයි; සාමාන්‍ය නැවත ආරම්භය සැමවිටම ප්‍රමාණවත් නොවේ। Compose සේවා යොමුව මෙම සැකසුම සහ එහි පෝට් ප්‍රකාශන සීමාව ආවරණය කරයි।

විසඳන්නා ද සමඟ එනවා යැයි නොසිතන්න। /etc/resolv.conf යනු එක් එක් බහාලුම සඳහා ගොනුවක් මිස ජාල නාම අවකාශයේ කොටසක් නොවේ, එබැවින් යෙදුමේ පැකට් ටනලය හරහා පිටව යන අතරතුරද එයට සත්කාරකයේ විසඳන්නාගෙන් ඇසිය හැක। එය බහාලුම තුළින් කියවා, පෞද්ගලික නාම ටනලය හරහා විසඳිය යුතු විට යෙදුමට dns: සකසන්න।

docker compose exec app ip route
docker compose exec app cat /etc/resolv.conf
docker compose exec app curl -s https://ifconfig.me

මාර්ග ලැයිස්තුවේ ටනල් අතුරුමුහුණත ඇත්නම් සහ ලිපිනය සපයන්නාගේ නම්, යෙදුම ටනලය තුළය। අතුරුමුහුණත නොමැති නම්, vpn ට ටනලයක් පෙර app ආරම්භ වී ඇත, එබැවින් vpn සුවදායක බව වාර්තා කළ පසු app නැවත නිර්මාණය කරන්න।

සත්කාරක සේවාලාභීන් සඳහා නාම අවකාශයේ සැබෑ ප්‍රොක්සි ශ‍රාවකයක් තබන්න

ඩෙස්ක්ටොප් බ්‍රවුසරයට නාම අවකාශයකට එක් විය නොහැක, එබැවින් ටනලය සේවාවක් ලෙස නිරාවරණය කළ යුතුය। vpn නාම අවකාශය තුළ සැබෑ SOCKS හෝ HTTP ප්‍රොක්සියක් ධාවනය කර එහි පෝට් එක පමණක් ප්‍රකාශයට පත් කරන්න:

services:
  vpn:
    ports:
      - "127.0.0.1:1080:1080"
  proxy:
    image: your-proxy
    network_mode: service:vpn
    command: ["--socks", "0.0.0.0:1080"]

සත්කාරක පැත්තේ ලිපිනය එම සිතියමේ වැදගත් අඩකි। වම් පස 127.0.0.1:1080 ශ‍රාවකය ඔබේ LAN එකෙන් බැහැර තබයි; නිරුවත් "1080:1080" ඔබේ යන්ත‍රයට ළඟා විය හැකි සෑම උපාංගයකටම විවෘත ප්‍රොක්සියක් ප්‍රකාශයට පත් කරයි।

බහාලුම් පැත්තට තමන්ගේම උගුලක් ඇත। ප්‍රකාශිත පෝට් බහාලුමේ පාලම් ලිපිනයට ලබා දෙයි, එහි loopback එකට නොවේ, එබැවින් නාම අවකාශය තුළ --socks 127.0.0.1:1080 සමඟ ආරම්භ කළ ප්‍රොක්සිය සහෝදරයන්ගේ සම්බන්ධතා පිළිගෙන ප්‍රකාශිත පෝට් හරහා එන සියල්ල ප්‍රතික්ෂේප කරයි। එය 0.0.0.0 වෙත බන්ධනය කර හුදකලා කිරීම සඳහා සත්කාරක පැත්තේ loopback බන්ධනය මත රැඳෙන්න। එම නියමයම ප්‍රොක්සි වින්‍යාස ගොනුවේ සවන් දෙන ලිපිනයට ද අදාළ වේ।

පසුව නාම විසඳන්නේ කොහේදැයි තීරණය කරන්න। curl තුළ --socks5 සත්කාරක නාමය දේශීයව විසඳයි, --socks5-hostname නාමය ප්‍රොක්සියට යවයි; බ්‍රවුසර එම ස්විචයම වෙනත් ලේබලයක් යටතේ පෙන්වයි। දේශීය විසඳුම පිටුව ටනලය හරහා පූරණය වුවද විමසුම හෙළි කරයි।

ආපසු මාර්ගයක් ඇත්නම් පමණක් බහාලුම ගේට්වේ එකක් ලෙස සලකන්න

රවුටර, VM සහ දුරකථන HTTP ප්‍රොක්සි ක්ෂේත්‍රයක් භාවිත නොකරනු ඇත, සමහර යෙදුම් ප්‍රොක්සි විචල්‍ය සම්පූර්ණයෙන් නොසලකා හරියි। ඔවුන්ගේ රථවාහන රවුට් කිරීම යනු ස්ථරය 3: බහාලුම පැකට් ඉදිරියට යවා ටනල් අතුරුමුහුණතේ ලිපින පරිවර්තනය කරයි।

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

කරුණු දෙකක් පහසුවෙන් මඟ හැරේ। සේවාලාභියාට ඔහුගේ පෙරනිමි ගේට්වේ මෙම සත්කාරකයට යොමු කරන මාර්ගයක් අවශ්‍යය, පිළිතුරු ආපසු මාර්ගය සොයා ගත යුතුය, එක්කෝ ඉහළ රවුටරයේ ස්ථිතික මාර්ගයකින් හෝ සේවාලාභීන් දෙසට ඇති අතුරුමුහුණතේ NAT මගින්। ඉන් එකක් නොමැති නම් ටනලය ඉල්ලීම පිටතට ගෙන යයි, පිළිතුර අතුරුදහන් වේ।

එහි බලපෑම් පරාසය ද විශාලතමය। මුළු LAN එකටම ගේට්වේ වන සත්කාරකය වැරදි ලෙස වින්‍යාස කළ සෑම සේවාලාභියෙකුම ඔබේ VPN ගිණුම හරහා යවයි, ටනලය වැටුණු විට kill switch අනුව LAN අඳුරු වේ හෝ ISP වෙත ආපසු යයි।

පිටවීමේ මාර්ගය තහවුරු කර, පසුව පිළිවෙලට ආපසු හරවන්න

මෙම පිළිවෙලින් පරීක්ෂා කර පළමු අසාර්ථකත්වයේ නවතින්න: නාම අවකාශය තුළ පිටවීමේ ලිපිනය, සත්කාරකයේ සිට ප්‍රොක්සිය හරහා පිටවීමේ ලිපිනය, පසුව පෞද්ගලික සත්කාරකයක් සඳහා නාම විසඳුම।

docker compose exec vpn curl -s https://ifconfig.me
curl -s -x socks5h://127.0.0.1:1080 https://ifconfig.me
curl -s -x socks5h://127.0.0.1:1080 http://internal.example/health

පළමු ලිපින දෙක සපයන්නා සමඟ ගැළපිය යුතුය, තෙවැන්න නාම දෝෂයකින් අසාර්ථක වනවා වෙනුවට ප්‍රොක්සිය හරහා විසඳිය යුතුය। පළමු පේළිය ගැළපී දෙවැන්න අසාර්ථක වන්නේ නම් ශ‍රාවකය හෝ ප්‍රකාශිත පෝට් එක වැරදි බවයි, ටනලය නොවේ।

ආපසු හැරවීම සැකසුමේ ප්‍රතිවිරුද්ධයයි। shell පැතිකඩෙන් සහ ඕනෑම systemd ඒකකයකින් ප්‍රොක්සි පරිසර විචල්‍ය ඉවත් කර, පසුව තොගය පහත් කරන්න එවිට හවුල් නාම අවකාශය එහි හිමිකරු සමඟ අතුරුදහන් වේ। ප්‍රොක්සි සේවාව මකා දැමීමට පෙර ප්‍රකාශිත පෝට් එක මකන්න, එසේ නොමැති නම් සත්කාරකය කිසිවෙකු නොකියවන loopback ශ‍රාවකයක් රඳවා ගනී।

ඉදිරියට යාමට පෙර කරුණු හතරක් තහවුරු කරන්න: ඔබට වැදගත් සේවාලාභියා සැබවින්ම ටනලයට ළඟා වේ, පෝට් ප්‍රකාශයට පත් කරන්නේ නාම අවකාශයේ හිමිකරු පමණි, පෞද්ගලික නාම ඔබ අදහස් කළ තැන විසඳේ, සහ loopback නොවන සත්කාරක ලිපිනයක කිසිවක් සවන් නොදෙයි। ඒවායින් එකක් එකින් එක නිෂ්පාදනයේදී නිහඬව අසාර්ථක වේ, සහ එකක් එකින් එක ඉහත එක්-පේළි පරීක්ෂාවකි।

අදාළ ලිපි