O kò lè yọ ètò kúrò ní olùgbanà WireGuard tí ó ní ojú-ọ̀nà kíkún nípasẹ̀ ṣíṣàtúnṣe àwọn ipa-ọ̀nà. Àwọn ipa-ọ̀nà ń yan ọ̀nà nípa ibi tí a ń lọ, ṣùgbọ́n ohun tí o fẹ́ yọ kúrò ni ìlànà kan, nítorí náà kò sí ohun tí kẹ́ńdù yóò fi wé. Ọ̀nà tí ó ṣiṣẹ́ ni láti fún ìlànà yẹn ní àyíká nẹ́tíwọ́kì tirẹ̀: ààyè orúkọ tí ó ní ìfarahàn, àwọn àdírẹ́sì àti ipa-ọ̀nà àkọ́kọ́ tirẹ̀, tí a so mọ́ olùgbanà pẹ̀lú orísìí veth. Mo ṣe é lórí Ubuntu 24.04 pẹ̀lú wireguard-tools 1.0.20210914, ààyè orúkọ kò sì jẹ́ ìṣòro rí — ìlànà ìfiránṣẹ́ olùgbanà àti àwọn òfin ìsàmì ojú-ọ̀nà ni ìṣòro.

Kọ́kọ́ yan irú àyíká tí o nílò

Ní ìṣe, orísìí méjì ń farahàn. Bí olùgbanà bá ń ṣiṣẹ́ ojú-ọ̀nà kíkún tí ètò kan sì gbọdọ̀ jáde nípasẹ̀ ọ̀nà ISP, ìwọ yóò kọ́ ààyè orúkọ kejì, so ó mọ́ olùgbanà kí olùgbanà sì gbé ìrìnàjò náà kọjá fún un. Bí ààyè orúkọ bá ti ní ìfarahàn VPN tẹ́lẹ̀ tí o sì kàn nílò àṣẹ tí a bẹ̀rẹ̀ nínú rẹ̀, ìyẹn ni ọ̀rọ̀ deede ip netns exec tí ó sì ti ṣe ọ̀pọ̀ iṣẹ́ ìtọ́sọ́nà tẹ́lẹ̀.

Kò sí orísìí kan tí yóò fún ọ ní òfin tí ó ní ààlà sí ID ìlànà kan ṣoṣo. Netfilter ń fi àwọn àdírẹ́sì, ibùdó, àmì àti ìfarahàn wé; kò sí tábìlì ìtọ́sọ́nà fún ìlànà kọ̀ọ̀kan. Ìsàmì lè darí ìrìnàjò, ṣùgbọ́n a gbọdọ̀ fi àmì sórí àwọn pákẹ́tì tí o ti dámọ̀ tẹ́lẹ̀, ìyẹn sì ni ìṣòro kan náà ní ìpele kan nísàlẹ̀. Ààyè orúkọ ya gbogbo àkópọ̀ mọ́ fún igi ìlànà yẹn, ìdí nìyẹn tí ó fi jẹ́ ìdáhùn deede.

Bí ìbéèrè bá jẹ́ pé kò sí ohun tí yóò jáde ní ojú-ọ̀nà, dá ojú-ọ̀nà dúró ní àkókò yẹn. Ààyè orúkọ wà fún ọ̀rọ̀ àdàpọ̀: ètò kan ní ìta, gbogbo ohun mìíràn ní inú, lórí ẹ̀rọ kan náà, ní àkókò kan náà.

Kọ́ àyíká kejì kí o sì so ó mọ́ olùgbanà

Ìtò àpẹẹrẹ: olùgbanà ní ìfarahàn WireGuard tí ó gbé ipa-ọ̀nà àkọ́kọ́, àti ààyè orúkọ nẹ́tíwọ́kì tí a ń pè ní clearnet tí a so mọ́ olùgbanà pẹ̀lú orísìí veth. Àwọn àdírẹ́sì nísàlẹ̀ jẹ́ àpẹẹrẹ.

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

