සයිට් දෙකක් අතර ටනලයකට IPv6 උපසර්ගයක් එකතු කරන විට, රූප සටහන යෝජනා කරන ආකාරයට පැකට්ටුව ගමන් නොකරයි. දේශීය ගේට්වේ මුළු IPv6 පැකට්ටුවම ගෙන, එය සංකේතනය කර, ඉදිරියෙන් බාහිර IP ශීර්ෂයක් තබයි; එහි ලිපින පවුල තීරණය වන්නේ ඇතුළත ඇති දෙයින් නොව, අන්ත ලිපිනවලින් ය. දුරස්ථ ගේට්වේ එම බාහිර ශීර්ෂය ඉවත් කර මුල් පැකට්ටුව තම LAN වෙත යවයි; එහිදී එය නැවත සාමාන්ය IPv6 පැකට්ටුවකි. බාහිර ටනලය සහ ඇතුළත ගමනාගමනය එක් යතුරක්, එක් අන්ත යුගලයක් සහ අන් කිසිවක් නොබෙදාගන්නා වෙනස් සංවාද දෙකකි.

ශීර්ෂ දෙකක්, ලිපින පවුල් දෙකක්

IPsec ටනල මාදිලියේදී ඇතුළත IPv6 පැකට්ටුව ESP ශීර්ෂය පිටුපස ගෙවුම බවට පත්වේ. එම ESP පැකට්ටුව රැගෙන යන බාහිර ශීර්ෂය IPv4 හෝ IPv6 විය හැක; එය local_addrs සහ remote_addrs අනුගමනය කරයි. WireGuard එම කාර්යයම අඩු චාරිත්ර සමඟ කරයි: ඇතුළත පැකට්ටුව සහකරුගේ අන්තයට යන UDP ඩේටාග්රෑමයේ ගෙවුමයි. දෙකම ඇතුළත ශීර්ෂය නොසලා තබයි; එබැවින් දුරස්ථ පැත්තට විකේතනයෙන් පසු එය මාර්ගගත කළ හැක.

සයිට් අතර මාර්ගය දකින්නේ UDP 4500 පමණි, IPsec NAT තරණය භාවිතා කරන විට, නැතහොත් පෙරනිමි WireGuard ශ්‍රෝතාවට UDP 51820. මාර්ගයේ ඕනෑම රවුටරයක් IPv4 පමණක් විය හැකි අතර IPv6 ගමනාගමනය කෙසේ හෝ තරණය කරයි, මන්ද එය එම මාර්ගයේ කිසිදා IPv6 පැකට්ටුවක් ලෙස නොපෙනේ. එය පිරිසිදු පළමු බෙදීමක් ලබා දෙයි: tcpdump -ni eth0 udp port 51820 සංකේතිත මාර්ගය පෙන්වයි, tcpdump -ni wg0 ip6 ඇතුළත ගමනාගමනය පෙන්වයි. බාහිර ග්රහණය කාර්යබහුල වී ඇතුළත එක නිහඬ නම්, කර්නලය IPv6 ටනලයට දමන්නේ නැත යන්නයි; එය මාර්ගගත කිරීමක් හෝ ප්‍රතිපත්තියක් මිස සබැඳි තත්ත්වයක් නොවේ.

ගේට්වේ ඉදිරියට යවන විට ඇතුළත Hop Limit ද අඩු කරයි; එබැවින් අන්ත IPv6 මාර්ගයේ රවුටර ලෙස ගණන් ගැනේ. බාහිර හොප් ගණන සහ ඇතුළත Hop Limit වෙන වෙනම ගමන් කරයි; දුරස්ථ ගේට්වේදී මිය යන පැකට්ටුව ඉදිරියට යැවීමේදී මිය ගියේය, සංකේතනයේදී නොවේ.

සෙලෙක්ටර සහ AllowedIPs අවසර ලැයිස්තුවයි

IKEv2, child SA හට රැගෙන යා හැකි ඇතුළත උපසර්ග මොනවාදැයි සාකච්ඡා කරයි. strongSwan 5.9 සහ පසුව ඒවා swanctl.conf තුළ ලිවීම මෙසේ දිසේ:

children {
  net6 {
    local_ts  = 2001:db8:aa::/48
    remote_ts = 2001:db8:bb::/48
    mode = tunnel
    esp_proposals = aes256gcm16-prfsha384-ecp384
    start_action = trap
  }
}

local_ts සහ remote_ts මඟ හැරියහොත් strongSwan ඒවා තමන් තෝරාගත් අතුරුමුහුණතේ උප ජාලවලින් ලබා ගනී. ද්විත්ව තට්ටු සත්කාරකයේදී එම කෙටි මාර්ගය බොහෝ විට IPv4 යුගලයක් පමණක් ලබා දෙයි: SA ඉහළ යයි, IPv6 ESP කේතයට ළඟා වීමට පෙර ප්‍රතික්ෂේප වේ. උපසර්ග දෙකම ලිවීම SA ඒවා රැගෙන යාමට සුදුසු කරයි; start_action = trap පළමු ගැලපෙන පැකට්ටුවේදී එය ඉහළ නංවයි.

