Ni allwch eithrio rhaglen o westeiwr WireGuard â thwnnel llawn drwy olygu llwybrau. Mae llwybrau'n dewis llwybr yn ôl cyrchfan, a'r hyn rydych am ei eithrio yw proses, felly nid oes gan y cnewyllyn unrhyw beth i'w baru. Y dull ymarferol yw rhoi i'r broses honno ei chyd-destun rhwydwaith ei hun: gofod enwau â'i ryngwyneb, ei gyfeiriadau a'i lwybr diofyn ei hun, wedi'i gysylltu â'r gwesteiwr gan bâr veth. Bûm yn rhedeg hyn ar Ubuntu 24.04 gyda wireguard-tools 1.0.20210914, ac nid oedd y gofod enwau erioed yn broblem — polisi anfon y gwesteiwr a rheolau marcio'r twnnel oedd y broblem.

Dewiswch y math o gyd-destun sydd ei angen arnoch yn gyntaf

Mae dau ffurf i'w gweld yn ymarferol. Os yw'r gwesteiwr yn rhedeg twnnel llawn ac mae un rhaglen i adael ar hyd llwybr yr ISP, byddwch yn adeiladu ail ofod enwau, yn ei gysylltu â'r gwesteiwr ac yn gadael i'r gwesteiwr anfon a chyfieithu'r traffig ar ei gyfer. Os yw gofod enwau eisoes yn cario rhyngwyneb VPN ac mai dim ond gorchymyn a gychwynnir y tu mewn iddo sydd ei angen arnoch, dyma'r achos arferol o ip netns exec ac mae'r rhan fwyaf o'r gwaith llwybro eisoes wedi'i wneud.

Nid yw'r un o'r ddau ffurf yn rhoi rheol sy'n gyfyngedig i un rhif adnabod proses. Mae Netfilter yn paru cyfeiriadau, porthladdoedd, marciau a rhyngwynebau; nid oes tabl llwybro fesul proses. Gall marcio lywio traffig, ond rhaid cymhwyso'r marc i becynnau rydych eisoes wedi'u hadnabod, sef yr un broblem un haen yn is. Mae gofod enwau'n gwahanu'r pentwr cyfan ar gyfer y goeden broses honno, a dyna pam ei fod yn ateb arferol.

Os mai'r gofyniad mewn gwirionedd yw nad oes dim yn gadael y twnnel, stopiwch y twnnel yn lle hynny. Mae'r gofod enwau yn bodoli ar gyfer yr achos cymysg: un rhaglen allan, popeth arall i mewn, ar yr un peiriant, ar yr un pryd.

Adeiladwch yr ail gyd-destun a'i gysylltu â'r gwesteiwr

Cynllun darluniol: mae gan y gwesteiwr ryngwyneb WireGuard sy'n cario'r llwybr diofyn, a gofod enwau rhwydwaith o'r enw clearnet wedi'i gysylltu â'r gwesteiwr gan bâr veth. Mae'r cyfeiriadau isod yn enghreifftiau.

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

Gall y gofod enwau hwn nawr gyrraedd y gwesteiwr a dim byd arall. Rhaid i'r gwesteiwr anfon y traffig ac ailysgrifennu'r cyfeiriad ffynhonnell, oherwydd mae 192.168.100.0/24 yn breifat ac nid oes gan y llwybrydd uwchraddol lwybr yn ôl iddo:

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

Cadarnhewch ochr y gofod enwau cyn mynd ymhellach.ip netns exec clearnet ip route dylai ddangos y llwybr veth a'r llwybr diofyn drwy 192.168.100.1, ac fe ddylai ping i'r cyfeiriad hwnnw ateb. Os yw ping i gyfeiriad y gwesteiwr yn methu, mae'r cyfeiriadau neu gyflwr y cyswllt yn anghywir ac ni fydd unrhyw reol tân yn helpu.

Pan fydd enwau'n datrys ond dim yn dychwelyd, darllenwch FORWARD

