Linux හි යැවීම සක්රීය කිරීමෙන් පසු IPv6 පෙරනිමි මාර්ගය අතුරුදන් විය
IPv6 යැවීම සක්රීය කළ විට කර්නලය uplink හි රවුටර දැන්වීම් නොසලකා හරියි, ඉගෙනගත් පෙරනිමි මාර්ගය කල් ඉකුත් වේ. accept_ra සමඟ එය නිවැරදි කරන්න.
VPN සේවාදායකයන්ගේ ගමන් ප්රවාහය යැවීමට හැකි වන පරිදි මම Debian ද්වාරයක net.ipv6.conf.all.forwarding=1 සකස් කළෙමි, සුමාන භාගයකට පසු එම යන්ත්රයට IPv6 පෙරනිමි මාර්ගයක් ඉතිරිව නොතිබුණි. ඉහළ රවුටරය ක්රියා කරමින් තිබුණි, link-local අසල්වැසියා තවමත් පිළිතුරු දුන්නේය, uplink එහි ගෝලීය ලිපිනය තවමත් රඳවාගෙන තිබුණි. නැවතුණේ එම අතුරුමුහුණතෙහි රවුටර දැන්වීම් දිගටම ලබා ගැනීමට කර්නලයේ ඇති සූදානමයි. sysctl ලියූ මොහොතේ මාර්ගය අතුරුදන් නොවීය; RA වෙතින් ඉගෙනගත් පෙරනිමි මාර්ගයේ ආයුෂ අවසන් වූ විට එය අතුරුදන් විය, කිසිවක් එය නැවුම් නොකළේය.
මුල් බැල්මට කිසිවක් කැඩී ඇති බවක් නොපෙනුණි. යැවීම ක්රියා කළේය, පැරණි මාර්ගය හැඹිලියේ ඇති තාක් සේවාදායකයන් ගමන් කළහ, දෝෂය එය ඇති කළ වෙනසට වඩා ප්රමාද විය. එම ප්රමාදය නිසාම වරද ඉහළ පැත්තට හෝ කිසිදා සම්බන්ධ නොවූ ගිනිපවුරු නියමයකට පැටවේ.
කිසිදු sysctl එකක් ස්පර්ශ කිරීමට පෙර මාර්ග වගුව කියවන්න
ip -6 route show default සමඟ ආරම්භ කර ද්වාරය පමණක් නොව ගුණාංග ද කියවන්න. RA වෙතින් ඉගෙනගත් පෙරනිමි මාර්ගය proto ra ලෙස සලකුණු වී, මුල්යතාවක් දරා, expires ගණන් කිරීමක් පෙන්වයි. අතින් එකතු කළ මාර්ගයේ ඒවා කිසිවක් නැත, එම වෙනස කියන්නේ මාර්ගය හිමි යාන්ත්රණය කුමක්ද කියාය.
$ ip -6 route show default
default via fe80::1 dev eth0 proto ra metric 1024 expires 1432sec hoplimit 64 pref mediumපසුව ලිපිනය දෙස බලන්න: ip -6 addr show dev eth0. පැයවලින් මනිනු ලබන මනාප සහ වලංගු ආයුෂ ඇති ගෝලීය ලිපිනයක්, මිනිත්තුවලින් මනිනු ලබන රවුටර ආයුෂ ඇති පෙරනිමි මාර්ගයට වඩා දිගු කල් පවතී. ලිපිනය ඇතිව පෙරනිමි මාර්ගය නැති වීම දැන්වීම් ගැටලුවක සලකුණයි. ලිපිනය ද නැත්නම් පළමුව සබැඳිය, උපසර්ග තොරතුරු හෝ අනුපිටපත් ලිපින හඳුනාගැනීම වෙත යා යුතුය.
යැවීම RA සැකසීම අක්රීය කරන්නේ ඇයි
RA යනු 134 වර්ගයේ ICMPv6 පැකට්ටුවක් වන අතර, එය 255 හොප් සීමාවක් සහිත link-local මූලාශ්රයකින් යවනු ලැබේ. කර්නලය එය භාවිත කිරීමට පෙර අතුරුමුහුණතේ accept_ra පරීක්ෂා කරයි. පෙරනිමි අගය 1 වන අතර, 1 යනු ඔව් නොවේ. එහි අර්ථය: මෙම සත්කාරකය යැවීම නොකරන තාක් පමණක් පිළිගන්න. forwarding=1 සකසන්න, එම කොන්දේසිය ඉටු නොවේ, එබැවින් එහි ඇති කිසිදු උපසර්ගයක් හෝ පෙරනිමි රවුටරයක් සලකා බැලීමට පෙර දැන්වීම ඉවත් කෙරේ.
අගයන් තුනක් ඇති අතර, යැවීමෙන් ඉතිරි වන්නේ තුන්වැන්න පමණි:
accept_ra | forwarding=0 | forwarding=1 |
|---|---|---|
| 0 | ignored | ignored |
| 1 (default) | accepted | ignored |
| 2 | accepted | accepted |
තවත් කොඩි දෙකක් සැබවින්ම ස්ථාපනය වන දෙය තීරණය කරයි. accept_ra_defrtr දැන්වීමේ පෙරනිමි රවුටරය මාර්ගයක් වේද යන්න පාලනය කරයි, accept_ra_pinfo උපසර්ග තොරතුරු ලිපින වින්යාසයට භාවිත වේද යන්න පාලනය කරයි. accept_ra_defrtr අක්රීය කිරීම යැවීම කරන සත්කාරකයේ පෙරනිමි මාර්ගයක් නොඉගෙන SLAAC ලිපින තබා ගැනීමේ සාමාන්ය ක්රමයයි. මෙය accept_ra ට වඩා වෙනස් උත්තෝලනයක් වන අතර, ලිපින අවශ්ය නමුත් මාර්ගය අවශ්ය නැති විට භාවිත වන්නේ මෙයයි. කර්නලයේ IP sysctl යොමුව තුනම ලැයිස්තුගත කරයි.
විධාන තුනකින් තහවුරු කරන්න
පළමුව, පූරණය වී ඇතැයි ඔබ සිතන ගොනුව වෙනුවට ක්රියාත්මක අගයන් කියවන්න:
sysctl net.ipv6.conf.eth0.forwarding net.ipv6.conf.all.forwarding \
net.ipv6.conf.eth0.accept_ra net.ipv6.conf.eth0.accept_ra_defrtrදෙවනුව, දැන්වීම් තවමත් පැමිණෙන බව ඔප්පු කරන්න. ICMPv6 වර්ගයේ බයිටය අනුව පෙරීම ප්රමාණවත් වන අතර, එය අසල්වැසි සොයාගැනීමේ ප්රවාහයේ බිත්තියක් කියවීමෙන් වළක්වයි:
tcpdump -ni eth0 'icmp6 and ip6[40] == 134'මිනිත්තු කිහිපයක් තුළ කිසිවක් නොපෙනුණොත් accept_ra ඔබේ ගැටලුව නොවේ. ඉහළ පැත්ත දැන්වීම නැවැත්වීය, මාර්ගයේ යමක් ICMPv6 පෙරයි, නැතහොත් එම අතුරුමුහුණත ඔබ සිතන කොටසේ ඇත්තෙන්ම නැත. තෙවනුව, ඔබම දැන්වීමක් ඉල්ලා එහි ක්ෂේත්ර කියවන්න:
rdisc6 eth0rdisc6 Debian සහ Ubuntu හි ndisc6 පැකේජයේ එයි. ප්රතිදානයේදී වෙනත් කිසිවක් වෙනස් කිරීමට පෙර රවුටර ආයුෂ සහ මනාපය බලන්න. රවුටර ආයුෂ 0 වන දැන්වීම පෙරනිමි රවුටරය ඉවත් කිරීමේ උපදෙසකි, කිසිදු accept_ra අගයක් එය භාවිත කළ හැකි මාර්ගයක් නොකරයි. මේ ආකාරයෙන්ම පාලම් ආකාරයේ ඉහළ CPE එකක් ද අල්ලා ගනී, එය උපසර්ග බෙදාහරියි නමුත් තමා රවුටරයක් ලෙස කිසිදා ඉදිරිපත් නොකරයි.
uplink පමණක් අවසර දෙන අතුරුමුහුණත කරන්න
ඉහළ පැත්ත පෙරනිමි රවුටරය විය යුතු නම්, යැවීම තිබියදීත් එහි දැන්වීම් පිළිගන්න, වෙනත් කිසිදු තැනක නොව:
# /etc/sysctl.d/60-ipv6-router.conf
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.eth0.accept_ra = 2
net.ipv6.conf.eth0.accept_ra_defrtr = 1සීමා කිරීම වැදගත් වන්නේ Linux හි IPv6 යැවීම සබැඳියකට එකක් නොව එකම ගෝලීය ස්විචයක් වන බැවිනි. net.ipv6.conf.wg0.forwarding ට 1 ලියා පසුව net.ipv6.conf.all.forwarding කියවන්න: ගෝලීය අගය පෙරළෙන අතර සෑම අතුරුමුහුණතක්ම යැවීම ආරම්භ කරයි. ඔබට උමං මාර්ගයේ රවුටරයක් සහ LAN හි සාමාන්ය සත්කාරකයක් එකවර විය නොහැක. සීමා කළ හැක්කේ පිළිගැනීමයි. accept_ra=2 uplink හි තබා උමං සහ LAN අතුරුමුහුණත් 1 හෝ 0 ලෙස තබන්න, උමං හරහා පැමිණි මං මුළා වූ දැන්වීමකට ඒ දෙසට යන පෙරනිමි මාර්ගයක් ස්ථාපනය කළ නොහැකි වන පරිදි.
තාවකාලික sysctl -w ඊළඟ නැවත ඇරඹීම දක්වා නොපවතී, systemd-networkd සහ NetworkManager දෙකම මෙම අගයන් තමන්ගේම වින්යාසයෙන් ලියයි. networkd හි uplink හි .network ගොනුවේ IPv6Forwarding=yes සහ IPv6AcceptRA=yes සකසන්න; කර්නලයේ එම හේතුව නිසාම networkd IPv6Forwarding ගෝලීය ලෙස විස්තර කරයි. NetworkManager හි uplink හි ipv6.method=auto විසින් accept_ra අගය මෙහෙයවයි, එබැවින් පළමු පරීක්ෂාව විශ්වාස නොකර nmcli connection up පසුව sysctl නැවත කියවන්න.
ස්ථිතික විකල්පය වන ip -6 route add default via fe80::1 dev eth0 සැබවින්ම ක්රියා කරයි, ඉහළ රවුටරයට ස්ථාවර link-local ලිපිනයක් ඇති විට එය සාධාරණ පිළිතුරකි. ඔබ අත්හරින දේ පැහැදිලිව දැනගන්න. ස්ථිතික පෙරනිමි මාර්ගය කිසිදා නැවුම් නොවන අතර කිසිදා ඉවත් නොකෙරේ, එබැවින් ඉහළ පැත්ත මාරු කළ පසුවත් එය මළ අසල්වැසියා දෙසට යොමු වේ. RA මාර්ගය ආරක්ෂිතව අසාර්ථක වේ; ස්ථිතික එක නිහඬව අසාර්ථක වේ.
ද්වාරයේ තමන්ගේ නොව යවන ලද පැකට්ටුව පරීක්ෂා කරන්න
ද්වාරයේම ping කිසිදු සේවාදායකයෙකුට භාවිත කළ නොහැකි මාර්ගයක සාර්ථක විය හැක, ද්වාරය මූලාශ්රය නිසාද සාර්ථක විය හැක. සම්බන්ධිත සේවාදායකයකින් පරීක්ෂා කර, පසුව එම සේවාදායකයාගේ ලිපිනය සඳහා තමා කුමක් කරන්නේදැයි ද්වාරයෙන් අසන්න:
# on the VPN client
ping -6 -c 3 2001:4860:4860::8888
# on the gateway, using a client address
ip -6 route get 2001:4860:4860::8888 from fd42:20::2පසුව එක් රවුටර ආයුෂක් රැඳී නැවත බලන්න. ඔබට අවශ්ය ස්ථාවර තත්ත්වය වන්නේ proto ra ලෙස සලකුණු වූ පෙරනිමි මාර්ගයක් වන අතර එහි expires අගය නිතර නැවත සකස් වේ, සමඟ all.forwarding=1. expires ගණන් කිරීම පමණක් කරන්නේ නම්, දැන්වීම් තවමත් කොහේ හරි ඉවත් කෙරෙමින් පවතී, සාමාන්ය වරදකරු වන්නේ ඇරඹුම් වේලාවේ sysctl දැනටමත් ක්රියාත්මක වූ පසු accept_ra නැවත ලියන ජාල කළමනාකරුය.
මෙය වැසීමට පෙර කරුණු හතරක් තහවුරු කරන්න: පෙරනිමි මාර්ගය proto ra වන අතර නැවුම් වෙමින් පවතී, accept_ra=2 අදාළ වන්නේ uplink ට පමණි, නැවත ඇරඹීමෙන් පසුව සහ කළමනාකරු නැවත ඇරඹීමෙන් පසුවත් යැවීම 1 වේ, සහ IPv6 ping සම්පූර්ණ කරන්නේ ද්වාරය නොව සේවාදායකයාය. මාර්ගය නිරෝගීව තිබියදීත් සේවාදායකයා අසාර්ථක වන්නේ නම්, ඊළඟ සැකකරු වන්නේ ආපසු මාර්ගය හෝ ඉහළ ගිනිපවුරයි, දැන්වීම නොවේ.