WireGuard සතුව එක් ලැයිස්තුවක් ඇති අතර එය කාර්යයන් දෙකක් කරයි. සහකරු කොටසේ AllowedIPs = 2001:db8:bb::/48, fd00:bb::/48 යැවීමේදී ස්ථාපනය වන මාර්ගය සහ ලැබීමේදී යොදන පෙරහන යන දෙකම වේ: ඇතුළත මූලය එම සහකරුගේ ලැයිස්තුවෙන් පිටත වැටෙන විකේතිත පැකට්ටුව නිහඬව ඉවත ලනු ලැබේ. wg-quick සෑම සටහනකටම මාර්ගයක් එකතු කරයි; එබැවින් පහළ සහකරු කොටසට වෙනම ip -6 route විධානයක් අවශ්ය නැත.

[Interface]
Address = 2001:db8:aa:ff::1/64, fd00:aa:ff::1/64
ListenPort = 51820

[Peer]
PublicKey = <site-b-public-key>
Endpoint = 203.0.113.20:51820
AllowedIPs = 2001:db8:bb::/48, fd00:bb::/48

ලැයිස්තු දෙකම කැඩපතක් මෙන් විය යුතුය: සයිට් B, සයිට් A හි උපසර්ගය දුරස්ථ සෙලෙක්ටරය ලෙස පිළිගෙන එය නැවත මාර්ගගත කරයි; දිශා දෙකම එකඟ වූ විට පමණක් ටනලය ක්රියා කරයි. අසමමිතික ලැයිස්තුව වැඩිම කාලය ගන්නා ලක්ෂණය ලබා දෙයි — නිරෝගී අත්වැල් ගැසීම, එක් පැත්තක ගමන් කරන ගණක, සහ A සිට B දක්වා සාර්ථක ping, නමුත් B සිට කිසිවක් A වෙත ළඟා නොවේ.

ඉදිරියට යැවීම, මාර්ග සහ ආපසු උපසර්ගය

ඔබ කියන තුරු Linux IPv6 ඉදිරියට නොයවයි; සැකසුම අතුරුමුහුණතට නොව namespace එකට අදාළය:

sysctl -w net.ipv6.conf.all.forwarding=1
ip -6 route add 2001:db8:bb::/48 dev wg0
ip -6 route get 2001:db8:bb::10 from 2001:db8:aa::10

දෙවන පේළිය මාර්ග පාදක නිර්මාණවලදී මිනිසුන්ට අමතක වන්නේ. ප්‍රතිපත්ති පාදක IPsec උපසර්ගවලට ගැලපෙන XFRM ප්‍රතිපත්තියක් ස්ථාපනය කරයි; නමුත් vti6 හෝ WireGuard සහිත මාර්ග පාදක සැකසුමට එම උපාංගය දෙසට යොමු වන සැබෑ IPv6 මාර්ගයක් අවශ්යය. sysctl /etc/sysctl.d/ යටතේ නිත්යව තබන්න; නැතහොත් නැවත ඇරඹීම ඉදිරියට යැවීම නිහඬව අක්රිය කරයි.

ඉදිරියට යැවීමට දැනගත යුතු අතුරු ආබාධයක් ඇත: කර්නලය එවිට රවුටර ප්‍රකාශ නොසලකා හරියි, net.ipv6.conf.<wan>.accept_ra 2 නොවේ නම්; එබැවින් WAN ලිපිනය SLAAC හරහා එන ගේට්වේ, ඉදිරියට යැවීම සක්රිය කරන මොහොතේම තම පෙරනිමි මාර්ගය අහිමි කරගත හැක. එම ගොනුවේම එම අතුරුමුහුණතේ accept_ra = 2 සකසන්න, මාර්ගය ජීවත් වේ. සයිට් B හි මධ්යය ද ටනල ගේට්වේවලින් 2001:db8:aa::/48 ඉගෙන ගත යුතුය, ස්ථාවර මාර්ගයක් හෝ ටනලයට උඩින් මාර්ගගත කිරීමේ ප්‍රොටෝකෝලයක් මගින්, නැතහොත් පිළිතුර B හිම ජාලය තුළම මිය යයි.

බිඳීම ස්ථානගත කරන පියවර හතරක පරීක්ෂාවක්

