Mae'r gosodiad yn edrych fel switsh fesul cymhwysiad, felly mae pobl yn rhwymo'r cleient i ryngwyneb WireGuard ac yn disgwyl mai dim ond y cleient hwnnw fydd yn defnyddio'r twnnel. Yr hyn y mae'r rhwymo yn ei wneud mewn gwirionedd yw dewis cyfeiriad ffynhonnell. Yna mae'r cnewyllyn yn chwilio am lwybr i'r cyrchfan, yn dod o hyd i'r llwybr diofyn arferol, ac yn anfon y pecyn allan drwy'r cyswllt corfforol gyda chyfeiriad y twnnel ynghlwm. Dim ond llwybr a ddewiswyd ar gyfer y cyfeiriad ffynhonnell hwnnw sy'n cwblhau'r bwriad.

Mae dau hanner i'r mecanwaith: tabl llwybro na ddylai ond traffig y twnnel ei ddefnyddio, a rheol sy'n anfon y ffynhonnell gyfatebol yno.

Mae rhwymo yn gosod cyfeiriad ffynhonnell, dim mwy

Mae Linux yn dewis rhyngwyneb allan drwy chwilio am y gyrchfan mewn tabl llwybro, ar ôl i reolau polisi gael cyfle i ailgyfeirio'r chwiliad hwnnw. Gall rheolau ddewis yn ôl cyfeiriad ffynhonnell, marc mur tân, y rhyngwyneb sy'n dod i mewn, UID neu hyd yn oed porth; mae pob un yn ffordd arall o ddweud y traffig hwn yn hytrach na'r cyfan. Mae ffurfweddiad y cleient VPN yn dewis y tabl sy'n dal llwybrau'r twnnel; mae'r rheol yn dewis pa draffig a ganiateir i ymgynghori ag ef. Nid yw rhwymo ar ei ben ei hun yn darparu'r un ohonynt.

Dyna pam mae'r methiant yn edrych mor rhyfedd. Mae'r cymhwysiad yn bendant yn defnyddio cyfeiriad y twnnel, mae'r twnnel yn bendant i fyny, ac mae'r traffig yn bendant yn gadael drwy'r rhyngwyneb anghywir. Mae pob datganiad yn wir, ac gyda'i gilydd maent yn disgrifio system lle nad oedd dim wedi cysylltu'r cyfeiriad â'r llwybr.

Rhowch dabl ei hun i'r twnnel

Mae wg-quick yn gosod llwybrau ble bynnag y dywed y proffil wrthi. Mae ychwanegu Table = 40 o dan [Interface] yn eu symud i dabl 40 yn lle'r prif dabl. Codwch y rhyngwyneb a chadarnhau iddynt gyrraedd: dylai ip -4 route ls table 40 ddangos llwybrau'r twnnel, ac mae ip -4 route get 10.66.127.142 yn dangos sut mae'r cnewyllyn yn datrys un ohonynt ar hyn o bryd. Gyda'r llwybrau yn eu tabl eu hunain, mae'r prif dabl yn parhau i weithio ar gyfer popeth arall.

Gwnewch yr un peth ar gyfer IPv6 yn hytrach na chyfateb rhagddodiad eang. Mae ip -6 rule add from fd00::2/128 lookup 40 yn pinio un cyfeiriad; gall fc00::/8 wrthdaro â rhyngwynebau eraill ar y gwesteiwr a chynhyrchu rheol sy'n cyfateb i fwy na'r bwriadedig.

Ychwanegwch y rheol ffynhonnell a gwyliwch y cyfrifwyr

Yna cysylltwch y ddau hanner: ip -4 rule add from 10.66.127.142/32 lookup 40, gyda'r un cyfeiriad hwnnw ynghlwm wrth ryngwyneb WireGuard. Rhowch y ddwy reol yn PostUp fel bod ailgysylltu yn eu hadfer. Gwiriwch gyda chais go iawn yn hytrach na gosodiad: dylai ip route get 1.1.1.1 from 10.66.127.142 enwi dyfais y twnnel, a dylai curl --interface wg0 ifconfig.me adrodd cyfeiriad y twnnel yn hytrach na'r un cartref.

Pan fydd yn dal i fethu, darllenwch ip -s rule. Mae rheol sy'n bodoli ond nad yw erioed wedi cyfateb yn dangos cyfrifwyr sero, ac mae hynny'n gwahaniaethu rheol anghywir rhag dim rheol o gwbl. Mae'r un gorchymyn hwnnw'n arbed llawer o ddyfalu ynghylch a wnaeth y cymhwysiad anwybyddu ei osodiad rhyngwyneb.

Yr achos gwrthdro: cadw SSH allan o'r twnnel

Mae'r broblem wrthgyferbyniol yr un mor gyffredin: mae wg-quick yn berchen ar y llwybr diofyn ac mae sesiwn SSH i'r gweinydd yn marw ynghanol y sesiwn. Mae ei reolau yn eistedd ar rif blaenoriaeth isel, felly rhaid gwerthuso eithriad yn gynt na nhw. Mae ip rule add dport 22 ipproto tcp table main priority 123 yn gwneud hynny ar iproute2 diweddar; lle nad yw'r detholydd ar gael, marciwch y llif yn nftables a chyfateb y marc yn lle hynny.

Gwiriwch lwybr yr ateb hefyd. Mae sesiwn SSH sy'n sefydlu ac yna'n mynd yn dawel fel arfer â llwybro anghymesur, gydag un cyfeiriad yn gadael drwy'r twnnel a'r llall drwy'r rhyngwyneb corfforol. Mae ip route get ar gyfer cyfeiriad y gweinydd yn dweud wrthych i ba ffordd yr âi'r ateb.

Cofnodwch rif y tabl, y rheol ffynhonnell a'r eithriad yn y proffil ei hun. Mae'r tri yn perthyn i un cynllun a byddant yn cael eu golygu gyda'i gilydd.

Erthyglau cysylltiedig