Mae pentyrru ail glient OpenVPN ar un gwesteiwr Linux yn methu yn un o ddau le. Naill ai ni all y cllient mewnol gyrraedd ei weinydd ei hun oherwydd bod y twnnel allanol wedi cipio'r cludiant hwnnw, neu mae'r ail glient yn ailysgrifennu'r tabl llwybrau ac mae'r twnnel cyntaf yn stopio gweithio. Mae'r ddau broblem yn y llwybro, nid yn y cryptio, ac mae'r ddau yn cael eu datrys cyn i'r twnnel newydd gario unrhyw draffig cymhwysiad. Mae'r cyfeiriadau yma'n ddarluniadol: tun0 yw'r twnnel allanol, 203.0.113.9 yw'r gweinydd mewnol, a TCP 9999 yw'r llif sy'n rhaid iddo ddefnyddio'r llwybr mewnol.

Dau fodd methu, un tabl llwybrau

Mae cllient mewnol yn agor soced UDP i'w weinydd, ac mae'r soced hwnnw'n dilyn y tabl llwybrau cyfredol fel unrhyw un arall. Os yw'r twnnel allanol eisoes yn berchen ar y llwybr diofyn, mae'r pecynnau ysgwyd llaw yn mynd i'r twnnel allanol. Dim ond pan all y gweinydd allanol gyrraedd y gweinydd mewnol ac mae'r ochr bell yn cytuno i gario'r llif y mae hynny'n gweithio; fel arall mae'r ysgwyd llaw yn aros a'r cllient yn ceisio eto.

Mae'r ail fethiant yn dod o wthiad y gweinydd. Y gwthiad arferol yw redirect-gateway def1, sy'n gosod 0.0.0.0/1 a 128.0.0.0/1 yn lle disodli'r llwybr diofyn. Felly mae dau gleient sy'n gosod eu pâr /1 eu hunain yn gwrthdaro, ac mae'r pâr diweddaraf yn ennill ar gyfer bron pob cyrchfan. Chwiliwch am y ddau ragddodiad hynny yn y tabl pan fydd twnnel yn marw ar ôl i'r ail gysylltu, oherwydd efallai na fydd y llwybr diofyn ei hun erioed wedi newid.

Marciwch y llif a rhowch dabl iddo

Llywiwch y traffig a ddewiswyd drwy ei farcio yn y tabl mangle a chyfateb y marc mewn rheol polisi. Mae'r rheol yn pwyntio at dabl pwrpasol y mae ei llwybr diofyn yn ddyfais fewnol, felly dim ond pecynnau wedi'u marcio sy'n cymryd y llwybr mewnol.

iptables -t mangle -A PREROUTING -p tcp -m multiport --dport 9999 -j MARK --set-mark 0x9999
ip rule add fwmark 0x9999 table 200 pref 1000
ip route add default dev tun1 table 200

Mae'r rhan fwyaf o fethiannau yn y set rheol hon yn dod o ddau gamgymeriad. Rhaid i werth y marc a osodir gan y mur tân a'r gwerth a gyfatebir gan y rheol fod yn union yr un fath, oherwydd nid yw anghysondeb yn cynhyrchu na gwall na sgil. A dim ond pecynnau sy'n cyrraedd o'r tu allan y mae PREROUTING yn eu gweld, felly mae angen rheol OUTPUT â'r un cyfatebiad ar gysylltiad a gychwynnir ar y gwesteiwr hwn cyn iddo gael ei farcio o gwbl.

Tynnwch berchnogaeth llwybrau oddi wrth yr ail glient

Mae dau opsiwn yn atal yr ail glient rhag golygu'r tabl, ac maent yn gweithredu ar wahanol bwyntiau. Mae route-nopull yn anwybyddu'r opsiynau llwybr a wthiwyd, felly ni osodir dim. Mae route-noexec yn derbyn yr opsiynau a wthiwyd i amgylchedd y cllient ond yn gadael y newid tabl i fachyn, sef yr hyn yr ydych ei eisiau pan fydd angen gweld beth a gynigiodd y gweinydd.

