ඔබේ iptables රීතිය පාලම හරහා යන VPN ට්රැෆික් කිසිදා නොදකින්නේ ඇයි
පාලම හරහා යන රාමු ඔබ නිරීක්ෂණය කරන IP දාමය මග හැරිය හැක. තවත් රීතියක් එකතු කිරීමට පෙර ස්වදේශීය bridge පවුල පැරණි br_netfilter සමඟ සසඳන්න.
එකම සත්කාරකයේ ඇති අතත්ය යන්ත්ර දෙකක් පාලමක් හරහා LAN වෙත ළඟා වේ, නමුත් ip forward දාමයේ තබා ඇති රීතියක් කිසිදා නොසැලෙන ගණකයක් පෙන්වයි. රාමු සැබෑ ය, රථවාහනය ගලා යයි, සහ රීතිය එහි මාර්ගයේ නොමැත. Linux පාලම් රථවාහනය හෙළිදරව් කරන ක්රම දෙක සංසන්දනය කිරීම මෙම නිහඬතාව පැහැදිලි කරයි, තවද පැරණි මොඩියුලයක් පූරණය කිරීම පෙනෙන තරමටම නරක පිළිතුරක් වන්නේ ඇයි ද යන්න ද පැහැදිලි කරයි.
එක් සත්කාරකයක් හරහා මාර්ග දෙකක්
පැකට්ටුවකට මෙම සත්කාරකය ඉතා වෙනස් ආකාර දෙකකින් හැර යා හැක, එම වෙනස කුමන කොක්ක එය දකින්නේ ද යන්න තීරණය කරයි. ගමනාන්තය භෞතික වරායකින් ඔබ්බට ඇත්නම් සහ රාමුව පාලමේ වරාය දෙකක් අතර මාරු වේ නම්, සත්කාරකය Ethernet රාමුවක් ඉදිරියට යවයි; මාර්ගගත කේතය නොඅසනු ලැබේ, සහ මාර්ගගත පිම්මක් සිදු නොවේ. ගමනාන්තය සත්කාරකය ම වේ නම්, හෝ උමං අතුරුමුහුණතක් හරහා ළඟා වන ජාලයක් වේ නම්, පැකට්ටුව මාර්ගගත වන අතර IP ස්ථරයේ කොක්ක සැබවින්ම අදාළ වේ. මෙම දෙබල මතක තබා ගන්න, මන්ද දාම සහ පවුල් පිළිබඳ සෑම පසු විමසුමක් ම රාමුව මාර්ග දෙකෙන් කවරක් ගනී ද යන්නෙන් හට ගනී.
එම වෙනස කිසිවක් නොගණන රීතියක් පිටුපස ඇති මුළු කතාවයි. veth9a1 සිට enp3s0 දක්වා පාලම් කළ රාමුව IP ගොඩගැස්ම නොව පාලම තරණය කරයි, එබැවින් ip forward දාමයට ගැලපීමට කිසිවක් නොපෙනේ. පැරණි උදාහරණයක අතුරුමුහුණත් නම් ඔබට කවර මාර්ගයක් දැයි තීරණය නොකරයි, එබැවින් පළමු පියවර වන්නේ රීති කට්ටලය නොව ස්ථල විද්යාව දෙස බැලීමයි.
උමං නමක් ලැබිය යුතු තුන්වන අවස්ථාව එකතු කරයි. TUN උපාංගය IP පැකට් සත්කාරකයට භාර දෙයි, එබැවින් ඒවා මාර්ගගත වී සැබවින්ම IP දාම හරහා යයි, නමුත් පාලමකට සම්බන්ධ TAP උපාංගය රාමු භාර දී පාලම් අවස්ථාව මෙන් හැසිරේ. උපාංගයේ වර්ගය තීරණය කරයි, නිෂ්පාදනයේ නම නොවේ.
පාලම් කළ රාමුවක් දැකිය හැකි පවුල් දෙක සසඳන්න
Linux nftables හි bridge පවුල හරහා ස්වදේශීය පාලම් පෙරහන ආධාර කරයි, සහ පියාසර කරන රාමු පරීක්ෂා කර ඉවත් කිරීමට එයට කිසිදු පැරණි මොඩියුලයක් අවශ්ය නොවේ. කර්නලයේ ම පාලම් ලේඛනය මෙම නිර්දේශය සෘජුවම ලබා දෙයි, සෙවුම් ප්රතිඵලයක් ඔබට මොඩියුලයක් පූරණය කරන ලෙස පැවසීමට පෙර එය දැන සිටීම වටී.
| Observation point | What it sees | What it costs |
|---|---|---|
nftables bridge family chains | Ethernet frames forwarded between bridge ports, in both directions | Rules must be written in bridge syntax with link-layer matches |
Legacy br_netfilter plus an ip chain | Bridged IPv4 and IPv6 packets, re-exposed through IP-layer hooks | Existing host rules may begin matching traffic they never saw before |
inet chain for routed traffic | Packets the host routes, including traffic arriving from a TUN device | No visibility into purely switched frames |
iptables වෙනුවට nft විධානය භාවිත කිරීම රීතිය නිවැරදි පවුල තුළට තනිවම නොතබයි. bridge පවුලේ ප්රකාශිත දාමය රාමු දකියි; ip, ip6 හෝ inet හි ප්රකාශිත දාමය ඒවා නොදකියි, එය කවර බයිනරි නිර්මාණය කළත්. පවුල දාමයේ ගුණාංගයකි, එය ටයිප් කළ මෙවලමේ ගුණාංගයක් නොවේ.
පැරණි මාර්ගය වෙනස් ලෙස ක්රියා කරයි, එබැවින් පුරුද්දට පැත්තක් තෝරනවාට වඩා සංසන්දනය කිරීම වටී. br_netfilter පූරණය කර bridge-nf-call සැකසුම් සක්රීය කිරීමෙන් පාලම් කළ IPv4 සහ IPv6 රථවාහනය නැවත IP ස්ථරයේ කොක්ක හරහා හෙළිදරව් වේ, එනම් සාමාන්ය iptables රීතියකට අවසානයේ එය සමඟ ගැලපිය හැක. රාමු වෙනස් නොවේ; ඒවා ගමන් කරන කොක්ක කට්ටලය වෙනස් වේ, එනම් සෑම පවත්නා සත්කාරක රීතියකට දැන් නව ප්රේක්ෂකයන් සිටී.
රීතියක් එකතු කිරීමට පෙර සැබෑ මාර්ගය කියවන්න
විධාන තුනක් ඔබ සිටින්නේ කොහේද යන්න තහවුරු කරයි: පාලම සම්බන්ධ වී ඇත්තේ කුමකටද, පැරණි මොඩියුලය සක්රීය ද, සහ bridge පවුලේ දැනටමත් ඇති දාම මොනවාද. කිසිවක් ලිවීමට පෙර ඒවා ධාවනය කරන්න, මන්ද පිළිතුර තීරණය කරන්නේ ඔබ විස්තාරණය කරන්නේ කුමන නිර්මාණය ද යන්නයි. මෙම පියවර මඟ හැරීම යනු නිවැරදි රීතියක් කිසිවක් නොගමන් කරන දාමයකට වැටෙන ආකාරයයි.
bridge link show
lsmod | grep br_netfilter
nft list ruleset | grep -A4 "chain forward"
ප්රතිදානය අවස්ථා පිරිසිදුව වෙන් කරයි. පාලම යටතේ ලැයිස්තුගත වරායයන් පෙන්වන්නේ කවර අතුරුමුහුණත් මාරු වන්නේ ද යන්නයි; හිස් lsmod ප්රතිඵලයක් යනු පාලම් රාමුවල IP ස්ථරයේ කිසිදු දෘශ්යතාවක් නොමැති බවයි; bridge පවුලේ පවත්නා forward දාමයක් යනු ප්රතිපත්තියේ හිමිකරු දැනටමත් සිටින බවත් ඔබේ රීතිය තමන්ගේ නව දාමයකට නොව එහි අයත් වන බවත් ය.
පසුව නැවත කියවීමට පහසු රීතියක් එකතු කරන්න, ගණකයක් සමඟ සහ තීන්දුව නොවෙනස්ව, සහ එක් නියෝජිත ගැලීමක් පාලම හරහා යවන්න. චලනය වන ගණකය සාක්ෂි දෙන්නේ රාමුව රීතියට ළඟා වූ බවයි. එය සාක්ෂි දෙන්නේ එපමණක් ම ය, එබැවින් ප්රතික්ෂේප කළ මාර්ගය ද අනුගමනය කරන්න, මන්ද සියල්ල පිළිගන්නා ප්රතිපත්තියක් ද චලනය වන ගණකයක් ඇති කරයි.
nft add rule bridge filter forward iifname "veth9a1" oifname "enp3s0" counter acceptපැරණි මොඩියුලය හැසිරීම වෙනස් කරන තැන
ක්රියාත්මක පාලමක් මත පැරණි මාර්ගය සක්රීය කිරීම දෘශ්යතාව එකතු කිරීමේ මධ්යස්ථ ක්රියාවක් නොවේ. පෙර පාලම් රථවාහනයට ළඟා විය නොහැකි වූ රීති ළඟා විය හැකි වේ, වෙනත් අතුරුමුහුණතක් සඳහා ලියූ සත්කාරක රීති ඇතුළුව, සහ ip forward දාමයේ පෙරනිමි drop ප්රතිපත්තියක් පෙර ස්පර්ශ නොවී ගිය රාමු සඳහා හදිසියේම අදාළ විය හැක. එම පාලම හරහා කළමනාකරණය වන සත්කාරකයක, ප්රතිඵලය වන්නේ කොන්සෝලයක් නොමැතිව අගුළු දැමීමයි. මෙය උපකල්පිත අසාර්ථක ආකාරයක් නොවේ; ඔබ දැන් විස්තාරණය කළ මාර්ගය හරහා ළඟා වන යන්ත්රයක කොක්ක කට්ටලයක් විස්තාරණය කිරීමේ සාමාන්ය ප්රතිවිපාකයයි.
වඩාත් ආරක්ෂිත අනුපිළිවෙල වන්නේ කවර පවුල ප්රතිපත්තිය හිමිකර ගනී ද යන්න තීරණය කිරීම, එහි රීති ලිවීම, සහ කිසිදු sysctl එකක් වෙනස් කිරීමට පෙර ස්වාධීන ප්රතිසාධන මාර්ගයක් තබා ගැනීමයි. පවුල් දෙකක් ම රීති තබා ගන්නේ නම්, කවරක් බලය ඇත්තේ දැයි ලේඛනගත කරන්න; එකිනෙක මත ලැබෙන ප්රතිපත්ති දෙකක් යනු කියවීමට එක ම ගොනුවක් නොමැතිව පැකට්ටුවක් එක තැනක පිළිගෙන තව තැනක ඉවත් කරන ආකාරයයි.
හුදකලා කිරීමට ම තවමත් සම්පූර්ණ නිර්මාණයක් අවශ්යයි. එක් මූලාශ්රයකට එක් ගමනාන්තයක් ලබා දීම සාක්ෂි දෙන්නේ එක් ගැලීමක් ක්රියා කරන බව පමණි, නමුත් අවශ්යතාව සාමාන්යයෙන් වන්නේ VM එකකට එහි අසල්වැසියන් හෝ සත්කාරකය ළඟා කර ගත නොහැකි වීමයි. ප්රතික්ෂේප රීතිවල ගණක පිළිගැනීමේ රීතියේ ගණකයට වඩා වැදගත්, මන්ද පිළිගැනීමේ ගණකය යනු ඔබ දැනටමත් චලනය වනු ඇතැයි බලාපොරොත්තු වූ එකයි.
අවසාන වශයෙන්, සත්කාරක ආදාන අවස්ථාව වෙන් කර තබන්න. පාලමේ ම IP වෙත යොමු කළ රථවාහනය forward වෙත නොව input වෙත පැමිණේ, සහ forward හි රීතියක් ඔබ කවර පවුලක් තෝරා ගත්තත් එය කිසිදා නොදකිනු ඇත. අවස්ථා තුනක්, පවුල් දෙකක්, එක් පාඩමක්: මාර්ගය කොක්ක තීරණය කරයි, කොක්ක ඔබේ රීතිය ඇත්තේ ද නැද්ද යන්න තීරණය කරයි.