Ang dalawang berdeng icon ng koneksyon ay mukhang paghahambing at kadalasan ay nagkataon lamang. Kung ang test request ay maaaring gumamit ng alinman sa dalawang tunnel, ang resulta ay inilalarawan sa pinakamabuti ang isa sa kanila at sa pinakamasama ay wala. Bigyan ang bawat obserbasyon ng konteksto ng network, nilalayong destinasyon at inaasahang nakasulat bago tumakbo ang test. Sa isang Linux machine na ikaw mismo ang namamahala, ang mga pinangalanang network namespace ang pinakamurang paraan upang bilhin ang paghihiwalay na iyon.

Ang dalawang berdeng ilaw ay hindi paghahambing

Ang namespace ay naghihiwalay ng routing table, interface at kalagayan ng network stack, kaya ang isang request na nagsimula sa loob ng isa ay hindi maaaring tahimik na humiram ng tunnel ng iba. Ang hindi nito hinihiwalay ay ang processor, pisikal na uplink o ang resolver daemon na tumatakbo sa host. Sa huling puwang na ito nabibigo ang karamihan ng mga test na ito nang walang nakakapansin. Ang isang lookup na lumalabas sa namespace at nagtatanong sa resolver ng host ay nagbabalik ng sagot na walang kaugnayan sa tunnel na sinusubukan.

Ipinapalagay ng pamamaraang ito ang dalawang test namespace na inihanda at inaprubahan na, may gumaganang panlabas na koneksyon at mga sinusuportahang kliyente. Wala itong ginagawa, walang nirerehistro at walang pinapalitan na configuration. Ang hiwalay na virtual machine ay nananatiling tapat na pagpipilian kapag ang kliyente ay nangangailangan ng buong desktop session o tumatanggi na tumakbo sa labas nito.

Itakda ang inaasahan bago ang unang pagtakbo

Magpasya para sa bawat konteksto kung ano ang hitsura ng tagumpay: ang resolver, ang pangalan ng serbisyo, ang inaasahang address at ang pag-uugaling kailangan kapag bumagsak ang tunnel. Itago ang mga planadong halagang iyon sa sarili nilang column, dahil ang rekord na naghahalo ng plano at obserbasyon ay kathang-isip na may timestamp. Ang checklist sa ibaba ang hugis na kailangan ng rekord, at bawat row ay dapat mapunan bago ang unang koneksyon.

TunnelOwnerClient interface inside the namespaceProof commandRequired on disconnect
vpn-athe identity that owns profile A, recorded by nameits own tun device, never the host'sip -n vpn-a -4 route get 10.55.10.20traffic stops; no host-side fallback
vpn-ba separate owner, even when both run on one boxits own tun device in its own namespaceip -n vpn-b -4 route get 10.55.20.20verified separately, never inferred from A

Ang wiring ng resolver ay kailangan ng sarili nitong linya sa rekord na iyon, dahil ito ang field na pinakamalamang na magsinungaling. Ang mga file na nakatali sa namespace, tulad ng /etc/netns/vpn-a/resolv.conf ay lumilitaw sa kanilang karaniwang mga landas kapag tumatakbo ang isang command sa loob ng namespace, tulad ng inilalarawan ng reference ng iproute2 tungkol sa mga namespace, ngunit ang configuration ng pagpapalit ng name service at anumang lokal na resolver na sinisimulan nito ay maaari pa ring hilahin ang isang lookup pabalik sa host.

Isang tunnel sa isang pagkakataon, ang isa ay naka-disconnect

Ikonekta ang A sa pamamagitan ng umiiral na may-ari nito habang nananatiling down ang B, pagkatapos ay siyasatin ang patakaran, mga ruta at ang napiling landas mula sa konteksto ng administrasyon. Tatlo sa mga command sa ibaba ay nagbabasa ng kalagayan; tanging ang huli ang kumokonekta sa isang name service, at wala sa kanila ang nagpapadala ng application request.