Mae'r bachyn yn rhedeg gyda'r gwerthoedd a wthiwyd yn ei amgylchedd, ac ni ddylai ychwanegu ond y cofnodion a gymeradwywyd gennych. Gwnewch ef yn idempotent: fflysiwch y tabl y mae'n berchen arno cyn ailadeiladu, a pheidiwch â chymryd yn ganiataol fod y rhedegad blaenorol wedi gadael cyflwr glân. Mae ailgysylltu yn galw'r bachyn eto, a bydd bachyn sy'n ychwanegu heb glirio yn cronni llwybrau dyblyg.

Dewiswch un perchennog a'i ysgrifennu i lawr. Mae proffil sy'n gosod y ddau opsiwn, neu fachyn sy'n cystadlu â sgript â llaw, yn cynhyrchu tabl na all neb ei egluro yn ddiweddarach.

Piniwch gyfeiriadau'r ddau weinydd

Mae angen llwybr gwesteiwr trwy'r ddyfais allanol ar y gweinydd mewnol cyn i'r cllient mewnol gysylltu. Y cofnod hwnnw sy'n cadw'r cludiant mewnol y tu mewn i'r twnnel allanol yn lle gadael iddo ddilyn y llwybr diofyn.

ip route add 203.0.113.9/32 dev tun0
ip route get 203.0.113.9

Ychwanegwch lwybr gwesteiwr cyfatebol ar gyfer y gweinydd allanol yn y prif dabl hefyd, neu gall ailgysylltiad lwybro cludiant y cllient allanol ei hun i'w dwnnel ei hun. Nid yw'r drefn yn ddewisol: ychwanegwch y cofnodion hyn ar ôl i'r rhyngwyneb perthnasol fodoli, sef trwy fachyn neu sgript sy'n rhedeg ar ôl cysylltu. Mae llwybr sy'n pwyntio at ddyfais sydd i lawr yn cael ei dynnu neu ei anwybyddu, felly nid yw cofnod a ysgrifennwyd wrth gychwyn yn goroesi'r dilyniant a dybiasoch.

Gwiriwch y chwiliad yn lle darllen y tabl cyfan. Mae allbwn chwiliad llwybr yn enwi'r ddyfais a'r cyfeiriad ffynhonnell y bydd y cnewyllyn yn eu defnyddio, sef yn union yr hyn y mae'r cllient yn ei gael pan fydd yn agor ei soced.

Profwch y gadwyn a gwnewch y methiant yn weladwy

Cipiwch ar y rhyngwyneb allanol tra bo'r cllient mewnol yn cysylltu. Dylai'r ysgwyd llaw mewnol ymddangos fel cynnwys wedi'i amgryptio y tu mewn i'r twnnel allanol; os yw'n ymddangos fel UDP plaen i 203.0.113.9, mae'r llwybr gwesteiwr ar goll ac ni chafodd y gadwyn ei hadeiladu erioed.

Cadwyn sy'n dychwelyd yn dawel i'r uplink ffisegol yw'r canlyniad gwaethaf, oherwydd nid yw cyflwr y rhyngwyneb yn cyhoeddi dim ac mae'r traffig mewnol yn gadael o'r cyfeiriad ffynhonnell anghywir. Os gall yr ail glient ailgysylltu'n uniongyrchol pan fydd y twnnel allanol yn cwympo, analluogwch y llwybr hwnnw neu ei rwymo i'r rhyngwyneb allanol fel bod y methiant yn weladwy.

Gorffennwch â dau lif a un dymp rheol: dylai cysylltiad wedi'i farcio ac un heb ei farcio gymryd llwybrau gwahanol, a dylai ip rule show restru'r flaenoriaeth a fwriadwyd gennych. Os yw'r ddau lif yn cymryd yr un llwybr, nid yw'r marc yn cael ei gymhwyso lle'r ydych yn meddwl.

Erthyglau cysylltiedig