د WireGuard تونل څخه بهر یو Linux پروسه څنګه چلاوه
یو پروګرام ته خپل شبکهای زمینه ورکړئ ترڅو له بشپړ تونل لرونکي WireGuard کوربه ووځي، بیا هغه لېږد او نښه کولو قواعد سم کړئ چې مخه یې نیسي.
تاسو نشئ کولای چې یو پروګرام د بشپړ تونل لرونکي WireGuard کوربه څخه د لارو په سمولو سره معاف کړئ۔ لارې د منزل له مخې لاره ټاکي، او هغه څه چې تاسو یې معافول غواړئ یوه پروسه ده، نو کرنل د پرتله کولو لپاره څه نه لري۔ د عمل وړ لاره دا ده چې هغې پروسې ته خپله شبکهای زمینه ورکړئ: د خپل انٹرفېس، پتو او ډیفالټ لارې سره یوه نومفضا چې د veth جوړې له مخې له کوربه سره تړلې ده۔ ما دا په Ubuntu 24.04 کې د wireguard-tools 1.0.20210914 سره چلاوه، او نومفضا هیڅکله ستونزه نه وه — ستونزه د کوربه د لېږد تګلاره او د تونل د نښه کولو قواعد وو۔
لومړی هغه ډول زمینه وټاکئ چې تاسو ته یې اړتیا ده
په عمل کې دوه بڼې ښکاري۔ که کوربه بشپړ تونل چلوي او یو پروګرام باید د ISP لارې ووځي، تاسو دویمه نومفضا جوړوئ، له کوربه سره یې تړئ او کوربه ته اجازه ورکوئ چې د هغې لپاره ترافیک ولېږدوي او وژباړي۔ که نومفضا لا دمخه VPN انٹرفېس لري او تاسو یوازې دننه پیلېدونکی امر ته اړتیا لرئ، دا معمولي ip netns exec حالت دی او د لارښوونې ډېره برخه لا بشپړه شوې ده۔
هیڅ یوه بڼه تاسو ته د یوې پروسې ID پورې محدود قاعده نه درکوي۔ Netfilter پتې، پورټونه، نښې او انٹرفېسونه سره نښلوي؛ د هرې پروسې لپاره د لارښوونې جدول نشته۔ نښه کول کولای شي ترافیک وښيي، خو نښه باید هغو بستو ته ولګول شي چې تاسو لا دمخه پیژندلې دي، او دا یوه طبقه ښکته هماغه ستونزه ده۔ نومفضا د هغې پروسې ونې لپاره ټول سټک جلا کوي، او له همدې امله دا معمولي ځواب دی۔
که اړتیا واقعاً دا وي چې له تونل څخه هیڅ ونه وځي، نو پرځای یې تونل ودروئ۔ نومفضا د ګډې قضیې لپاره ده: یو پروګرام بهر، نور ټول دننه، په هماغه ماشین، په هماغه وخت۔
دویمه زمینه جوړه کړئ او له کوربه سره یې وتړئ
یوه بېلګهییزه چوکاټ: کوربه د ډیفالټ لارې راوړونکی WireGuard انٹرفېس لري، او clearnet په نوم شبکهای نومفضا لري، چې د veth جوړې له مخې له کوربه سره تړلې ده۔ لاندې پتې بېلګې دي۔
ip netns add clearnet
ip link add veth-clear-out type veth peer name veth-clear-in
ip addr add 192.168.100.1/24 dev veth-clear-out
ip link set veth-clear-out up
ip link set veth-clear-in netns clearnet
ip netns exec clearnet ip addr add 192.168.100.2/24 dev veth-clear-in
ip netns exec clearnet ip link set veth-clear-in up
ip netns exec clearnet ip route add default via 192.168.100.1
دا نومفضا اوس کولای شي کوربه ته ورسیږي او بل چېرته نه۔ کوربه باید ترافیک ولېږدوي او د سرچینې پته بیا ولیکي، ځکه 192.168.100.0/24 شخصي دی او پورتنۍ لارښوونکي ته د بېرته ننوتلو لاره نشته:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o <wan-interface> -j MASQUERADE
له تګ دمخه د نومفضا خوا تایید کړئ۔ip netns exec clearnet ip route باید veth لاره او له 192.168.100.1 له مخې ډیفالټ لاره وښيي، او هغې پتې ته ping باید ځواب ووایي۔ که کوربه پتې ته ping ناکام شي، پتې یا د تړنې حالت غلط دی او هیڅ فایر وال قاعده به مرسته ونه کړي۔
کله چې نومونه حل شي خو هیڅ نه راځي، FORWARD ولولئ
کلاسیک ناکامي د لارښوونې باګ په څېر ښکاري: نومفضا یو نوم حل کوي، بسته وځي او هیڅ ځواب نه رسیږي۔ په هغو کوربه وو کې چې FORWARD تګلاره یې DROP ده — ډېری ویشل شوي او ډېر کلک عکسونه همداسې کوي — بسته په لاره کې غورځول کیږي، او هغه تېروتنه چې پروګرام چاپوي د فلټر کولو په اړه هیڅ نه وایي۔
له هر څه د زیاتولو دمخه سلسله ولولئ:
iptables -S FORWARD
nft list chain inet filter forward
بیا ترافیک په دواړو لورو ته اجازه ورکړئ، د شمارونکو سره، ترڅو پوه شئ چې قاعده کله هم سره سمون خوړلی که نه:
iptables -A FORWARD -i veth-clear-out -o <wan-interface> -j ACCEPT
iptables -A FORWARD -i <wan-interface> -o veth-clear-out -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
watch -n1 'iptables -L FORWARD -v -n'
هغه قاعده چې د بستې شمارونکی یې صفر وي په لاره کې نه ده۔ یا د انٹرفېسونو نومونه ستاسو له انګېرنې توپیر لري، یا په سلسله کې پخوانۍ قاعده بسته لومړی منلې، غورځولې یا بېرته ګرځولې ده۔ ترتیب سم کړئ، نه د قاعدې متن۔
د ځواب ترافیک هغه نیمه ده چې خلک یې هېروي۔ د بېرته راتلو قاعدې ته هماغه veth نوم او د تړنې حالت سمون ته اړتیا ده، یا که تګلاره پرانیستې وساتئ، ساده انٹرفېس منل۔ یوازې بهر وتلې قاعده اضافه کړئ او اصلي نښه بېرته راځي، پداسې حال کې چې ستاسو نوې قاعده هلته سمه ښکاري۔
د تونل نښه کولو قواعد له نويې لارې لرې وساتئ
دا ګام یو کارکوونکې نومفضا په تېښتونکې نومفضا بدلوي۔ WireGuard ترتیبات معمولاً د فایر وال نښې تګلاره له خپلو لارښوونې قواعدو او یو ځانګړي جدول سره نصبوي، نو بې نښې بستې اصلي جدول ته ورګرځي او نښه شوې بستې د تونل جدول کاروي۔ له نومفضا څخه لېږدول شوی ترافیک د وتلو پر مهال د تګلارې لارښوونې سره ارزول کیږي، او د دې پورې چې هغه قواعد څنګه لیکل شوي، ممکن د تونل جدول ته ورولوی۔
دوه اضافې لارې جلا کوي۔ د نومفضا فرعي شبکه لپاره په mangle سلسله کې ژر بېرته راشئ، او یوه د سرچینې پر بنسټ قاعده اضافه کړئ چې هغه فرعي شبکه په اصلي جدول کې ږدي:
iptables -t mangle -I PREROUTING -s 192.168.100.0/24 -j RETURN
ip rule add from 192.168.100.0/24 lookup main priority 100
زما په کوربه کې لومړیتوب 100 د تونل قواعدو دمخه راځي، نو د هغې سرچینې لپاره عادي جدول فیصله کوي۔ شمېره په ړوند ډول کاپي مه کوئ: هغه لومړیتوبونه چې wg-quick یې نصبوي د نسخو او د IPv4 او IPv6 ترتیباتو ترمنځ توپیر لري، نو وچلوئ ip rule show او هغه لومړیتوب وټاکئ چې ستاسو په ماشین کې د تونل قواعدو دمخه راځي۔
د قواعدو لېست ته د باور کولو پرځای د سرچینې ځانګړې پلټنه سره تایید کړئ:
ip route get 1.1.1.1 from 192.168.100.2
ip netns exec clearnet ip route get 1.1.1.1
که لومړی امر د WireGuard انٹرفېس راپور ورکړي، نو نوې قاعده لا هم د تونل تګلارې دمخه نه ده۔ که د WAN انٹرفېس راپور ورکړي او دویم لا هم veth ډیفالټ ښيي، کوربه او نومفضا سره نه یوځای دي او تاسو باید دواړه لارښوونې جدولونه بیا ولولئ۔
هغه پروسه پیل کړئ چې تړنه پرانیزي
د امر پیلول یوه کرښه ده، خو هغه پروسه پیل کړئ چې واقعاً سوکټ جوړوي۔ip netns exec clearnet curl -s https://ifconfig.me ترټولو کوچنی رښتینی ازموینه ده: هغه پته ښيي چې نومفضا نړۍ ته وړاندې کوي، نه هغه چې کوربه به یې کاروي۔
د یوې خدمت لپاره، نومفضا د لارې له مخې وتړئ ترڅو پروسه په خپل ټول ژوند کې دننه پاتې شي:
[Service]
NetworkNamespacePath=/run/netns/clearnet
ګرافیکي پروګرامونه هغه ځای دی چې یو کرښیزه طریقه په خاموشۍ کې ناکامه کیږي۔ له مینو څخه پیل شوی براوزر ډېری وخت غوښتنه هغه مثال ته ورکوي چې لا دمخه له نومفضا بهر روان دی، نو نوې کړکۍ ښکاري او ترافیک لا هم د تونل له مخې وځي۔ هغه ته جلا پروفایل ورکړئ ترڅو واقعاً نوی مثال جوړ شي، بیا د انګېرنې پرځای د پروسې زمینه وګورئ:
readlink /proc/$(pgrep -f clearnet-profile | head -1)/ns/net
readlink /run/netns/clearnet
دواړه تولیدونه باید سره سمون وخورئ۔ هماغه تایید د هر اوږد روان پروګرام لپاره کار کوي، او دا د هر پروګرام لپاره یو ځل کول ارزښت لري پرته له دې چې انګېرنه وکړئ چې لانچر ستاسو موخه پوره کړې۔
د نومونو حل خپله پریکړه غواړي۔ د نومفضا جوړول هغې ته د حل کوونکي ترتیبات نه ورکوي؛ د هرې نومفضا لپاره فایلونه د دې له مخې ملاتړ کیږي /etc/netns/<name>/resolv.conf، او پرته له هغې تاسو داسې چلند په میراث وړئ چې غلط لوستل یې اسانه دي۔ IPv6 هماغه چلند غواړي: که نومفضا v6 ډیفالټ لاره نه لري او پروګرام v6 غوره کوي، غوښتنې کېدای شي د بېرته تګ دمخه ودریږي، چې د ماتې تونل په څېر ښکاري۔
چوکاټ وګورئ، نه یوازې د وتلو پته
یوه کارکوونکې عامه پته لاره ثابتوي، نه ټوله اړتیا۔ پاتې برخه په دې ترتیب کې ووهئ:
ip netns exec clearnet ip route get 1.1.1.1veth ډیفالټ ښيي، نه WireGuard انٹرفېس۔- کله چې غوښتنه روانه وي د دواړو قواعدو FORWARD شمارونکي زیاتیږي۔
- د پروګرام پروسه هغه نومفضا inode راپور ورکوي چې تاسو ورته تمه لرئ۔
- له بیا پیل وروسته نومفضا د خدمت له پیل دمخه شته؛ هغه unit چې ژر چلیږي ناکامه کیږي، یا بدتر، له نومفضا بهر چلیږي۔
بیا پریکړه وکړئ چې کله تونل ولویږي څه باید وشي۔ نومفضا کار ته دوام ورکوي، چې دا د دې تمرین موخه او همدارنګه خطر دی: معاف شوی پروګرام تړلی پاتې کیږي او نور ټول ودریږي۔ دا د تګلارې انتخاب په توګه ثبت کړئ او روښانه کړئ چې معافي څه نه پوښي — د حساب هویت، ساتل شوی براوزر حالت او ستاسو DNS عرضه کوونکی ټول د شبکهای نومفضا له حوزې بهر دي، او معافي د نامعلومتوب په توګه ګڼل هغه تېروتنه ده چې له ترتیباتو اوږده ژوند کوي۔