Mae dau gynllun yn addo’r un peth: pan fydd y twnnel yn cwympo, nid oes unrhyw beth yn gadael yn agored. Mae un yn rhedeg sgript wrth ddadfanteisio ac yn torri rhyngwynebau. Mae’r llall yn gadael rheol wal dân mewn grym ac yn gofyn dim i’r cleient VPN. Maen nhw’n wahanol yn y cwestiwn pwy sydd â’r fraint i weithredu, beth sy’n digwydd yn ystod y bwlch, a sut mae’r peiriant yn dod yn ôl ar-lein wedyn. Mae cymharu’r ddau ar y tri phwynt hynny yn fwy defnyddiol na dadlau pa un sy’n lymach.

Yr un gwaith trwy ddau fecanwaith

Gall y cleient redeg bachau pan fydd y twnnel yn codi a phan fydd yn cwympo, ar yr amod bod y proffil yn caniatáu gweithredu sgript. Mae’r bach hwnnw’n rhedeg y tu mewn i gylch bywyd y cleient, ar yr eiliad y mae’r cysylltiad yn cau. Mae rheol wal dân, ar y llaw arall, yn eiddo i’r system ac ni phoeni pa un a yw’r cleient yn rhedeg, wedi chwalu neu wedi’i ladd.

PropertyTeardown scriptFirewall unit
Runs when the client is killedNoYes
Needs privilege at teardown timeUsually yesConfigured once, at boot
Acts on the whole machineOften, including recovery pathsOnly on the flows it matches

Y tabl hwnnw yw’r ddadl gyfan. Mae sgript sy’n rhedeg dim ond ar gau taclus yn cwmpasu’r achos oedd yn poeni lleiaf arnoch; yr achos sy’n bwysig yw’r chwalfa neu’r rhwydwaith yn diflannu, ac nid yw’r naill na’r llall yn cynhyrchu dadfanteisio glân.

Beth all y bach cwympo ei wneud a beth na all

Mae’r patrwm dogfennol yn cerdded y rhyngwynebau rhwydwaith ac yn cwympo popeth ac eithrio loopback. Gyda’r ddyfais ffisegol i lawr, ni all unrhyw beth ddianc y tu allan i’r twnnel, sef yn union y bwriad.

#!/bin/sh
for dev in /sys/class/net/*; do
  name=$(basename "$dev")
  [ "$name" = lo ] || ip link set dev "$name" down
done

Mae hefyd yn cwympo’r rhwydwaith lleol, unrhyw wasanaeth y mae’r peiriant yn ei gynnal, a’r llwybr y byddech yn ei ddefnyddio i drwsio’r broblem. Ar liniadur mae’r ddyfais di-wifr weithiau angen togl â llaw wedyn, felly mae toriad byr yn troi’n sesiwn atgyweirio. Yn waeth, efallai na chaniateir i’r bach wneud unrhyw un o’r pethau hyn: pan fydd y cleient yn gollwng breintiau, mae’r sgript cwympo’n rhedeg o dan y cyfrif heb fraint, ac mae pob newid rhyngwyneb yn methu â gwall caniatâd a ysgrifennir ar yr union foment na fydd neb yn darllen y log.

Gwiriwch sut mae’r cleient yn cael ei gychwyn cyn ymddiried yn y bach. Nid yw sgript sy’n gweithio pan gaiff ei rhedeg â llaw fel root yn profi dim am y gwasanaeth sy’n cychwyn wrth gychwyn y system.

Beth mae’r rheol wal dân yn ei wneud yn wahanol

Mae rheol sy’n caniatáu traffig twnnel yn unig yn parhau i weithio pan fo proses y cleient wedi mynd, oherwydd nid yw’r cnewyllyn yn dibynnu ar y broses honno. Mae’r rheol hefyd yn gulach: mae’n blocio’n union y llifoedd y mae’n cyfateb iddynt ac yn gadael loopback, yr is-rwydwaith lleol a’r llwybr adfer ar eu pennau eu hunain, a dyna pam nad yw’n gadael y peiriant yn y llaid.

Y gost yw bod rhaid i bwy bynnag sy’n berchen ar wal dân y gwesteiwr ysgrifennu’r rheol a’i chadw, a rhaid iddi enwi’r ddyfais twnnel y mae’r cleient yn ei chreu mewn gwirionedd. Mae hynny’n golygu bod rhaid cynnal y rheol a’r proffil gyda’i gilydd; mae rhyngwyneb wedi’i ailenwi yn gadael wal dân sy’n blocio popeth ac yn esbonio dim.

Nid yw’r naill fecanwaith yn gwneud y llall yn ddiangen. Mae rheol wal dân na chaiff ei hail-lwytho byth ar ôl golygu mor ffuglennol â sgript na fydd byth yn rhedeg.

persist-tun sy’n penderfynu a oes bwlch

Pan fydd dyfais y twnnel yn goroesi datgysylltiad, mae’r llwybrau sy’n pwyntio iddi yn goroesi hefyd. Yna mae’r traffig yn cael ei ollwng yn hytrach na’i ailgyfeirio, felly nid yw’r llwybr diofyn yn disgyn yn ôl i’r porth ffisegol. Dyma’r ymddygiad sy’n gwneud gollyngiad yn annhebygol hyd yn oed cyn i unrhyw reol wal dân fod yn rhan o’r peth.

Heb y gosodiad hwnnw, mae’r ddyfais yn cael ei dileu a’r llwybrau gyda hi, ac mae’r llwybr diofyn yn gallu datrys yn ôl i’r porth ffisegol. A yw’n gwneud hynny yn dibynnu ar y platfform a’r cleient, a dyna’n union pam mae’n rhaid arsylwi ar y cyflwr yn hytrach na’i dybio. Triniwch y gosodiad fel rhan o’r kill switch, nid fel opsiwn perfformiad.

Cadwch y llwybr ailgysylltu’n fyw, yna profwch bedwar cyflwr

Gall bloc llym rwystro’r cleient rhag ailgysylltu hefyd, oherwydd mae’r cleient yn dal i fod angen llwybr i’r gweinydd trwy’r porth ffisegol tra bod popeth arall yn cael ei wrthod. Gosodwch lwybr gwesteiwr ar gyfer yr un cyfeiriad hwnnw cyn i’r twnnel godi, a datryswch yr enw’n gyntaf, oherwydd gall DNS fod wedi’i flocio erbyn y bydd ei angen arnoch.

ip route add 198.51.100.20/32 via 192.168.0.1 dev wlan0

Yna gwiriwch y cyflwr yn hytrach na’r label. Ymarferwch bedwar eiliad yn fwriadol: cychwyn oer heb dwnnel, sesiwn iach, cwymp na ofynnodd neb amdano, a’r sesiwn ar ôl iddi wella. Ar bob eiliad darllenwch y llwybr diofyn a gwnewch un cais y mae ei gyfeiriad allan yn weladwy. Nid yw rhaglen sy’n rhoi’r gorau iddi tra bo’r twnnel i lawr yn dweud dim am gleient post nac am ddiweddwr, felly ailadroddwch y gwiriad olaf gydag un rhaglen gefndir. Ysgrifennwch y rheol, enwau’r rhyngwynebau a’r camau adfer, oherwydd mae kill switch na all neb ei wirio yn si’r gwynt.

Erthyglau cysylltiedig