Вложен VPN: кой тунел носи външната връзка?
Вътрешният тунел се нуждае от външен път до крайната си точка. Два клиента, стартирани в грешен ред, създават конфликт на маршрути, затова първо оправи вложеността.
Два VPN клиента, работещи едновременно, не създават вложен тунел; те създават два тунела и спор за маршрутизацията. Вложен тунел съществува, когато връзката на вътрешния клиент със собствения му сървър сама е носена от външния тунел, и това е подредба, която се изгражда нарочно. Ако се получи, вътрешният сървър вижда адреса на външния сървър; ако не се получи, един клиент тихо се свързва отново около другия. Три условия решават дали вложеността е истинска или случайна.
Три условия решават вложеността
Първото е коя крайна точка се нуждае от кой път. Назови адреса на вътрешния сървър, назови адреса на външния сървър и изрично заяви, че вътрешният сървър е достъпен само през външния тунел. Всичко останало следва от това изречение, включително кои маршрути принадлежат на коя таблица.
Второто е дали виждаш пътя на всяко ниво. Ако не можеш да попиташ ядрото кой маршрут би използвала конкретна дестинация, извеждаш веригата от краен изходен IP, а това е точно доказателството, което не може да различи вложеност от случайност.
Третото е какво се случва, когато външният тунел падне. Вътрешният тунел може да спре с него, да се свърже отново през обикновената мрежа или да остане блокиран, докато външният път се върне, и трите са защитими политики. Не са една и съща политика, а поведението по подразбиране на повечето клиенти е второто. Клиент, който свързва отново крайната си точка през физическата мрежа, докато показва здрава връзка, е най-честият начин планирана верига тихо да стане два несвързани тунела.
Условие едно: коя крайна точка се нуждае от кой път
ip route get 203.0.113.10 отговаря на този въпрос директно: отпечатва маршрута, изходния адрес и интерфейса, който ядрото би използвало за тази дестинация точно сега.
Изпълни го за вътрешния сървър, преди вътрешният клиент да стартира, и отново след това, и сравни. Ако отговорът се промени от физическия интерфейс към интерфейса на външния тунел, вложеността е истинска в този момент. Ако не се промени, вътрешният клиент се свързва директно, каквото и да казва панелът. Повтори за адреса на външния сървър, който все още трябва да се резолвне през физическия интерфейс, защото маршрут, който прихваща рекурсивно и двете крайни точки, е повредата, която напълно откъсва машината от мрежата.
Условие две: прегледай пътя на всяко ниво
Изборът на маршрут е повече от главната таблица на модерен клиент. Правилата за политика могат да изпращат маркирани пакети към друга таблица, клиентът може да върже сокета си към интерфейс, а контейнер или именно пространство има собствени таблици. ip rule и ip route show table all са начинът да разбереш кой от тези механизми е в игра.
Клиент, който поставя SO_MARK на собствения си сокет или е конфигуриран да се върже към конкретно устройство, заобикаля маршрута по подразбиране, който си мислеше, че си уредил. Това е функция, а не дефект, и означава, че единствената надеждна проверка е тази, която работи в същото именно пространство като клиента. Ако клиентите работят в контейнери, изпълнявай проверките в тези контейнери, а не на хоста.
Условие три: какво се случва, когато външният тунел падне
Поведението при повреда изисква решение, а не стойност по подразбиране. Запиши какво трябва да се случи с вътрешния тунел, когато външният изчезне, и после накарай клиентите да го правят.
Опциите са конкретни. Спирането на вътрешния клиент, когато външният път изчезне, дава чиста верига и очевиден прекъс. Ако му позволиш да се свърже директно, получаваш наличност и тихо премахваш свойството, за което е построена веригата. Блокирането до връщането на външния път е най-строгото и най-досадното за експлоатация, защото всяко трептене на външния тунел става видим инцидент.
Тествай и трите с безвреден трафик и умишлена повреда на външния тунел, защото четенето на конфигурацията няма да ти каже коя имаш. Убий външния тунел, наблюдавай какво прави вътрешният клиент и провери маршрута отново, докато е долу. После върни външния тунел и потвърди, че веригата се оформя отново, вместо вътрешният клиент да остане на директния път, който е избрал междувременно.
Какво не ти дава веригата
Допълнителните нива добавят крайни точки, ключове и режими на повреда; не добавят никаква гаранция за анонимност и не правят външния оператор неспособен да види, че съществува тунел. Всяко твърдение за това от какво предпазва вложеността трябва да назове наблюдателя, от когото предпазва.
Резултатът е кратък документ, а не работеща връзка: коя крайна точка използва кой път, какво се случва при външна повреда и трите команди, които показват текущото състояние. Документацията на strongSwan за препращане е полезен източник за това как трафикът на тунела се препраща между интерфейси на Linux хост. Изпълнявай проверките отново след всяка актуализация на клиента, защото стойностите по подразбиране, създали твоята верига, не са договор. Вложен тунел, който не можеш да прегледаш, е слух със светлинен индикатор.