fwmark සමඟ එක් Linux සත්කාරකයක OpenVPN ග්රාහක දෙකක් සම්බන්ධ කරන්න
ග්රාහක දෙකටම පෙරනිමි මාර්ගය අවශ්යයි. ඇතුළත සේවාදායකය සත්කාරක මාර්ගයකින් සවි කරන්න, දෙවන ග්රාහකය වගු නැවත ලිවීමෙන් වළකින්න, පසුව fwmark සමඟ ප්රවාහ යොමු කරන්න.
එක් Linux සත්කාරකයක් මත දෙවන OpenVPN ග්රාහකයක් එකතු කිරීම ස්ථාන දෙකකින් එකකදී අසාර්ථක වේ. එක්කෝ ඇතුළත ග්රාහකයට තම සේවාදායකයට ළඟා විය නොහැක්කේ පිටත උමඟ එම ප්රවාහනය අල්ලාගෙන ඇති බැවිනි, නැතහොත් දෙවන ග්රාහකය මාර්ග වගුව නැවත ලියන අතර පළමු උමඟ ක්රියා කිරීම නවතී. ගැටලු දෙකම ඇත්තේ මාර්ගගත කිරීමේ මිස සංකේතනයේ නොවේ, සහ නව උමඟ කිසිදු යෙදුම් රහස්ය ප්රවාහයක් රැගෙන යාමට පෙර දෙකම විසඳනු ලැබේ. මෙහි ලිපින නිදර්ශනාත්මකය: tun0 යනු පිටත උමඟය, 203.0.113.9 යනු ඇතුළත සේවාදායකය, සහ TCP 9999 යනු ඇතුළත මාර්ගය භාවිත කළ යුතු ප්රවාහයයි.
අසාර්ථක වීමේ ක්රම දෙකක්, එක් මාර්ග වගුවක්
ඇතුළත ග්රාහකය තම සේවාදායකයට UDP සොකට් එකක් විවෘත කරයි, එම සොකට් එක වෙනත් ඕනෑම එකක් මෙන් වත්මන් මාර්ග වගුව අනුගමනය කරයි. පිටත උමඟ දැනටමත් පෙරනිමිය හිමිකරගෙන සිටී නම්, අත්සන් කිරීමේ පැකට් පිටත උමඟට යයි. එය ක්රියා කරන්නේ පිටත සේවාදායකයට ඇතුළත සේවාදායකයට ළඟා විය හැකි විට සහ අනෙක් පැත්ත ප්රවාහය රැගෙන යාමට එකඟ විට පමණි; නොඑසේ නම් අත්සන් කිරීම නතර වන අතර ග්රාහකය නැවත උත්සාහ කරයි.
දෙවන අසාර්ථකත්වය පැමිණෙන්නේ සේවාදායකයේ push එකෙනි. සාමාන්ය push යනු redirect-gateway def1 වන අතර, එය පෙරනිමි මාර්ගය ප්රතිස්ථාපනය කරනවාට වඩා 0.0.0.0/1 සහ 128.0.0.0/1 ස්ථාපනය කරයි. එබැවින් තමන්ගේම /1 යුගලය ස්ථාපනය කරන ග්රාහක දෙකක් ගැටෙන අතර, නවතම යුගලය සෑම ගමනාන්තයකටම පාහේ ජය ගනී. දෙවැන්න සම්බන්ධ වූ පසු උමඟ මිය ගිය විට වගුවේ එම උපසර්ග දෙක සොයන්න, මන්ද පෙරනිමි මාර්ගයම කිසිදා වෙනස් නොවී තිබිය හැක.
ප්රවාහය සලකුණු කර එයට වගුවක් දෙන්න
තෝරාගත් රහස්ය ප්රවාහය mangle වගුවේ සලකුණු කර ප්රතිපත්ති රීතියේ එම සලකුණ ගැලපීමෙන් යොමු කරන්න. රීතිය පෙරනිමි මාර්ගය ඇතුළත උපාංගය වන කැපවූ වගුවකට යොමු වේ, එබැවින් සලකුණු කළ පැකට් පමණක් ඇතුළත මාර්ගය ගනී.
iptables -t mangle -A PREROUTING -p tcp -m multiport --dport 9999 -j MARK --set-mark 0x9999
ip rule add fwmark 0x9999 table 200 pref 1000
ip route add default dev tun1 table 200මෙම රීති කට්ටලයේ බොහෝ අසාර්ථකතා පැමිණෙන්නේ වැරදි දෙකකිනි. firewall විසින් සකසන සලකුණු අගය සහ රීතිය ගැලපෙන අගය සමාන විය යුතුය, මන්ද වෙනසක් දෝෂයක් හෝ බලපෑමක් ලබා නොදේ. තවද PREROUTING දකින්නේ පිටතින් පැමිණෙන පැකට් පමණි, එබැවින් මෙම සත්කාරකයේ ආරම්භ වන සම්බන්ධතාවයකට සලකුණු කිරීමට පෙර එම ගැලපීමම ඇති OUTPUT රීතියක් අවශ්ය වේ.
දෙවන ග්රාහකයෙන් මාර්ග හිමිකාරිත්වය ලබා ගන්න
විකල්ප දෙකක් දෙවන ග්රාහකයට වගුව සංස්කරණය කිරීම වළක්වන අතර ඒවා විවිධ ස්ථානවල ක්රියා කරයි. route-nopull push කළ මාර්ග විකල්ප නොසලකා හරියි, එබැවින් කිසිවක් ස්ථාපනය නොවේ. route-noexec push කළ විකල්ප ග්රාහකයේ පරිසරයට පිළිගනී නමුත් වගු වෙනස hook එකකට භාර කරයි, සේවාදායකය ලබා දුන් දේ බැලීමට අවශ්ය විට ඔබට අවශ්ය වන්නේ එයයි.
Hook තම පරිසරයේ push කළ අගයන් සමඟ ක්රියා කරයි, එය ඔබ අනුමත කළ සටහන් පමණක් එකතු කළ යුතුය. එය idempotent කරන්න: නැවත ගොඩනැගීමට පෙර එයට අයත් වගුව හිස් කරන්න, සහ පෙර ධාවනය පිරිසිදු තත්ත්වයක් ඉතිරි කළ යැයි නොසිතන්න. නැවත සම්බන්ධ වීම hook නැවත කැඳවයි, පිරිසිදු නොකර එකතු කරන hook අනුපිටපත් මාර්ග එකතු කරයි.
එක් හිමිකරුවෙකු තෝරා එය ලියා තබන්න. විකල්ප දෙකම සකසන පැතිකඩක් හෝ අතින් ලියූ ස්ක්රිප්ටයක් සමඟ තරඟ කරන hook එකක් පසුව කිසිවෙකුට පැහැදිලි කළ නොහැකි වගුවක් නිපදවයි.
සේවාදායක ලිපින දෙකම සවි කරන්න
ඇතුළත ග්රාහකය සම්බන්ධ වීමට පෙර ඇතුළත සේවාදායකයට පිටත උපාංගය හරහා සත්කාරක මාර්ගයක් අවශ්ය වේ. එම සටහන ඇතුළත ප්රවාහනය පෙරනිමිය අනුගමනය කිරීමට ඉඩ නොදී පිටත උමඟ තුළ තබා ගනී.
ip route add 203.0.113.9/32 dev tun0
ip route get 203.0.113.9ප්රධාන වගුවේ පිටත සේවාදායකයටද ගැලපෙන සත්කාරක මාර්ගයක් එකතු කරන්න, නැතහොත් නැවත සම්බන්ධ වීමේදී පිටත ග්රාහකයේම ප්රවාහනය එහිම උමඟට මාර්ගගත විය හැක. අනුපිළිවෙල අත්යවශ්යයි: අදාළ අතුරුමුහුණත පවතින පසු මෙම සටහන් එකතු කරන්න, එනම් සම්බන්ධ වීමෙන් පසු ක්රියා කරන hook එකක් හෝ ස්ක්රිප්ටයක්. වසා ඇති උපාංගයකට යොමු වන මාර්ගයක් ඉවත් කෙරේ හෝ නොසලකා හරිනු ලැබේ, එබැවින් ඇරඹුමේදී ලියන ලද සටහනක් ඔබ උපකල්පනය කළ අනුපිළිවෙලට ඔරොත්තු නොදේ.
සම්පූර්ණ වගුව කියවීමට වඩා සෙවීම පරීක්ෂා කරන්න. මාර්ග සෙවීමේ ප්රතිදානය kernel භාවිත කරන උපාංගය සහ මූල ලිපිනය නම් කරයි, එය ග්රාහකය තම සොකට් විවෘත කරන විට ලබා ගන්නා දෙයයි.
දාමය පරීක්ෂා කර අසාර්ථකත්වය දෘශ්යමාන කරන්න
ඇතුළත ග්රාහකය සම්බන්ධ වන අතරතුර පිටත අතුරුමුහුණතේ ග්රහණය කරන්න. ඇතුළත අත්සන් කිරීම පිටත උමඟ තුළ සංකේතනය කළ ගෙවුමක් ලෙස දිස්විය යුතුය; එය 203.0.113.9 වෙත සාමාන්ය UDP ලෙස දිස්වේ නම්, සත්කාරක මාර්ගය නැති අතර දාමය කිසිදා ගොඩනැගී නැත.
භෞතික uplink වෙත නිහඬව ආපසු යන දාමය නරකම ප්රතිඵලයයි, මන්ද අතුරුමුහුණතේ තත්ත්වය කිසිවක් නොදන්වන අතර ඇතුළත රහස්ය ප්රවාහය වැරදි මූල ලිපිනයකින් පිටවේ. පිටත උමඟ වැටෙන විට දෙවන ග්රාහකයට සෘජුවම නැවත සම්බන්ධ විය හැකි නම්, එම මාර්ගය අබල කරන්න හෝ අසාර්ථකත්වය දෘශ්යමාන වන පරිදි එය පිටත අතුරුමුහුණතට බැඳ දමන්න.
ප්රවාහ දෙකක් සහ එක් රීති ඩම්පයක් සමඟ අවසන් කරන්න: සලකුණු කළ සහ නොකළ සම්බන්ධතා වෙනස් මාර්ග ගත යුතුය, සහ ip rule show ඔබ අදහස් කළ ප්රමුඛතාව ලැයිස්තුගත කළ යුතුය. ප්රවාහ දෙකම එකම මාර්ගය ගන්නේ නම්, සලකුණ ඔබ සිතන තැන යෙදෙන්නේ නැත.