Угнежђени VPN: који тунел носи спољашњу везу?
Унутрашњи тунел треба спољашњи пут до своје крајње тачке. Два клијента покренута у погрешном редоследу стварају сукоб рута, зато прво поправи угњежђивање.
Два VPN клијента која раде истовремено не стварају угнежђени тунел; стварају два тунела и свађу око усмеравања. Угнежђени тунел постоји када везу унутрашњег клијента са сопственим сервером носи сам спољашњи тунел, а то је распоред који се гради намерно. Ако успе, унутрашњи сервер види адресу спољашњег сервера; ако не успе, један се клијент тихо поново повеже око другог. О томе да ли је угњежђивање стварно или случајно одлучују три услова.
О угњежђивању одлучују три услова
Први је која крајња тачка треба који пут. Именуј адресу унутрашњег сервера, именуј адресу спољашњег сервера и изричито наведи да је унутрашњи сервер доступан само кроз спољашњи тунел. Све остало следи из те реченице, укључујући које руте припадају којој табели.
Други је видиш ли пут на сваком слоју. Ако језгру не можеш да поставиш питање коју би руту одредиште употребило, закључујеш ланац из завршне излазне IP адресе, а то је управо доказ који не може да разликује угњежђивање од случајности.
Трећи је шта се дешава када спољашњи тунел падне. Унутрашњи тунел може да се заустави с њим, поново повеже преко обичне мреже или остане блокиран док се спољашњи пут не врати, а сва три су одбрањиве политике. Нису иста политика, а подразумевано понашање већине клијената је друго. Клијент који поново повеже своју крајњу тачку преко физичке мреже док показује здраво повезивање најчешћи је начин на који намеравани ланац тихо постане два неповезана тунела.
Услов један: која крајња тачка треба који пут
ip route get 203.0.113.10 директно одговара на то питање: исписује руту, изворну адресу и интерфејс који би језгро сада употребило за то одредиште.
Покрени га за унутрашњи сервер пре него што се унутрашњи клијент покрене и још једном после, па упореди. Ако се одговор промени са физичког интерфејса на интерфејс спољашњег тунела, угњежђивање је у том тренутку стварно. Ако се не промени, унутрашњи клијент се повезује директно, шта год плоча говорила. Понови за адресу спољашњег сервера, која се још мора разрешити преко физичког интерфејса, јер је рута која рекурзивно захвати обе крајње тачке квар који уређај потпуно одваја од мреже.
Услов два: прегледај пут на сваком слоју
Избор руте на савременом клијенту је више од главне табеле. Правила политике могу да пошаљу означене пакете у другу табелу, клијент може свој сокет да веже за интерфејс, а контејнер или именски простор има сопствене табеле. ip rule и ip route show table all су начин да откријеш који је од тих механизама у игри.
Клијент који на сопствени сокет поставља SO_MARK или је конфигурисан да се веже за одређени уређај заобилази подразумевану руту за коју си мислио да си је уредио. То је могућност, а не грешка, и значи да је једина поуздана провера она која ради у истом именском простору као клијент. Ако клијенти раде у контејнерима, провере покрени у тим контејнерима, а не на хосту.
Услов три: шта се дешава када спољашњи тунел падне
Понашање при квару захтева одлуку, а не подразумевану вредност. Запиши шта треба да се догоди са унутрашњим тунелом када спољашњи нестане, па нека клијенти то раде.
Могућности су конкретне. Заустављање унутрашњег клијента када спољашњи пут нестане даје чист ланац и очигледан прекид. Ако му дозволиш директно поновно повезивање, добијаш доступност и тихо уклањаш својство због којег је ланац изграђен. Блокирање до повратка спољашњег пута је најстроже и најзахтевније за рад, јер свако задрхтавање спољашњег тунела постаје видљив инцидент.
Тестирај сва три са безопасним саобраћајем и намерним кваром спољашњег тунела, јер читање конфигурације ти неће рећи који имаш. Убиј спољашњи тунел, посматрај шта унутрашњи клијент ради и поново провери руту док је доле. Затим врати спољашњи тунел и потврди да се ланац поново обликује уместо да унутрашњи клијент остане на директном путу који је у међувремену одабрао.
Шта ти ланац не даје
Додатни слојеви додају крајње тачке, кључеве и начине квара; не додају никакво јемство анонимности и не спречавају спољашњег оператера да види да тунел постоји. Свака тврдња о томе од чега угњежђивање штити мора да именује посматрача од којег штити.
Резултат је кратак документ, а не веза која ради: која крајња тачка користи који пут, шта се дешава при спољашњем квару и три наредбе које показују тренутно стање. Документација strongSwan о прослеђивању је користан извор о томе како се саобраћај тунела прослеђује између интерфејса на Linux хосту. Поново покрени провере после сваке надоградње клијента, јер подразумеване вредности које су створиле твој ланац нису уговор. Угнежђени тунел који не можеш да прегледаш је гласина са статусним светлом.