Dychmygwch westeiwr Linux sy’n terfynu VPN ac sy’n rhedeg cynhwysydd ar rwydwaith macvlan. Y LAN yw 192.168.60.0/24, mae’r cynhwysydd yn dal 192.168.60.210, ac mae cleientiaid VPN yn dod o 10.95.0.0/24. Mae’r cleient yn cyrraedd y gwasanaeth, nid yw’r ateb byth yn dychwelyd, ac mae pob rheol wal dân ar y gwesteiwr yn edrych yn gywir. Mae dau gyfyngiad ar wahân yn cynhyrchu’r symptom hwnnw, ac mae trwsio un yn gadael y llall yn ei le.

Dau gyfyngiad, un symptom

Y cyfyngiad cyntaf yw ynysu: nid yw gyrrwr macvlan Docker yn caniatáu i gynhwysydd siarad â’i westeiwr ei hun drwy’r rhyngwyneb rhiant. Nid oes llwybr gan y traffig rhwng stac y gwesteiwr a’r cynhwysydd, waeth sut y mae’r llwybrau ar y gwesteiwr yn cael eu hysgrifennu.

Yr ail gyfyngiad yw’r llwybr dychwelyd. Giat ragosodedig y cynhwysydd fel arfer yw llwybrydd y LAN, felly mae ateb a gyfeiriwyd at gleient VPN yn gadael drwy’r llwybrydd hwnnw. Os nad oes gan y llwybrydd lwybr yn ôl i’r pwll VPN, mae’r ateb yn cael ei ollwng rywle yn y canol.

Mae’r ddau fethiant hyn yn edrych yn unfath o safbwynt y cleient: cais sy’n cyrraedd ac ateb nad yw byth yn dod. Mae arnynt angen trwsiadau gwahanol, ac mae rheol masquerade eang yn gallu cuddio pa un sydd wedi torri o hyd. Dyna pam mai’r prawf cyntaf yw cip o’r ochr cynhwysydd yn hytrach na newid wal dân arall. Os nad yw’r cais byth yn ymddangos yno, y cyfyngiad ynysu sydd ar waith.

Adeiladwch y shim ar ochr y gwesteiwr, yn fanwl

Mae ail ryngwyneb macvlan ar y gwesteiwr, wedi’i gysylltu â’r un rhiant mewn modd pont, yn rhoi hunaniaeth ei hun i stac y gwesteiwr ar y segment LAN hwnnw. Cadwch gyfeiriad y tu allan i bwll DHCP a’r tu allan i ystod y cynhwysydd ar ei gyfer, a llwybrwch y cynhwysydd yn unig drwyddo.

ip link add macvlan-vpn link eth0 type macvlan mode bridge
ip address add 192.168.60.250/32 dev macvlan-vpn
ip link set macvlan-vpn up
ip route add 192.168.60.210/32 dev macvlan-vpn src 192.168.60.250

Mae’r gorchymyn cyntaf yn creu’r rhyngwyneb mewn modd pont, sef y rhagosodiad dogfennol ar gyfer y gyrrwr hwn a’r modd rydych ei eisiau ar gyfer traffig gwesteiwr a chynhwysydd. Mae’r ail yn neilltuo /32 fel nad yw’r cyfeiriad yn gwrthdaro â rhagddodiad y LAN, ac mae’r pedwerydd yn anfon cyfeiriad y cynhwysydd yn unig drwy’r shim.

Peidiwch â chyfeirio’r LAN cyfan drwy’r rhyngwyneb newydd. Mae’r llwybr cysylltiedig arferol yn aros fel y mae, ac mae llwybr y gwesteiwr yn fwriadol gyfyng fel bod un cynhwysydd yn cael llwybr heb i weddill y segment newid ei ymddygiad. Byddai llwybr rhagosodedig yn pwyntio at y shim yn ddyluniad gwahanol â chanlyniadau gwahanol. Cadwch ef yn benodol ac mae’r parth difrodi yn aros yn fach.

Mae’r gorchmynion hyn yn newid y rhwydwaith ar westeiwr byw. Ar offeryn neu lwyfan a reolir, defnyddiwch fecanwaith cyfluniad â chymorth y llwyfan hwnnw, oherwydd efallai na fydd newid rhyngweithiol mewn cragen root yn goroesi uwchraddiad.

Penderfynwch sut y cedwir y ffynhonnell

