Бір Linux машинасында екі VPN: нәтижелерді араластырмай әрқайсысын бөлек сынаңыз
Екі жасыл белгіште салыстыру емес. Әр туннельді өз атаулар кеңістігіне қойыңыз, күтуді алдын ала жазып, нәтижеге сенбес бұрын жолды дәлелдеңіз.
Екі жасыл қосылым белгісі салыстыру сияқты көрінеді және әдетте кездейсоқтық. Егер сынақ сұранысы екі туннельдің кез келгенін пайдалана алса, нәтиже ең жақсы жағдайда солардың біреуін, ең нашар жағдайда ешқайсысын сипаттайды. Әр бақылауға желілік контекст, мақсатты мекенжай және сынақ жүргізілмес бұрын жазылған күту беріңіз. Өзіңіз басқаратын Linux машинасында атаулы желілік атаулар кеңістігі осы бөлінуді сатып алудың ең арзан жолы.
Екі жасыл шам салыстыру емес
Атаулар кеңістігі маршруттау кестелерін, интерфейстерді және желілік стек күйін бөледі, сондықтан бірінің ішінде басталған сұраныс екіншісінің туннелін үнсіз қарызға ала алмайды. Ол бөлмейтін нәрсе — процессор, физикалық жоғары арна немесе хостта жұмыс істейтін атауларды шешуші қызмет. Дәл осы соңғы саңылауда бұл сынақтардың көбі ешкім байқамай сәтсіз аяқталады. Атаулар кеңістігінен шығып, хосттың шешушісінен сұрайтын іздеу сынақтағы туннельге еш қатысы жоқ жауап қайтарады.
Бұл рәсім бұрыннан дайындалған және мақұлданған екі сынақ атаулар кеңістігін, жұмыс істейтін сыртқы қосылымды және қолдау көрсетілетін клиенттерді болжайды. Ол ештеңе жасамайды, ештеңе тіркемейді және ешбір конфигурацияны алмастырмайды. Клиентке толық жұмыс үстелі сессиясы қажет болғанда немесе оның сыртында жұмыс істеуден бас тартқанда бөлек виртуалды машиналар адал таңдау болып қалады.
Күтуді алғашқы жүргізуге дейін бекітіңіз
Әр контекст үшін табыстың қандай болатынын шешіңіз: шешуші, қызмет атауы, күтілетін мекенжай және туннель құлағанда талап етілетін мінез-құлық. Осы жоспарланған мәндерді өз бағанында ұстаңыз, өйткені жоспар мен бақылауды араластыратын жазба — уақыт белгісі бар ойдан шығарылған дүние. Төмендегі тексеру тізімі жазбаға қажет пішін және әр жол алғашқы қосылымға дейін толтырылуы тиіс.
| Tunnel | Owner | Client interface inside the namespace | Proof command | Required on disconnect |
|---|---|---|---|---|
| vpn-a | the identity that owns profile A, recorded by name | its own tun device, never the host's | ip -n vpn-a -4 route get 10.55.10.20 | traffic stops; no host-side fallback |
| vpn-b | a separate owner, even when both run on one box | its own tun device in its own namespace | ip -n vpn-b -4 route get 10.55.20.20 | verified separately, never inferred from A |
Шешушінің сымдары сол жазбада өз жолын талап етеді, өйткені бұл өтірік айтуға бейім өріс. Атаулар кеңістігіне байланған файлдар, мысалы /etc/netns/vpn-a/resolv.conf пәрмен атаулар кеңістігінің ішінде орындалғанда әдеттегі жолдарында көрінеді, бұны iproute2-нің атаулар кеңістігі туралы анықтамасы сипаттайды, алайда атау қызметін ауыстыру конфигурациясы және оның іске қосқан кез келген жергілікті шешушісі іздеуді хостқа қайта тарта алады.
Бір уақытта бір туннель, екіншісі өшірулі
B төменде тұрғанда A-ны оның қолданыстағы иесі арқылы қосыңыз, содан кейін әкімшілік контекстен саясатты, маршруттарды және таңдалған жолды тексеріңіз. Төмендегі пәрмендердің үшеуі күйді оқиды; тек соңғысы атау қызметімен байланысады және олардың ешқайсысы қолданба сұранысын жібермейді.
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Маршрут іздеуі мекенжай туралы болжамды сұраққа жауап береді, сондықтан қызметтің трафикті қабылдайтынын көрсете алмайды. Бұл екі дәлел түрін бөлек бағандарда ұстаңыз, өйткені қабылданбаған қосылымның қасындағы сау маршрут нақты және жиі кездесетін нәтиже. Содан кейін нақты қолданбамен бір зиянсыз рұқсат етілген сұраныс жіберіңіз, ол A контекстінде оның әдеттегі артықшылығы жоқ пайдаланушысы ретінде іске қосылады, сертификатты тексеру және қолданба аутентификациясы бұзылмай, және нәтижені қызмет көрген бастау мекенжайымен бірге жазыңыз. A-ны оның иесі арқылы ажыратыңыз және B үшін бүкіл базалық сызықты қайталаңыз, жасаған кез келген конфигурация өзгерісін белгілеңіз, әйтпесе екі базалық сызық салыстыруға жарамды болмай қалады.
Екеуі де жоғары, содан кейін бір-бірден төмен
Тұрақты күй — оңай бөлігі. Екі туннель қосылып тұрғанда әр контекстің іздеуін және қолданба сұранысын қайталаңыз, содан кейін бір туннельді үзіп, екіншісін тексеріңіз. Қосылу ретінің өзі сұрақ болғанда кері ретпен қайта қосылыңыз.
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Түсірілім қолданба нәтижесі шеше алмайтын дауларды шешеді: сұраныстың күткен интерфейсіңізден шыққанын әлде мүлдем басқа нәрседен шыққанын көрсетеді. Әр өту үшін иесінің әрекетін, уақыт белгісін, маршрут нәтижесін, атау нәтижесін және қолданба нәтижесін жазыңыз. Содан кейін зардап шеккен атаулар кеңістігінің ішінде қауіпсіз жабылу талабын тексеріңіз, өйткені оқшаулау өшіргіш түймесі емес. Атаулар кеңістігі екі туннельді бөлек ұстайды; профилі трафик тоқтауы керек десе, ол ешқайсысына трафик тасымалдауға кедергі жасамайды.
Бұл жазба нені мәлімдей алады және нені алмайды
Сәтті өту осы контекстер үшін, осы хостта, сол уақытта сол бақылауларды дәлелдейді. Ол бір жұмыс үстелінің маршруттау кестесін бөлісетін екі клиент туралы ештеңе айтпайды және екі туннель жүк көтеріп тұрғандағы өткізу қабілеті туралы да ештеңе айтпайды. Бұл бөлек сынақтары бар бөлек сұрақтар, ал салыстыру әр жолға тіркелген контекст қаншалықты жақсы болса, соншалықты жақсы.
Сәтсіздіктерді жазбада жетістіктердің қасында ұстаңыз, сол кезде қай туннель қосулы болғанын белгілеңіз. Өлшеу сәтіндегі күйді жасыратын таза бет, оны көрсететін ұсқынсыз беттен де нашар. Жазбаны кейін қайта пайдалануға жарамды ететін нәрсе — контекст, ұпай емес.
Бір машинадағы екі туннельді адал салыстыруға болады, бірақ тек нақты басқарған контекстеріңіздің санындай ғана. Одан артығы қасында жасыл белгісі бар қалау ғана.