VPN හරහා IPv6 link-local වැඩ නොකරයි: fe80 සබැඳියේ නතර වන්නේ ඇයි
fe80:: ලිපිනයක් අර්ථවත් වන්නේ එක් සබැඳියක පමණි. රූට් කළ VPN එය ගෙන යා නොහැක්කේ ඇයි, අසාර්ථකත්වය කෙසේ දිස්වේද, ඒ වෙනුවට කුමන ලිපිනය භාවිත කළ යුතුද බලන්න.
ඔබ ටනලය ඉහළට ගෙන, ටනලය මූලාශ්ර අතුරුමුහුණත ලෙස භාවිත කර fe80::1 වෙත ping කරන විට කිසිවක් ආපසු නොඑයි. මෙය ඔබට අමතක වූ firewall නියමයක් නොවේ. Link-local ලිපිනයක් අර්ථවත් වන්නේ එය සෑදුණු එකම සබැඳියේ පමණක් වන අතර, රූට් කළ VPN එම සබැඳිය නොවේ. දුරස්ථ රවුටරයේ fe80::1 දුරස්ථ LAN කොටසේ පවතී; ඔබ තවත් කොටසක එක් හොප් එකක් දුරින් සිටී, සහ IPv6 හි රවුටරයකට link-local පැකට් ඉදිරියට යැවීමට කිසිදු යාන්ත්රණයක් නැත.
fe80 උපසර්ගය පරාසයක් නොව විෂය පථයක් විස්තර කරයි
Link-local unicast යනු fe80::/10 වන අතර, නිර්වචනය කරන ගුණය සංඛ්යාව නොව විෂය පථයයි. ලිපිනය වලංගු වන්නේ එක් සබැඳියක පමණක් වන අතර, සෑම අතුරුමුහුණතක්ම තමන්ගේම හඳුනාගැනීමෙන් එකක් සාදයි, එබැවින් සම්බන්ධයක් නැති ජාල දෙකක සම්බන්ධයක් නැති යන්ත්ර දෙකකට කිසිදු ගැටුමක් නොමැතිව දෙකම fe80::1 ට පිළිතුරු දිය හැක. උපසර්ගය මූලික වශයෙන් කියන්නේ “යම් සබැඳියක” යනුවෙනි; සබැඳියම පැමිණෙන්නේ සන්දර්භයෙනි.
සත්කාරකයක, එම සන්දර්භය වන්නේ ප්රතිශත ලකුණට පසුව එකතු කරන කලාපය, එනම් scope ID ය: Linux හි fe80::1%eth0, Windows හි සහ අතුරුමුහුණත දර්ශක පෙන්වන මෙවලම්වල fe80::1%3 හෝ fe80::1%12. කර්නලය ලිපිනය අතුරුමුහුණත දර්ශකය සමඟ විසඳා පසුව යවයි. කලාපය ඉවත් කළහොත් ගමනාන්තය අපැහැදිලි වේ, එබැවින් කොටසක් තෝරා ගැනීමට තැටියට මාර්ගයක් නැත.
රූට් කළ ටනලයකට එය ලබා දිය නොහැක්කේ ඇයි
රූට් කළ VPN යනු තමන්ගේම ලිපින දරන ලක්ෂ්යයෙන් ලක්ෂ්යයට අතුරුමුහුණතක් වන අතර, සාමාන්යයෙන් ටනලය තුළ ඇති unique-local හෝ පෞද්ගලික IPv6 අවකාශයේ /64. දුරස්ථ LAN වෙනම සබැඳියක් වන අතර, ටනලයේ කෙළවර ඔබ වෙනුවෙන් රූට් කර යැවීමෙන් එයට ළඟා වේ. මේවා වෙනස් කොටස් දෙකකි, එබැවින් එකක ලිපිනයක් අනෙකෙහි වලංගු ගමනාන්තයක් නොවේ.
යැවීමේ නියමය ප්රමිතියේ පැහැදිලිව ඇත, එය ඔබේ සේවාදායකයේ අමුතුකමක් නොවේ: රවුටර link-local මූලාශ්රයක් හෝ ගමනාන්තයක් ඇති පැකට් ඉදිරියට නොයවයි. එබැවින් රූට් වගුව නිවැරදිව පෙනුණත් පැකට් මිය යයි. fe80::/64 සඳහා ටනලය දෙසට රූටයක් එකතු කළහොත් ප්රමිතියට අනුකූල තැටියක් එය ප්රතික්ෂේප කරයි, නැතහොත් පිළිගෙන ගැළපෙන සෑම පැකට්ම ඉවත් කරයි: ගමනාන්තයේ විෂය පථය “මෙම සබැඳිය පමණි” යැයි කියන අතර, පිටවන අතුරුමුහුණත එම සබැඳිය නොවේ.
අසල්වැසි සොයාගැනීම එම සීමාවම ශක්තිමත් කරයි. සත්කාරක link-local ඊළඟ හොප් 255 හොප් සීමාවක් සහිත සබැඳි විෂය පථ multicast වෙත යවන අසල්වැසි ඉල්ලීමකින් විසඳයි, එබැවින් රවුටර ඉදිරියට යවන සියල්ල ප්රතික්ෂේප කළ හැක. මෙය ටනලය හරහා ක්රියාත්මක කිරීම යනු දුරස්ථ කොටසක් සඳහා සොයාගැනීම ප්රොක්සි කිරීමයි, එය වෙනත් තොප්පියක් පැළඳි Layer 2 පාලමකි.
දෙවන, වඩා නිහඬ අසාර්ථකත්වයක් ඇති අතර, එය රූටය බලෙන් ලබා දීමට උත්සාහ කරන අයව අල්ලා ගනී: කලාපය. ඔබ ස්ථානීයව ටයිප් කරන ඕනෑම කලාපයක් ටනලයේ අතුරුමුහුණත නම් කරයි, ඔබට අවශ්ය ලිපිනය දුරස්ථ LAN අතුරුමුහුණතට බැඳී ඇති අතරතුර. දෙක කිසිදා නොගැළපේ, එබැවින් පැකට් එක දුරස්ථ කෙළවරේ නිවැරදි අතුරුමුහුණත වෙත හරවා යැවිය නොහැක.
ප්රායෝගිකව අසාර්ථකත්වය පෙනෙන්නේ කෙසේද
විෂය පථ දෝෂයක් සඳහා මෙවලම් ප්රතිදානය රූටින් හෝ firewall දෝෂයක් ලෙස කියවේ, එබැවින්ම මිනිසුන් වැරදි ස්ථරයේ අඩ දවසක් ගත කරයි.
| What you run | What you see | What it means |
|---|---|---|
| ping fe80::1 with no zone | Invalid argument on Linux, or a transmit failure on Windows | The stack cannot pick an interface for an ambiguous destination |
| ping -6 -I tun0 fe80::1 | Destination unreachable, or a silent timeout | The address is not on the tunnel link, so there is nothing on-link to answer |
| ssh user@fe80::1 after the tunnel is up | Hangs, then no route to host | The SYN never left the machine in a deliverable form; the server logs nothing |
| ip -6 neigh show dev tun0 | Empty table | No neighbor entry can exist for a link-local host that is not on this link |
| fe80::/64 inside AllowedIPs or route-ipv6 | Config accepted, traffic still dropped | The tunnel carried the packet; the receiving stack refused to forward it |
තෙවන පේළිය වැඩිපුරම කාලය නාස්ති කරයි, මන්ද ප්රතිදානයක් නැති ssh සේවාදායකය සවන් දෙන සේවාවක ගැටලුවක් ලෙස පෙනේ. ඇතුළට යාමට කිසියම් මාර්ගයක් ඇත්නම්, දුරස්ථ පැත්ත පරීක්ෂා කර sshd සියලු ලිපිනවලට බැඳී ඇත්ද නැතහොත් එකකට පමණක්ද යන්න තහවුරු කරන්න.
රූට් වීමට නියමිත ලිපිනයක් භාවිත කරන්න
ටනලය හරහා ළඟා විය යුතු සියල්ල සඳහා, සේවාවට ඒ අරමුණ සඳහාම දුන් ලිපිනය භාවිත කරන්න: ගෝලීය unicast ලිපිනයක්, නැතහොත් fc00::/7 වෙතින් unique-local ලිපිනයක්, හරියටම මෙම අභ්යන්තර අවස්ථාව සඳහා වෙන් කළ පරාසය. සවන්දෙන්නා එය සැබවින්ම බඳිනවාද යන්න තහවුරු කර, ආපසු මාර්ගය සහ සත්කාරකයේ ඕනෑම firewall නියමයක් පරීක්ෂා කරන්න.
අනුමාන කරනවාට වඩා දුරස්ථ සත්කාරකය දෙස බලන්න. ip -6 addr show පවතින ලිපින ලැයිස්තුගත කරයි, ss -6 -ltn ඩීමන් සවන් දෙන්නේ කුමකටද යන්න ලැයිස්තුගත කරයි. fe80:: ට පමණක් බැඳුණු සේවාවක් එහිම කොටසින් පමණක් ළඟා විය හැක, එය සාමාන්යයෙන් කිසිවෙකු හිතාමතා තෝරා නොගත් පෙරනිමියක් වන අතර පරිපාලකගේ එකඟතාවයෙන් වෙනස් කළ හැක.
සේවාව සැබවින්ම නැවත බැඳිය නොහැකි විට, පාලම ජාල ස්ථරය වෙනුවට යෙදුම් ස්ථරයට ඉහළට ගෙන යන්න. දුරස්ථ සත්කාරකයේ රූට් කළ හැකි ලිපිනයක සවන් දෙමින් link-local වෙත සම්බන්ධ වන රිලේ එකක් කිසිදු කොටසක් විහිදුවා නොගෙන ගැටලුව විසඳයි:
socat TCP6-LISTEN:8080,bind=[fd00:1:2::10] TCP6:[fe80::1%eth0]:80මෙහි කලාපය නිවැරදි පැත්තේ, එම සබැඳියේ සැබවින්ම eth0 ඇති සත්කාරකයේ පිහිටා ඇත. ඔබේ සේවාදායකය fd00:1:2::10 සමඟ කතා කරන අතර, එය සාමාන්ය ලෙස රූට් වේ, රිලේ link-local හොප් එක ස්ථානීයව සිදු කරයි. එම උපායමාර්ගයම උපකරණයක වෙබ් UI එකකට හෝ link-local ලිපිනයක් පමණක් ප්රකාශ කරන පැරණි BMC එකකටද ක්රියා කරයි.
පාලම් කිරීම සැබවින්ම පිළිතුර වන විට, සහ කුමක් පරීක්ෂා කළ යුතුද
සමහර යෙදවුම්වලට සැබවින්ම එක් හවුල් කොටසක් අවශ්ය වේ: link-local සොයාගැනීම පමණක් කතා කරන උපාංගයක්, multicast මත රඳා පවතින උපකරණයක්, පැතලි LAN ප්රතිනිර්මාණය කරන රසායනාගාරයක්. එය Layer 2 ගැටලුවක් වන අතර එයට Layer 2 පිළිතුරක් අවශ්ය වේ, උදාහරණයක් ලෙස දුරස්ථ අතුරුමුහුණතට පාලම් කළ tap උපාංගයක් හෝ පැහැදිලි පාලම් ප්රකාරයක් ඇති සේවාදායක නිෂ්පාදනයක්. එය ටනලය හරහා යන broadcast සහ multicast රථවාහනය සහ අන්තයේ සිට අන්තය දක්වා ක්රියා කළ යුතු අසල්වැසි සොයාගැනීම ඔබට වැය කරයි.
රූට් කළ පැතිකඩකට fe80::/64 එකතු කර මෙයට ළං නොවන්න. එය නරකම තත්ත්වය සාදයි: වින්යාසය අවසන් ලෙස පෙනේ, රූට් වගුව සටහනක් පෙන්වයි, සහ සෑම පැකට්ම දෙකම නිවැරදිව හැසිරෙන තැටි දෙකක් අතර කොහේ හෝ ඉවතට හෙළයි.
ping වෙනුවට අතුරුමුහුණතෙන් තහවුරු කරන්න. ip -6 addr show tun0 ටනල් සබැඳිය තමන්ගේම link-local ලිපිනයක් සාදා ගත්තාද යන්න කියයි, ip -6 route get fe80::1%tun0 විෂය පථ සහිත ගමනාන්තයක් සමඟ කර්නලය සැබවින්ම කුමක් කරයිද යන්න කියයි. කර්නලය එම අතුරුමුහුණතේ ගමනාන්තයට ළඟා විය නොහැකි යැයි කියන විට, කිසිදු ටනල් සැකසුමක් එය වෙනස් නොකරයි, සහ පැතිකඩ සංස්කරණය නැවැත්වීමට කාලයයි.
ප්රශ්නය තීරණය කරන කෙටි අනුපිළිවෙල:
- දුරස්ථ සත්කාරකයේ ලිපිනය කියවා එය fe80:: ද නැතහොත් රූට් කළ හැකි උපසර්ගයක් ද යන්න සටහන් කරන්න.
- එය fe80:: නම්, සේවාව නැවත අමුණන්න, එම සත්කාරකයේ රිලේ කරන්න, නැතහොත් කොටස පාලම් කරන්න; රූට් කළ හැකි නම්, රූටය, firewall හෝ බැඳුම් ලිපිනය නිවැරදි කරන්න.
- නැවත පරීක්ෂා කරන සෑම විටම කලාපය නැවත පරීක්ෂා කරන්න, මන්ද පිටපත් කළ විධානය සාමාන්යයෙන් වැරදි අතුරුමුහුණත රඳවා ගනී.
මූලාශ්ර: RFC 4291, IPv6 ලිපින ගෘහ නිර්මාණය.