Два адначасова запушчаныя кліенты VPN не ствараюць укладзены тунель; яны ствараюць два тунелі і спрэчку пра маршрутызацыю. Укладзены тунель існуе, калі злучэнне ўнутранага кліента з уласным серверам само нясецца знешнім тунелем, і гэта схема, якую будуюць наўмысна. Калі ўсё правільна, унутраны сервер бачыць адрас знешняга сервера; калі не, адзін кліент ціха перападключаецца вакол іншага. Тры ўмовы вырашаюць, ці ўкладзенасць сапраўдная, ці выпадковая.

Тры ўмовы вырашаюць укладзенасць

Першая — якая канцавая кропка патрабуе якога шляху. Назавіце адрас унутранага сервера, назавіце адрас знешняга сервера і прама пазначце, што ўнутраны сервер даступны толькі праз знешні тунель. Усё астатняе вынікае з гэтай фразы, у тым ліку тое, якія маршруты належаць якой табліцы.

Другая — ці бачыце вы шлях на кожным узроўні. Калі вы не можаце спытаць ядро, які маршрут выкарыстала б канкрэтная прызначэнне, вы выводзіце ланцуг з канцавога выходнага IP, а гэта менавіта той доказ, які не можа адрозніць укладзенасць ад збегу.

Трэцяя — што адбываецца, калі знешні тунель падае. Унутраны тунель можа спыніцца разам з ім, перападключыцца праз звычайную сетку або застацца заблакаваным да вяртання знешняга шляху, і ўсе тры варыянты — абараняльныя палітыкі. Гэта не адна і тая ж палітыка, і прадвызначаныя паводзіны большасці кліентаў — другі варыянт. Кліент, які перападключае сваю канцавую кропку праз фізічную сетку, паказваючы пры гэтым здаровае злучэнне, — самы часты спосаб, якім задуманы ланцуг ціха ператвараецца ў два незвязаныя тунелі.

Умова першая: якая канцавая кропка патрабуе якога шляху

ip route get 203.0.113.10 адказвае на гэтае пытанне непасрэдна: каманда друкуе маршрут, адрас крыніцы і інтэрфейс, які ядро выкарыстала б для гэтага прызначэння проста зараз.

Запусціце яе для ўнутранага сервера да старту ўнутранага кліента і яшчэ раз пасля, а затым параўнайце. Калі адказ змяняецца з фізічнага інтэрфейса на інтэрфейс знешняга тунеля, укладзенасць у гэты момант сапраўдная. Калі ён не змяняецца, унутраны кліент падключаецца напрамую, што б ні казала панэль. Паўтарыце для адраса знешняга сервера, які ўсё яшчэ мусіць вырашацца праз фізічны інтэрфейс, бо маршрут, які рэкурсіўна захоплівае абедзве канцавыя кропкі, — гэта збой, які цалкам адключае машыну ад сеткі.

Умова другая: прагледзьце шлях на кожным узроўні

Выбар маршруту на сучасным кліенце — гэта больш, чым галоўная табліца. Правілы палітыкі могуць адпраўляць пазначаныя пакеты ў іншую табліцу, кліент можа прывязаць свой сокет да інтэрфейса, а кантэйнер або прастора імёнаў мае ўласныя табліцы. ip rule і ip route show table all — гэта спосаб даведацца, які з гэтых механізмаў задзейнічаны.

Кліент, які ставіць SO_MARK на ўласны сокет або наладжаны на прывязку да пэўнай прылады, абыходзіць маршрут па змаўчанні, які вы, як вам здавалася, наладзілі. Гэта асаблівасць, а не памылка, і яна азначае, што адзіная надзейная праверка — тая, што выконваецца ў той самай прасторы імёнаў, што і кліент. Калі кліенты працуюць у кантэйнерах, выконвайце праверкі ў гэтых кантэйнерах, а не на хосце.

Умова трэцяя: што адбываецца, калі знешні тунель падае

Паводзіны пры збоі патрабуюць рашэння, а не значэння па змаўчанні. Запішыце, што павінна адбыцца з унутраным тунелем, калі знікне знешні, і потым прымусьце кліентаў рабіць гэта.

Варыянты канкрэтныя. Спыненне ўнутранага кліента, калі знікае знешні шлях, дае чысты ланцуг і відавочны збой. Калі дазволіць яму падключацца напрамую, вы атрымаеце даступнасць і ціха страціце ўласцівасць, дзеля якой будаваўся ланцуг. Блакаванне да вяртання знешняга шляху — самы строгі і самы нязручны ў эксплуатацыі варыянт, бо кожнае ваганне знешняга тунеля становіцца бачным інцыдэнтам.

Праверце ўсе тры на бясшкодным трафіку з наўмысным збоем знешняга тунеля, бо чытанне канфігурацыі не скажа вам, які з іх у вас. Забіце знешні тунель, паназірайце, што робіць унутраны кліент, і зноў праверце маршрут, пакуль ён ляжыць. Затым вярніце знешні тунель і пераканайцеся, што ланцуг збіраецца нанова, а не пакідае ўнутраны кліент на прамым шляху, які ён абраў тым часам.

Чаго ланцуг не дае

Дадатковыя ўзроўні дадаюць канцавыя кропкі, ключы і рэжымы адмовы; яны не дадаюць ніякай гарантыі ананімнасці і не перашкаджаюць знешняму аператару бачыць, што тунель існуе. Любое сцвярджэнне пра тое, ад чаго абараняе ўкладзенасць, павінна назваць назіральніка, ад якога яна абараняе.

Вынік — кароткі дакумент, а не працоўнае злучэнне: якая канцавая кропка выкарыстоўвае які шлях, што адбываецца пры знешнім збоі і тры каманды, што паказваюць бягучы стан. Дакументацыя strongSwan пра перасыланне — карысная крыніца пра тое, як трафік тунеля перасылаецца паміж інтэрфейсамі на хосце Linux. Паўтарайце праверкі пасля кожнага абнаўлення кліента, бо налады па змаўчанні, што стварылі ваш ланцуг, не ёсць кантрактам. Укладзены тунель, які вы не можаце праверыць, — гэта чутка з індыкатарам стану.

Падобныя артыкулы