මෙම අනුපිළිවෙලින් වැඩ කර, අසාර්ථක වන පළමු පියවරේදී නවතින්න; මන්ද සෑම ඊළඟ පියවරක්ම පෙර ඒවා මත රඳා පවතී.

  1. සෙලෙක්ටර: swanctl --list-sas child SA මත IPv6 උපසර්ග යුගලය පෙන්විය යුතුය, නැතහොත් wg show wg0 allowed-ips දුරස්ථ උපසර්ගය නව latest-handshakes සමඟ.
  2. කර්නල මාර්ගය: ip -6 route get 2001:db8:bb::10 ටනල උපාංගය සමඟ පිළිතුරු දිය යුතුය, WAN අතුරුමුහුණත සමඟ නොවේ.
  3. ඇතුළත ග්රහණය: tcpdump -ni wg0 ip6 සැබෑ LAN සත්කාරක අතර ping කරන විට. පිටව යන නමුත් කිසිවක් ආපසු නොඑන පැකට්ටු B හි මාර්ගය හෝ ගිනිපවුර දෙසට යොමු කරයි; පැකට්ටු කිසිසේත් නොමැති වීම පියවර 1 හෝ 2 වෙත ආපසු යොමු කරයි.
  4. ගමනාන්තය: B සත්කාරකයේ ss -6 -ltn සේවාව IPv6 මත සවන් දෙන බව තහවුරු කරයි; දේශීය ගිනිපවුරු ගණක පැකට්ටුව පිළිගත්තේද ඉවත ලූවේද යන්න පෙන්වයි.

MTU එකම වටයට අයත් වේ. IPv6 රවුටර ඛණ්ඩනය නොකරයි; එබැවින් විශාල පැකට්ටුව ඉවත ලනු ලැබේ, Packet Too Big යවන්නා වෙත ආපසු එයි. අත්වැල් ගැසීම් සහ කුඩා ping ක්රියා කරමින් ගොනු මාරුව නතර වුවහොත්, එය පසු කරන තුරු ගෙවුම අඩු කරන්න: ping -6 -s 1400 -c 3 2001:db8:bb::10. WireGuard අතුරුමුහුණත්වල පෙරනිමි MTU බයිට් 1420 කි; IPv4 මත IPsec තවත් අඩු කරන බැවින් ඇතුළත MTU සැකසීම ICMPv6 ඉවත ලන ගිනිපවුරක් හරහා මාර්ග MTU සොයා ගැනීමට බලාපොරොත්තු වීමට වඩා හොඳය.

ගිනිපවුරු ගැටලු ලෙස පෙනෙන අසාර්ථක රටා

වඩාත් පොදු වන්නේ ගිනිපවුරක් නොවේ: සේවාව :: වෙනුවට 0.0.0.0 වෙත බැඳේ, AAAA වාර්තාව පවතී, සහ සේවාලාභියාට IPv6 හරහා ඉක්මන් ප්‍රතික්ෂේපයක් ලැබේ; ද්විත්ව තට්ටු බ්රවුසරය IPv4 වෙත ආපසු ගොස් එය සඟවයි. ඇතැම් යෙදුම් පමණක් අසාර්ථක වුවහොත්, නීති කට්ටලය ස්පර්ශ කිරීමට පෙර සවන් දෙන පවුල පරීක්ෂා කරන්න.

දෙවැන්න ICMPv6 පෙරීමයි. Neighbor Discovery සහ Packet Too Big සාමාන්ය ක්රියාකාරිත්වයේ කොටසකි, රෝග විනිශ්චයේ නොවේ; සියලු ICMPv6 ඉවත ලන ප්‍රතිපත්තියක්, සම්බන්ධ වී, සත්යාපනය වී, පසුව කුඩා පැකට්ටුවකට වඩා විශාල ඕනෑම දෙයක නතර වන ටනලයක් නිර්මාණය කරයි. මාර්ගය රඳා පවතින වර්ගවලට ඉඩ දෙන්න, ඉවත ලෑම පෙනෙන පරිදි ගණක සක්රියව තබන්න.

තෙවැන්න ටනලයට එකතු කරන නමුත් එය අයිති සයිටයේ ලිපින සැලැස්මට කිසිදා නොඑකතු කරන උපසර්ගයකි; එබැවින් කිසිදු රවුටරයක් එය නොප්‍රකාශ කරයි, කිසිදු සත්කාරකයකට එයින් පිළිතුරු දිය නොහැක. එක් උපසර්ගයක් සහ එක් සත්කාරක යුගලයක් සමඟ ආරම්භ කර, දිශා දෙකම පියවර හතරකින් ඔප්පු කර, පසුව ඉතිරිය එකතු කරන්න; කැඩුණු උපසර්ගය නැවත නිර්මාණය වෙනුවට වින්යාසයේ එක් පේළියක් ලෙස රැඳේ. විවෘතව තැබීමට සුදුසු එකම නිල යොමුව RFC 8200 වන අතර, එය ටනලය රැගෙන යන ශීර්ෂය නිර්වචනය කරයි.

අදාළ ලිපි