Ààyè orúkọ yẹn lè dé ọ̀dọ̀ olùgbanà báyìí, kò sì lè dé ibòmíì. Olùgbanà gbọdọ̀ gbé ìrìnàjò kọjá kí ó sì tún àdírẹ́sì orísun kọ, nítorí 192.168.100.0/24 jẹ́ ti ara ẹni tí ẹ̀rọ ìtọ́sọ́nà lókè kò ní ipa-ọ̀nà padà sínú rẹ̀:

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o <wan-interface> -j MASQUERADE

Ṣàyẹ̀wò ẹ̀gbẹ́ ààyè orúkọ kí o tó tẹ̀síwájú.ip netns exec clearnet ip route gbọdọ̀ fi ipa-ọ̀nà veth àti ipa-ọ̀nà àkọ́kọ́ nípasẹ̀ 192.168.100.1 hàn, ping sí àdírẹ́sì yẹn sì gbọdọ̀ dáhùn. Bí ping sí àdírẹ́sì olùgbanà bá kùnà, àwọn àdírẹ́sì tàbí ipò ìsopọ̀ kò tọ̀nà, kò sì sí òfin firewall tí yóò ràn ọ́ lọ́wọ́.

Nígbà tí a bá yanjú àwọn orúkọ ṣùgbọ́n kò sí ohun tí ó padà, ka FORWARD

Ìkùnà àtọ̀wọ̀dá dà bí àṣìṣe ìtọ́sọ́nà: ààyè orúkọ yanjú orúkọ, pákẹ́tì jáde, kò sì sí ìdáhùn tí ó dé rí. Lórí àwọn olùgbanà tí ìlànà FORWARD wọn jẹ́ DROP — ọ̀pọ̀ àwọn ìpínlẹ̀ àti ọ̀pọ̀ àwòrán tí a fi le kún ṣe bẹ́ẹ̀ — a ń sọ pákẹ́tì nù ní ọ̀nà, àṣìṣe tí ètò náà tẹ̀ kò sì sọ ohun kan nípa àyọ̀sẹ́.

Ka ẹ̀wọ̀n náà kí o tó fi ohun kan kún un:

iptables -S FORWARD
nft list chain inet filter forward

Lẹ́yìn náà jẹ́ kí ìrìnàjò kọjá ní ẹ̀gbẹ́ méjèèjì, pẹ̀lú àwọn alákà, kí o lè mọ̀ bí òfin náà bá ti bá ara wọn mu rí:

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'

Òfin tí alákà pákẹ́tì rẹ̀ jẹ́ òdo kò sí ní ọ̀nà. Yálà orúkọ àwọn ìfarahàn yàtọ̀ sí ohun tí o rò, tàbí òfin tẹ́lẹ̀ nínú ẹ̀wọ̀n náà gba pákẹ́tì, sọ ọ́ nù tàbí dá a padà ní àkọ́kọ́. Tún ìtẹ̀lé rẹ̀ ṣe, kì í ṣe ọ̀rọ̀ òfin náà.

Ìrìnàjò ìdáhùn ni ìlàjì tí àwọn ènìyàn ń gbàgbé. Òfin ìpadà nílò orúkọ veth kan náà pẹ̀lú ìbámu ipò ìsopọ̀, tàbí gbígba ìfarahàn lásán bí o bá ń pa ìlànà mọ́ ní ṣíṣí. Fi òfin ìjáde nìkan kún un, àmì àkọ́kọ́ yóò padà, nígbà tí òfin tuntun rẹ wà níbẹ̀ tí ó sì dà bí ẹni tí ó tọ̀nà.

Pa àwọn òfin ìsàmì ojú-ọ̀nà mọ́ ní ọ̀nà jíjìnnà sí ipa-ọ̀nà tuntun