Mae'r methiant clasurol yn edrych fel nam llwybro: mae'r gofod enwau'n datrys enw, mae'r pecyn yn gadael, ac nid oes ateb byth yn cyrraedd. Ar westeiwyr sydd â pholisi FORWARD o DROP — mae sawl dosbarthiad a'r rhan fwyaf o ddelweddau caledgedig yn gwneud hyn — mae'r pecyn yn cael ei ollwng ar y ffordd drwodd, ac nid yw'r gwall y mae'r rhaglen yn ei argraffu'n dweud dim am hidlo.

Darllenwch y gadwyn cyn ychwanegu unrhyw beth:

iptables -S FORWARD
nft list chain inet filter forward

Yna derbyniwch y traffig yn y ddau gyfeiriad, gyda chyfrifwyr, fel y gallwch weld a fu'r rheol yn cyfateb erioed:

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'

Nid yw rheol â chyfrifydd pecynnau sero ar y llwybr. Naill ai mae enwau'r rhyngwynebau'n wahanol i'r hyn a dybiasoch, neu mae rheol flaenorol yn y gadwyn wedi derbyn, gollwng neu ddychwelyd y pecyn yn gyntaf. Trwsiwch y drefn, nid testun y rheol.

Traffig ateb yw'r hanner y mae pobl yn ei anghofio. Mae angen yr un enw veth ar y rheol ddychwelyd ynghyd â chydweddiad cyflwr cysylltiad, neu dderbyniad rhyngwyneb plaen os ydych yn cadw'r polisi'n agored. Ychwanegwch y rheol allan yn unig a daw'r symptom gwreiddiol yn ôl, gyda'ch rheol newydd yn sefyll yno ac yn edrych yn gywir.

Cadwch reolau marcio'r twnnel oddi ar y llwybr newydd

Mae'r cam hwn yn troi gofod enwau sy'n gweithio yn un sy'n gollwng. Mae gosodiadau WireGuard fel arfer yn gosod polisi marc tân ynghyd â'u rheolau llwybro eu hunain a thabl pwrpasol, felly mae pecynnau heb eu marcio'n disgyn yn ôl i'r prif dabl tra bod pecynnau wedi'u marcio'n defnyddio tabl y twnnel. Mae traffig a anfonir o'r gofod enwau'n cael ei werthuso yn erbyn llwybro polisi ar ei ffordd allan, ac yn dibynnu ar sut y cafodd y rheolau hynny eu hysgrifennu gall lanio yn nhabl y twnnel.

Mae dau ychwanegiad yn gwahanu'r llwybrau. Dychwelwch yn gynnar yng nghadwyn mangle ar gyfer isrwyd y gofod enwau, ac ychwanegwch reol seiliedig ar ffynhonnell sy'n rhoi'r isrwyd honno yn y prif dabl:

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

Mae blaenoriaeth 100 yn trefnu o flaen rheolau'r twnnel ar fy ngwesteiwr, felly'r prif dabl sy'n penderfynu ar gyfer y ffynhonnell honno. Peidiwch â chopïo'r rhif yn ddall: mae'r blaenoriaethau y mae wg-quick yn eu gosod yn amrywio rhwng fersiynau a rhwng y gosodiadau IPv4 ac IPv6, felly rhedeqwch ip rule show a dewiswch flaenoriaeth sy'n glanio o flaen rheolau'r twnnel ar eich peiriant.

Gwiriwch gyda chwiliad sy'n benodol i'r ffynhonnell yn hytrach na gadael i'r rhestr reolau eich perswadio:

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

Os yw'r gorchymyn cyntaf yn adrodd rhyngwyneb WireGuard, nid yw'r rheol newydd o flaen polisi'r twnnel eto. Os yw'n adrodd rhyngwyneb WAN tra bod yr ail yn dal i ddangos llwybr diofyn veth, nid yw'r gwesteiwr a'r gofod enwau'n cytuno a dylech ailddarllen y ddau dabl llwybro.

