Два VPN клијента на једном рачунару: шта се судара и шта ради
Два клијента се боре за подразумевану руту, резолвер и филтер драјвере. Забележите ко поседује излаз, а затим одвојте други тунел помоћу VM-а или netns-а.
Ваш други клијент се повезује, ресурси првог престају да се разрешавају, а тикет каже да је радни VPN покварио лични. Ништа није покварено у смислу квара: оба клијента су радила оно за шта су направљена, а машина има само једну табелу рутирања. Судар је око четири ресурса које сваки клијент сматра својим. Прођите кроз њих по реду и поправка обично постаје дизајнерска одлука, а не поправка.
Корак 1: пронађите који клијент поседује излаз
Прочитајте тренутну одлуку о излазу пре него што било шта промените. Претрага руте за јавну адресу говори вам који интерфејс и који следећи хоп би пакет сада користио, и то је одговор на то ко је победио. Упоредите то са именима интерфејса које су клијенти направили, а која обично носе назив производа или протокола. Ако претрага показује на тунел који нисте очекивали, већ сте пронашли судар.
ip route get 1.1.1.1
ip route show default
route print
Неки клијенти уопште не замењују подразумевану руту; додају две половине, једну за доњу половину адресног простора и једну за горњу, које заједно покривају све. То оставља оригиналну подразумевану руту видљивом и чини да ручна поправка изгледа исправно док саобраћај и даље излази кроз тунел. Читајте метрику и дужину префикса, а не само постојање подразумеваног уноса.
Зауставите се ако оба клијента траже исти префикс са истом метриком. Језгро ће изабрати један, а други ће изгледати повезан док ништа не носи.
Корак 2: проверите резолвер и преклапајуће префиксе
DNS је други судар и даје препознатљив симптом: имена не раде док адресе раде. Сваки клијент намеће свој резолвер, а последњи који упише побеђује за наредне упите. Питајте резолвер сервис шта користи по вези уместо да читате страницу подешавања клијента.
resolvectl status
Get-DnsClientServerAddress
dig +short intranet.corp.example
Затим упоредите приватне префиксе које две мреже користе. Ако обе стране додељују из истог опсега, никаква поставка на страни клијента то неће поправити, јер машина не може да каже која 10.0.0.0/8 дестинација припада ком тунелу. Једна страна мора бити пренумерисана или преведена, и то је разговор са власницима мреже, а не промена конфигурације. Преклапање је једини судар у којем је искрен одговор да дизајн мора да се промени.
Зауставите се овде ако се префикси преклапају. Све касније у овој листи претпоставља да се не преклапају.
Корак 3: изаберите образац раздвајања који издржава
Поуздани обрасци избегавају покретање два клијента према истој табели рутирања. Један клијент са политиком подељеног тунела која достиже обе приватне мреже је најједноставнији, под условом да се дестинације не преклапају и да власник политике пристане. Виртуелна машина или мрежни именски простор је следећи корак, јер сваки добија своју табелу и свој резолвер.
sudo ip netns add vpn2
sudo ip netns exec vpn2 ip link show
sudo ip netns exec vpn2 curl -sI https://intranet.corp.example/
Именски простор даје исто раздвајање као виртуелна машина без другог оперативног система, али има грубе ивице: уређај за тунел мора да се премести у њега, а апликација мора да се покрене унутар њега. Одвојен физички уређај је често најмање изненађујућа опција за лични VPN поред управљаног радног клијента. Стављање једног тунела у други није образац раздвајања; унутрашња крајња тачка мора да остане доступна кроз спољашњи тунел, а такав распоред додаје MTU и проблеме са кашњењем одозго.
Изаберите један образац и запишите зашто. Мешање именског простора за једну апликацију са подељеним тунелом за остале поново ствара оригинални судар у облику који је теже дебагирати.
Корак 4: потврдите обе мреже из исте сесије
Тестирајте један ресурс на свакој приватној мрежи из окружења у којем апликација стварно ради, а не из ваше љуске ако апликација ради унутар именског простора. Проверите излазни интерфејс, разрешену адресу и код одговора заједно, јер успех у једном од три може да сакрије неуспех у осталима. Поновите после рестарта, јер редослед којим се клијенти покрећу одлучује ко побеђује. Управо тај редослед људи забораве да забележе.
curl -sI https://intranet.corp.example/
curl -sI https://files.personal.example/
ip route get 10.20.30.40
Забележите верзије клијената, интерфејсе, стање резолвера и префиксе за сваку мрежу. Када се клијент ажурира и промени своје понашање при рутирању, тај запис је разлика између петоминутне поправке и поновне изградње. Следећа особа неће делити вашу меморију о томе који тунел се први подигао.
Листа је целовита када можете да именујете интерфејс који поседује подразумевану руту, резолвер који свако име користи, образац који раздваја други тунел и резултат једног захтева по мрежи после рестарта. Све мање од тога је конфигурација која данас случајно ради.