Mae un proffil vpnc yn ailgysylltu’n lân ar ôl crwydro; mae tri ohonynt yn eu tro yn torri socedi, llwybrau a chyflwr y datryswr ei gilydd. Mae’r sgript ailgysylltu sydd yn y pecyn wedi’i hysgrifennu ar gyfer un twnnel, felly mae’n ailgychwyn pob proffil pryd bynnag y mae unrhyw un ohonynt i lawr. Mae trwsio hynny angen tri pheth: porthladdoedd lleol ar wahân, prawf sy’n profi gwasanaeth go iawn fesul proffil, ac un gadwyn drefnus nad yw byth yn rhedeg dau gysylltiad ar unwaith.

Rhowch borthladd lleol ei hun i bob proffil

Mae proffil vpnc sy’n cael ei adael ar y porthladd lleol rhagosodedig yn cystadlu â’r proffil sydd eisoes yn rhedeg. Mae’r ail gysylltiad yn methu tra bo’r cyntaf yn dal y porthladd, ac mae llinell y log yn edrych fel problem porth fod, yn hytrach na gwrthdaro lleol. Gosodwch un llinell fesul ffeil proffil yn lle hynny:

Local Port 0

Mae sero yn gadael i’r cnewyllyn ddewis porthladd dros dro, felly gellir sefydlu dau broffil ar yr un pryd. Enwch bob ffeil ar gyfer y porth a’r grŵp y mae’n ei wasanaethu, cadwch hi’n ddarllenadwy gan root yn unig, a chysylltwch bob amser â’r proffil cyfatebol yn hytrach na rhagosodiad a rennir. Ffeil ragosodedig a rennir yw’r ffordd y mae sgript yn ailgysylltu’r twnnel anghywir ar ôl i rywun ailenwi proffil.

Mae ffeiliau proffil yn cario manylion mewngofnodi, felly mae caniatâd yn rhan o’r dyluniad, nid o’r gwaith cadw tŷ. Mae ffeil y gellir ei darllen gan bawb o dan /etc/vpnc yn rhoi cyfrinach y grŵp i bob defnyddiwr lleol. Cadwch y modd yn 0600 gyda root yn berchennog, a gadewch i’r sgriptiau ddarllen y ffeil fel root yn hytrach na chopïo cyfrinachau i ddadleuon. Dyna hefyd pam na ddylai sgript prawf byth adleisio cynnwys y ffeil i log.

Profwch un gwasanaeth fesul proffil, nid cyfeiriad y twnnel

Mae cais adlais i gyfeiriad y twnnel ei hun yn profi bod y rhyngwyneb yn bodoli, gan mwyaf. Nid yw’n dweud dim am a all y gwesteiwr y tu ôl iddo gyrraedd yr ap sy’n cyfiawnhau’r twnnel o hyd. Gall y rhyngwyneb fod i fyny tra bo’r llwybr y tu hwnt iddo eisoes wedi mynd.

Profwch un gwasanaeth fesul proffil gyda throsiad TCP byr ac ailgysylltwch ddim ond y proffil y methodd ei brawf. Mae dwy eiliad yn gwahanu llwybr marw oddi wrth un araf, ac nid yw prawf TCP yn dibynnu ar ICMP gael ei ganiatáu yn unrhyw le ar hyd y ffordd. Newidiwch ddim ond y targed a’r enw cyfluniad rhwng proffiliau:

#!/bin/bash
set -eu
if ! nc -z -w 2 10.63.7.20 8443; then
  /usr/sbin/vpnc-connect ops.conf
fi

Cadwch hynny fel /usr/local/bin/ensure-vpn-ops.sh, gwnewch yn weithredadwy, ac ailadroddwch ar gyfer pob proffil gan newid dim ond targed y prawf a’r enw cyfluniad. Mae prawf sy’n ateb cwestiwn protocol yn goroesi porthon sy’n gollwng adlais tra’n dal i anfon y gwasanaethau y mae defnyddwyr yn poeni amdanynt.