Cychwynnwch y broses sy'n agor y cysylltiad

Mae cychwyn y gorchymyn yn un llinell, ond cychwynnwch y broses sy'n creu'r soced mewn gwirionedd.ip netns exec clearnet curl -s https://ifconfig.me yw'r prawf onest lleiaf: mae'n dangos y cyfeiriad y mae'r gofod enwau'n ei gyflwyno i'r byd, nid yr un y byddai'r gwesteiwr yn ei ddefnyddio.

Ar gyfer gwasanaeth, atodwch y gofod enwau yn ôl llwybr fel bod y broses yn aros ynddo am ei holl oes:

[Service]
NetworkNamespacePath=/run/netns/clearnet

Rhaglenni graffeg yw'r man lle mae'r dull un llinell yn methu'n dawel. Mae porwr a gychwynnir o fwydlen yn aml yn rhoi'r cais i enghraifft sy'n rhedeg y tu allan i'r gofod enwau yn barod, felly mae'r ffenestr newydd yn ymddangos ac mae'r traffig yn dal i adael drwy'r twnnel. Rhowch broffil ar wahân iddo fel bod enghraifft newydd yn cael ei chreu mewn gwirionedd, yna gwiriwch gyd-destun y broses yn lle dyfalu:

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

Rhaid i'r ddau allbwn gytuno. Mae'r un gwiriad yn gweithio ar gyfer unrhyw raglen hirhoedlog, ac mae'n werth ei wneud unwaith fesul rhaglen yn hytrach na thybio bod y lansiwr wedi gwneud yr hyn roeddech yn ei olygu.

Mae datrys enwau angen ei benderfyniad ei hun. Nid yw creu gofod enwau yn rhoi cyfluniad datryswr iddo; mae ffeiliau fesul gofod enwau'n cael eu cefnogi drwy /etc/netns/<name>/resolv.conf ac heb un rydych yn etifeddu ymddygiad sy'n hawdd ei gamddarllen. Mae IPv6 angen yr un driniaeth: os nad oes gan y gofod enwau lwybr diofyn v6 tra bod y rhaglen yn ffafrio v6, gall ceisiadau aros cyn cwympo'n ôl, sy'n edrych fel twnnel wedi torri.

Gwiriwch y ffrâm, nid cyfeiriad allan yn unig

Mae cyfeiriad cyhoeddus sy'n gweithio'n profi'r llwybr, nid y gofyniad cyfan. Cerddwch drwy'r gweddill yn y drefn hon:

  • ip netns exec clearnet ip route get 1.1.1.1 yn dangos llwybr diofyn veth, nid rhyngwyneb WireGuard.
  • Mae cyfrifwyr FORWARD ar y ddwy reol yn cynyddu tra bod cais yn rhedeg.
  • Mae proses y rhaglen yn adrodd inode y gofod enwau rydych yn ei ddisgwyl.
  • Ar ôl ailgychwyn mae'r gofod enwau'n bodoli cyn i'r gwasanaeth gychwyn; mae uned sy'n rhedeg yn gynt yn methu, neu'n waeth, yn rhedeg y tu allan i'r gofod enwau.

Yna penderfynwch beth ddylai ddigwydd pan fydd y twnnel yn cwympo. Mae'r gofod enwau'n parhau i weithio, sef pwynt yr ymarferiad ac hefyd y risg: mae'r rhaglen eithriedig yn aros yn gysylltiedig tra bod popeth arall yn stopio. Cofnodwch hynny fel dewis polisi, a byddwch yn glir ynghylch yr hyn nad yw'r eithriad yn ei gwmpasu — mae hunaniaeth cyfrif, cyflwr porwr a gadwyd a'ch darparwr DNS i gyd y tu allan i gwmpas gofod enwau rhwydwaith, a thrin yr eithriad fel anhysbysrwydd yw'r camgymeriad sy'n goroesi'r ffurfweddiad.

Erthyglau cysylltiedig