sudo ip -n vpn-a -4 rule show
sudo ip -n vpn-a -4 route show table all
sudo ip -n vpn-a -4 route get 10.55.10.20
sudo ip netns exec vpn-a getent ahostsv4 svc-a.lab.internal

Ang route lookup ay sumasagot sa isang hypothetical na tanong tungkol sa destinasyon, kaya hindi nito maipapakita na tinatanggap ng serbisyo ang trapiko. Itago ang dalawang uri ng ebidensyang iyon sa hiwalay na column, dahil ang malusog na ruta sa tabi ng tinanggihang koneksyon ay totoo at karaniwang resulta. Pagkatapos ay magpadala ng isang hindi mapaminsalang awtorisadong request gamit ang tunay na application, inilunsad sa konteksto ng A bilang karaniwang user nitong walang pribilehiyo na buo ang validation ng certificate at authentication ng application, at itala ang resulta kasama ang source address na nakita ng serbisyo. I-disconnect ang A sa pamamagitan ng may-ari nito at ulitin ang buong baseline para sa B, na itinatala ang anumang pagbabago sa configuration na gagawin mo, kung hindi ay hindi na maihahambing ang dalawang baseline.

Parehong naka-up, pagkatapos ay isa-isa nang pababa

Ang steady state ang madaling bahagi. Sa parehong konektadong tunnel, ulitin ang lookup at application request ng bawat konteksto, pagkatapos ay putulin ang isang tunnel at suriin ang isa. Muling kumonekta sa baligtad na pagkakasunod-sunod kapag ang pagkakasunod-sunod ng koneksyon mismo ang tanong.

sudo ip netns exec vpn-a tcpdump -ni any port 443 -c 5
sudo ip netns exec vpn-b getent ahostsv4 svc-b.lab.internal
sudo ip -n vpn-b -4 route get 10.55.20.20

Ang capture ay nagtatakda ng mga pagtatalo na hindi kayang itakda ng resulta ng application: ipinapakita nito kung ang request ay lumabas sa interface na inaasahan mo o sa isang bagay na ganap na iba. Para sa bawat transition itala ang aksyon ng may-ari, ang timestamp, ang resulta ng ruta, ang resulta ng pangalan at ang resulta ng application. Pagkatapos ay suriin ang pangangailangan ng ligtas na pagsasara sa loob ng apektadong namespace, dahil ang paghihiwalay ay hindi kill switch. Ang namespace ay nagpapanatiling hiwalay ang dalawang tunnel; hindi nito pinipigilan ang alinman sa kanila na magdala ng trapiko kapag sinasabi ng profile nito na dapat tumigil ang trapiko.

Ano ang maaari at hindi maaaring iangkin ng rekord na ito

Ang pagpasa ay nagpapatunay sa mga obserbasyong iyon para sa kaayusang ito, sa host na ito, sa oras na iyon. Wala itong sinasabi tungkol sa dalawang kliyenteng nagbabahagi ng isang desktop routing table, at wala rin tungkol sa throughput habang parehong nagdadala ng karga ang dalawang tunnel. Iyon ay hiwalay na mga tanong na may hiwalay na test, at ang paghahambing ay kasinghusay lamang ng kontekstong nakakabit sa bawat row.

Itago ang mga pagkabigo sa rekord sa tabi ng mga tagumpay, may label kung aling tunnel ang naka-up noon. Ang malinis na pahinang nagtatago ng kalagayan sa sandali ng pagsukat ay mas masahol kaysa sa pangit na nagpapakita nito. Ang nagpapaging muling magagamit ang rekord mamaya ay ang konteksto, hindi ang iskor.

Ang dalawang tunnel sa isang machine ay maihahambing nang tapat, ngunit sa loob lamang ng kasing dami ng kontekstong aktwal mong kinontrol. Anumang higit pa doon ay isang hiling na may berdeng icon sa tabi.

Kaugnay na mga artikulo