Gyda’r shim yn ei le, gall y cynhwysydd gyrraedd y gwesteiwr, ac mae’r cwestiwn yn dod yn un o ba gyfeiriad ffynhonnell y mae’r ateb yn ei gario. Cadw’r ffynhonnell VPN wreiddiol yw’r model glanach: mae’r cynhwysydd yn gweld cyfeiriad go iawn y cleient, ac mae logiau a rheolau mynediad y gwasanaeth yn gallu ei ddefnyddio.

I hynny weithio, rhaid i gyfluniad rhwydwaith y cynhwysydd anfon traffig ar gyfer 10.95.0.0/24 i 192.168.60.250 fel ei giât ar gyfer y llwybr hwn. Mae hwnnw’n osodiad llwybr neu giât â chymorth y tu mewn i gyfluniad y cynhwysydd ei hun, nid yn dric ar ochr y gwesteiwr. Cadarnhewch ef o du mewn i’r cynhwysydd yn hytrach na thybio bod y gosodiad wedi cymryd effaith. Bydd giat ragosodedig sy’n dal i bwyntio at lwybrydd y LAN yn parhau i anfon atebion i’r un twll.

Os yw’r dyluniad a gymeradwywyd yn cuddio’r ffynonellau VPN yn lle hynny, cwmpaswch y cyfieithiad yn gyfyng: y pwll VPN go iawn, y shim fel y rhyngwyneb allan, a’r cynhwysydd a’r gwasanaeth penodol.

iptables -t nat -A POSTROUTING -s 10.95.0.0/24 -o macvlan-vpn -j SNAT --to-source 192.168.60.250

Parwch y shim fel y rhyngwyneb allan, nid y twnnel. Ni fydd rheol sy’n enwi’r twnnel fel y rhyngwyneb allan yn cyfateb i becyn sy’n mynd tuag at y cynhwysydd, a dyna’r camgymeriad y mae’r math hwn o osodiad fel arfer yn ei gynnwys. Cadwch y rheol mor gyfyng â’r frawddeg uchod ac adolygwch hi pan fydd y pwll yn newid.

Gwiriwch o’r cleient, nid o’r gwesteiwr

Mae cais o’r gwesteiwr ei hun, wedi’i rwymo i gyfeiriad y shim, yn profi y gall y shim gyrraedd y cynhwysydd. Nid yw’n profi y gall y cynhwysydd ddychwelyd traffig i ffynhonnell 10.95.0.x a gadwyd, oherwydd cyfeiriad y shim ei hun yw cyfeiriad y ffynhonnell yn y prawf hwnnw.

curl -sS --interface 192.168.60.250 -o /dev/null -w '%{http_code}\n' http://192.168.60.210:8080/health
sudo tcpdump -ni macvlan-vpn host 192.168.60.210

Mae’r gorchymyn cyntaf yn profi’r rhan o’r gwesteiwr i’r cynhwysydd, ac mae’r ail yn dangos beth sy’n croesi’r shim mewn gwirionedd tra bo cleient VPN go iawn yn gwneud y cais. Edrychwch ar gyfeiriad y ffynhonnell ar y ffordd i mewn ac a yw ateb yn ymddangos gyda’r un llif.

Rhaid i anfon ymlaen fod wedi’i alluogi ar y gwesteiwr, ac mae angen caniatâd ar y llwybr anfon ymlaen ar gyfer y pwll VPN tuag at y shim ar borth y gwasanaeth ynghyd ag atebion sefydledig. Nid yw rheol INPUT ar y gwesteiwr yn awdurdodi traffig a anfonir ymlaen, a dyna reswm cyffredin dros ollwng y pecyn ar ôl i’r llwybro edrych yn gywir.

Rhedwch y cymhwysiad go iawn gyda chymwysterau go iawn, yna gwiriwch fod ail wasanaeth, heb gysylltiad, ar yr un cynhwysydd yn dal i’ch gwrthod. Os mai’r unig ffordd i’w wneud i weithio oedd agor pob rheol anfon ymlaen, nid yw’r dyluniad wedi’i orffen. Nodwch hefyd pa gyfeiriad ffynhonnell y cofnododd y gwasanaeth, oherwydd dyna fydd ei reolau mynediad ei hun yn ei ddefnyddio o hyn ymlaen.

Erthyglau cysylltiedig