Ìgbésẹ̀ yìí yí ààyè orúkọ tí ń ṣiṣẹ́ padà sí èyí tí ń jo. Àwọn ìtò WireGuard sábà máa ń fi ìlànà àmì firewall sọ̀kalẹ̀ pẹ̀lú àwọn òfin ìtọ́sọ́nà wọn àti tábìlì pàtàkì kan, nítorí náà àwọn pákẹ́tì tí kò ní àmì ń padà sínú tábìlì àkọ́kọ́ nígbà tí àwọn tí ó ní àmì ń lo tábìlì ojú-ọ̀nà. Ìrìnàjò tí a gbé kọjá láti ààyè orúkọ ni a ń ṣàyẹ̀wò pẹ̀lú ìtọ́sọ́nà ìlànà nígbà tí ó bá ń jáde, àti nípa bí a ṣe kọ àwọn òfin yẹn, ó lè bọ́ sínú tábìlì ojú-ọ̀nà.

Àfikún méjì ya àwọn ọ̀nà. Padà ní kùtùkùtù nínú ẹ̀wọ̀n mangle fún subneti ààyè orúkọ, kí o sì fi òfin tí ó dá lórí orísun kún un tí yóò fi subneti yẹn sínú tábìlì àkọ́kọ́:

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

Ipò àkọ́kọ́ 100 ń tẹ̀lé ṣáájú àwọn òfin ojú-ọ̀nà lórí olùgbanà mi, nítorí náà tábìlì deede ni ó ń pinnu fún orísun yẹn. Má ṣe da nọ́mbà náà rà tààrà: àwọn ipò àkọ́kọ́ tí wg-quick ń gbé kalẹ̀ yàtọ̀ láàárín àwọn ẹ̀dà àti láàárín ìtò IPv4 àti IPv6, nítorí náà ṣiṣẹ́ip rule show kí o sì yan ipò àkọ́kọ́ tí ó bọ́ ṣáájú àwọn òfin ojú-ọ̀nà lórí ẹ̀rọ rẹ.

Dájú pẹ̀lú wíwá pàtàkì fún orísun dípò gbígbẹ́kẹ̀lé àkójọ àwọn òfin:

ip route get 1.1.1.1 from 192.168.100.2
ip netns exec clearnet ip route get 1.1.1.1

Bí àṣẹ àkọ́kọ́ bá jábọ̀ ìfarahàn WireGuard, òfin tuntun kò tíì sí ṣáájú ìlànà ojú-ọ̀nà. Bí ó bá jábọ̀ ìfarahàn WAN nígbà tí èkejì ṣì ń fi ipa-ọ̀nà àkọ́kọ́ veth hàn, olùgbanà àti ààyè orúkọ kò fohùn ṣọ̀kan, o sì gbọdọ̀ ka àwọn tábìlì ìtọ́sọ́nà méjèèjì lẹ́ẹ̀kan sí i.

Bẹ̀rẹ̀ ìlànà tí ó ń ṣí ìsopọ̀ náà

Bíbẹ̀rẹ̀ àṣẹ ni ìlà kan, ṣùgbọ́n bẹ̀rẹ̀ ìlànà tí ó ń dá sockẹ́tì náà ní ti gidi.ip netns exec clearnet curl -s https://ifconfig.me ni ìdánwò òtítọ́ tí ó kéré jùlọ: ó fi àdírẹ́sì tí ààyè orúkọ ń fi hàn sí ayé, kì í ṣe èyí tí olùgbanà yóò lò.

Fún iṣẹ́ kan, so ààyè orúkọ mọ́ nípasẹ̀ ọ̀nà kí ìlànà náà lè wà nínú rẹ̀ ní gbogbo ìgbésí ayé rẹ̀:

[Service]
NetworkNamespacePath=/run/netns/clearnet

Àwọn ètò àwòrán ni ibi tí ọ̀nà ìlà kan ti ń kùnà ní ìdákẹ́jẹ́. Burausa tí a bẹ̀rẹ̀ láti àkójọ máa ń fi ìbéèrè náà fún ẹ̀dà tí ó ti ń ṣiṣẹ́ ní ìta ààyè orúkọ, nítorí náà fèrèsé tuntun yóò farahàn tí ìrìnàjò yóò sì ṣì jáde nípasẹ̀ ojú-ọ̀nà. Fún un ní profáìlì ọ̀tọ̀ kí ẹ̀dà tuntun lè dà ní ti gidi, lẹ́yìn náà ṣàyẹ̀wò àyíká ìlànà náà dípò sírónú:

