Traffig Docker a VM y tu ôl i OpenVPN: llwybro neu ailrifo?
Mae cynwysyddion a gwesteion ar westywr sy'n rhedeg cleient OpenVPN naill ai'n colli'r llwybr dychwelyd neu'n gwrthdaro â rhagddodiad y tiwnel. Mae tri chwestiwn yn dewis yr ateb.
Mae'r gwestywr yn pori drwy'r tiwnel ac nid yw'r cynhwysydd wrth ei ochr yn cyrraedd dim. Mae cyhoeddi porth o gynhwysydd sy'n rhedeg ei gleient VPN ei hun yn waeth: mae'r cais yn cyrraedd ac nid yw'r ateb byth yn gadael. Mae'r ddau yn benderfyniadau llwybro ar y gwestywr, a negesydd yn unig yw Docker.
Mae tri chwestiwn yn penderfynu pa un o'r ddau rydych yn edrych arno, ac maent yn cymryd tua munud.
Dau fethiant sy'n edrych yr un fath
Y cyntaf yw problem llwybr dychwelyd. Mae porth a gyhoeddwyd yn cael ei gyfieithu i'r cynhwysydd, mae'r cais yn cyrraedd, ac mae'r ateb yn cael ei lwybro drwy lwybr diofyn y gwestywr, y mae'r cleient OpenVPN wedi'i bwyntio at tun0. Mae'r ateb yn gadael o gyfeiriad nad yw'r cymar pell yn ei ddisgwyl, ac mae'n cael ei ollwng. Yr ail yw gwrthdrawiad rhagddodiad: mae pont ddiofyn Docker yn berchen ar 172.17.0.0/16 ac mae tiwnel corfforaethol yn gwthio'r un amrediad.
Mae un yn cael ei thrwsio â thabl llwybro, a'r llall drwy ailrifo pont. Golygu cyn gwybod pa un yw pa un yw'r ffordd i dorri cynhwysydd sy'n gweithio.
Penderfynwch gyda thri chwestiwn
Cwestiwn un: a yw'r methiant yn diflannu pan fyddwch yn atal y VPN? Os yw popeth yn gweithio gyda'r tiwnel i lawr, amau'r llwybr dychwelyd. Cwestiwn dau: a yw ip route show table all yn rhestru'r un rhagddodiad ddwywaith, unwaith ar bont ac unwaith ar tun0? Dyna'r gwrthdrawiad. Cwestiwn tri: a yw'r cyfeiriad yr effeithiwyd arno yn gynhwysydd, yn westai NAT neu'n westai pont?
Mae'r trydydd cwestiwn yn bwysig oherwydd bod gan bob un ateb cywir gwahanol, ac mae cymhwyso ateb y cynhwysydd i westai libvirt yn gwastraffu noson.
ip route
ip route show table all | grep -E '172\.1[7-9]|10\.8'
docker network inspect bridge --format '{{.IPAM.Config}}'Llwybr dychwelyd: tabl ar gyfer un cyfeiriad ffynhonnell
Pan fo'n rhaid i draffig y cynhwysydd adael drwy'r rhyngwyneb ffisegol tra bod y gwestywr ei hun yn defnyddio'r tiwnel, llwybro yn seiliedig ar ffynhonnell yw'r newid lleiaf. Ychwanegwch reol sy'n cyfateb i gyfeiriad y cynhwysydd a'i hanfon i dabl pwrpasol. Nid oes unrhyw beth arall ar y gwestywr yn symud.
ip rule add from 172.22.0.3 lookup 10
ip route add default via 172.22.0.1 table 10Mae pob pecyn y mae ei ffynhonnell yn y cyfeiriad hwnnw yn ymgynghori â thabl 10 yn gyntaf, ac mae tabl 10 yn ei anfon i gyffordd y bont yn lle'r tiwnel.
Cadarnhewch gyda ip route get 1.1.1.1 from 172.22.0.3. Rhaid i'r ateb enwi rhyngwyneb y bont, nid tun0. Mae rheolau a ychwanegir fel hyn yn diflannu ar ailgychwyn, felly rhowch nhw yn yr uned neu'r bachyn rhwydwaith sy'n berchen ar y cynhwysydd.
Mae'r un patrwm yn gweithio ar gyfer cynhwysydd WireGuard, lle mae'r llwybr ateb hefyd angen rheol benodol.
Gwrthdrawiad rhagddodiad: ailrifwch y bont
Mae tabl llwybro'n anfon un rhagddodiad i un lle. Os yw'r VPN yn gwthio 172.17.0.0/16 tra bod pont Docker eisoes yno, y metrig isaf sy'n ennill: mae Docker yn gosod ei lwybr cysylltiedig ar fetrig 0, ac mae'r llwybr a wthiwyd yn cyrraedd ar 50. Yna mae'r tiwnel yn edrych wedi torri tra bod Docker yn dal i weithio, neu'r gwrthwyneb, yn dibynnu ar drefn y gosodiad. Ailrifwch y bont yn lle ymladd â'r metrig.
{
"bip": "10.200.0.1/24",
"default-address-pools": [{"base": "10.201.0.0/16", "size": 24}]
}Ailgychwynnwch Docker ar ôl y newid ac ail-greu'r rhwydweithiau a adeiladwyd gyda'r hen gronfa. Mae newid y metrig yn lle hynny yn symud y gwrthdaro i'r cychwyn nesaf yn unig.
Mae angen ateb gwahanol eto ar VMau
Mae gwestai libvirt ar y rhwydwaith NAT diofyn yn etifeddu llwybro'r gwestywr ac yn stopio cyrraedd y tu allan unwaith y bydd tiwnel y gwestywr yn berchen ar y llwybr diofyn. Mae newid y gwestai i ddyfais bont neu macvtap yn rhoi ei lwybr ei hun iddo ar y rhwydwaith ffisegol. Yn virt-manager, ychwanegwch galedwedd, dewiswch Network, gosodwch y ffynhonnell i ddyfais westeiwr macvtap, cadwch virtio fel y model, yna dadweithredwch y rhyngwyneb NAT hen.
Yn gyffredin ni all gwestai macvtap gyrraedd ei westeiwr ei hun. Ymddygiad disgwyliedig yw hyn yn hytrach na nam, ac mae'n perthyn i'r nodyn a adewch ar ôl.
Ar gyfer gwestai sydd ond angen LAN y gwestywr, efallai bod gan gleient y gwerthwr y switsh coll: gyda Mullvad, mae mullvad lan set allow yn adfer cyrhaeddiad lleol heb gyffwrdd â libvirt. A phan fo rhaid i gynhwysydd fod yn gyrraeddadwy drwy'r tiwnel yn unig, clymwch y porth a gyhoeddwyd i gyfeiriad y tiwnel, -p 10.8.0.5:8080:8080, yn lle cyhoeddi ar bob cyfeiriad.