Cadwyniwch y profion fel na fyddant byth yn rasio

Gall y sgript ailgysylltu sydd yn y pecyn alw eich profion yn olynol, a’r dilyniant yw’r holl bwynt. Mae dau alwad vpnc-connect yn rhedeg gyda’i gilydd yn ailysgrifennu’r tabl llwybro mewn trefn nad oes neb yn ei rheoli, a dyna sut y mae proffil iach yn colli ei lwybr.

Cadwch y galwadau heb eu cefnu, ychwanegwch oedi setlo byr ar gyfer y rhyngwyneb sylfaenol, ac amserlennwch y gadwyn o dabl cron root, gan mai dim ond root all ailysgrifennu llwybrau’r twnnel:

#!/bin/bash
sleep 20
/usr/local/bin/ensure-vpn-ops.sh
/usr/local/bin/ensure-vpn-lab.sh

Cadwch y drefn yn union yr un fath rhwng y sgript cychwyn a’r cofnod cron, gan fod cadwyn sy’n rhedeg mewn trefn wahanol wrth gychwyn yn rhaglen wahanol i bob pwrpas. Pan fydd un proffil yn dibynnu ar lwybrau un arall, rhowch y dibyniaeth yn gyntaf a gadewch i’r prawf diweddarach fethu’n ddiniwed tra bo’r twnnel cynharach yn dal i ddod i fyny.

Gwyliwch y log, yna torrwch un yn fwriadol

Logiwch un llinell y ffordd gyda’r proffil, targed y prawf, y canlyniad a’r cam a gymerwyd. Heb hynny, mae twnnel sy’n fflapio bob munud yn edrych yn union fel un na ostyngodd erioed, ac mae nam mewn prawf yn amhosibl ei wahaniaethu oddi wrth fethiant porth. Mae’r log hefyd yn profi mai dim ond y proffil a fethodd y cyffyrddodd y gadwyn ag ef. Ysgrifennwch ef yn rhywle sy’n goroesi ailgychwyn, neu bydd y dystiolaeth yn gadael gyda’r broses.

Yna torrwch dwnnel yn fwriadol a gwyliwch beth sy’n digwydd. Stopiwch un proffil a chadarnhewch pa brosesau a llwybrau sydd yno o hyd:

pgrep -a vpnc
ip -4 route show | grep -E '10[.]63|10[.]90'
tail -n 5 /var/log/ensure-vpn.log

Dim ond y proffil a stopiwyd ddylai gael ei ailgysylltu, a dylai’r sesiynau eraill gadw’u prosesau a’u llwybrau ill dau. Os bydd dau broffil yn ailgychwyn, mae eich cadwyn yn rhedeg yn gyfochrog yn rhywle nad oeddech yn ei ddisgwyl.

Beth na ddylai’r wyliedydd ei wneud

Mae gwyliedydd sy’n ailgychwyn popeth pryd bynnag y metha rhywbeth yn edrych yn iach yn ystod profion ac yn achosi toriad mewn ffenestr waith cynnal. Ailgychwynnwch fesul proffil, byth yn fyd-eang.

Ffafriwch gleient sy’n cael ei gynnal pan fo’r porth yn cynnig un ar gyfer yr un protocol, a pheidiwch byth â chaledgodio cyfrinair yn y sgript nac â’i basio ar linell orchymyn, gan fod y ffeil proffil eisoes yn dal y gyfrinach. Os oes rhaid i dasg redeg fel defnyddiwr cyffredin unwaith y bydd y twnnel i fyny, lleihawch fraint o fewn y sgript yn hytrach na gwneud i’r gadwyn gyfan redeg o dan y cyfrif hwnnw. Yn olaf, ailddarllenwch y llwybrau ar ôl ailgysylltu, gan y gall proffil ddod yn ôl gyda chyfeiriad gwahanol ac yn gadael llwybr hen ffasiwn na fydd unrhyw brawf a anelir at gyfeiriad y twnnel byth yn sylwi arno.

Erthyglau cysylltiedig