Два VPN-а на једном Linux рачунару: тестирајте сваки одвојено без мешања резултата
Две зелене иконе нису поређење. Ставите сваки тунел у сопствени именски простор, прво запишите очекивање и докажите путању пре него што поверујете резултату.
Две зелене иконе везе изгледају као поређење и обично су случајност. Ако је тестни захтев могао користити било који од два тунела, резултат у најбољем случају описује један од њих, а у најгорем ниједан. Дајте сваком посматрању мрежни контекст, предвиђено одредиште и очекивање записано пре покретања теста. На 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 о именским просторима, али конфигурација пребацивања услуге имена и сваки локални разрешивач који она покрене и даље могу повући претрагу назад на хост.
Један тунел истовремено, други искључен
Повежите A преко његовог постојећег власника док B остаје искључен, затим из административног контекста прегледајте политику, руте и изабрану путању. Три од наредби испод читају стање; само последња контактира услугу имена, и ниједна од њих не шаље захтев апликације.
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Снимак решава спорове које резултат апликације не може: показује да ли је захтев изашао кроз интерфејс који сте очекивали или кроз нешто сасвим друго. За сваки прелаз запишите дејство власника, временску ознаку, резултат руте, резултат имена и исход апликације. Затим проверите захтев за безбедно затварање унутар погођеног именског простора, јер изолација није прекидач. Именски простор држи два тунела одвојено; не спречава ниједан од њих да носи саобраћај када његов профил каже да саобраћај мора да стане.
Шта овај запис може и шта не може да тврди
Успех доказује та посматрања за овај распоред, на овом хосту, у то време. Не каже ништа о два клијента који деле једну табелу рутирања радне површине, ни о пропусној моћи док оба тунела носе терет. То су одвојена питања са одвојеним тестовима, и поређење је добро онолико колико је добар контекст приложен сваком реду.
Држите неуспехе у запису поред успеха, означене тиме који је тунел тада био укључен. Чиста страница која скрива стање у тренутку мерења гора је од ружне која га показује. Запис чини поново употребљивим контекст, а не резултат.
Два тунела на једном рачунару могу се поштено упоредити, али само у онолико контекста колико сте их заиста контролисали. Све преко тога је жеља са зеленом иконом поред.