readlink /proc/$(pgrep -f clearnet-profile | head -1)/ns/net
readlink /run/netns/clearnet

Àwọn ìjáde méjèèjì gbọdọ̀ bá ara wọn mu. Ìṣàyẹ̀wò kan náà ń ṣiṣẹ́ fún ètò tí ó ń ṣiṣẹ́ pẹ́, ó sì yẹ kí a ṣe é lẹ́ẹ̀kan fún ètò kọ̀ọ̀kan dípò kí a rò pé olùbẹ̀rẹ̀ ṣe ohun tí o ní lọ́kàn.

Yíyanjú orúkọ nílò ìpinnu tirẹ̀. Dídá ààyè orúkọ kò fún un ní ìtò olùyanjú; àwọn fáìlì fún ààyè orúkọ kọ̀ọ̀kan ni a ń ṣe àtìlẹ́yìn nípasẹ̀/etc/netns/<name>/resolv.conf, láìsí rẹ̀ o yóò jogún ìhùwàsí tí ó rọrùn láti kà ní àṣìṣe. IPv6 nílò ìtọ́jú kan náà: bí ààyè orúkọ kò bá ní ipa-ọ̀nà àkọ́kọ́ v6 nígbà tí ètò náà fẹ́ràn v6, àwọn ìbéèrè lè dìdúró kí wọ́n tó padà sẹ́yìn, èyí tí ó dà bí ojú-ọ̀nà tí ó ti bàjẹ́.

Ṣàyẹ̀wò ìlà, kì í ṣe àdírẹ́sì ìjáde nìkan

Àdírẹ́sì gbogbogbò tí ń ṣiṣẹ́ fi ipa-ọ̀nà hàn, kì í ṣe gbogbo ìbéèrè náà. Lọ nígbà tó kù ní ìtẹ̀lé yìí:

  • ip netns exec clearnet ip route get 1.1.1.1 ń fi ipa-ọ̀nà àkọ́kọ́ veth hàn, kì í ṣe ìfarahàn WireGuard.
  • Àwọn alákà FORWARD lórí òfin méjèèjì ń pọ̀ sí i nígbà tí ìbéèrè kan ń lọ.
  • Ìlànà ètò náà ń jábọ̀ inode ààyè orúkọ tí o ń retí.
  • Lẹ́yìn àtúnbẹ̀rẹ̀, ààyè orúkọ wà kí iṣẹ́ náà tó bẹ̀rẹ̀; unit tí ó ń ṣiṣẹ́ ní àkọ́kọ́kọ́ yóò kùnà tàbí, ní ìbànújẹ́ jù, yóò ṣiṣẹ́ ní ìta ààyè orúkọ.

Lẹ́yìn náà pinnu ohun tí ó gbọdọ̀ ṣẹlẹ̀ nígbà tí ojú-ọ̀nà bá ṣubú. Ààyè orúkọ ń tẹ̀síwájú ṣíṣe, ìyẹn ni èròǹgbà ìdánilẹ́kọ̀ọ́ yìí àti pẹ̀lú ewu: ètò tí a yọ kúrò wà ní ìsopọ̀ nígbà tí gbogbo ohun mìíràn dáwọ́ dúró. Kọ ọ́ sílẹ̀ gẹ́gẹ́ bí yíyàn ìlànà kí o sì ṣàlàyé ohun tí àyọkúrò kò bo — ìdánimọ̀ àkọsílẹ̀, ipò burausa tí a fipamọ́ àti olùpèsè DNS rẹ gbogbo wọn wà ní ìta àgbègbè ààyè orúkọ nẹ́tíwọ́kì, gbígbà àyọkúrò gẹ́gẹ́ bí àìdámọ̀ sì ni àṣìṣe tí ó ń gbé pẹ́ ju ìtò lọ.

Àwọn àpilẹ̀kọ tó jọra