Скапіруйце профіль на планшэт, падключыцеся — і наўтбук адвальваецца. Дадайце duplicate-cn, абодва застаюцца на сувязі, і праблема выглядае вырашанай, пакуль дзве прылады не пачнуць сварыцца за адзін і той жа адрас тунеля або пакуль страчаны планшэт не выведзе ўвесь уліковы запіс з сеткі. Гэтая опцыя змяняе адну рэч і толькі адну: ці дазваляе сервер другую сесію пад імем, якое ён ужо бачыў. Усё, што людзі чакаюць ад яе выправіць — ад незалежнасці прылад да адрасацыі для кожнай прылады і выбарачнага адклікання — па-ранейшаму робіцца праз асобу, а асоба тут — гэта сертыфікат.

Міф: другая сесія — гэта другая асоба

Інтуіцыя падказвае, што два злучэнні мусяць быць двума кліентамі, а два кліенты — двума прыладамі з уласнымі правамі. Сервер мадэлюе гэта інакш. Ён бачыць агульнае імя і, калі duplicate-cn уключаны, прымае больш за адну актыўную сесію з гэтым імем, і кожная атрымлівае ўласны стан сесіі ў дэмане.

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

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

Што сапраўды змяняецца, калі дзве сесіі дзеляць адно імя

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

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

Пераканайцеся, што робіць менавіта вашая зборка, перш чым будаваць на гэтым рашэнне, бо эфект опцыі вызначае сама опцыя, а не паданні:

grep -n 'duplicate-cn\|client-config-dir\|username-as-common-name' /etc/openvpn/server.conf

Статычны адрас, які вы нібыта прызначылі

Канфігурацыя для кожнага кліента шукаецца па імені, і гэта пастка. Файл client-config-dir, названы па агульным імені прымяняецца да кожнай прылады з гэтым імем, таму ifconfig-push унутры яго дае абедзвюм прыладам адзін і той жа адрас тунеля. Другая сесія альбо не ўсталёўваецца, альбо канфліктуе так, што гэта выглядае як збой маршрутызацыі.

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

Калі разгортванне выкарыстоўвае username-as-common-name, ключом пошуку становіцца аўтэнтыфікаванае імя карыстальніка замест суб'екта сертыфіката, і той жа канфлікт паўтараецца для любога, хто ўваходзіць двойчы. Імя, якое кіруе канфігурацыяй, павінна быць унікальным для кожнай прылады, каб канфігурацыя для кожнай прылады мела сэнс.

Што супольная асоба не можа зрабіць падчас выдалення

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

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

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

Калі супольнае выкарыстанне мэтазгоднае і як яго абмежаваць

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

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

Які б шлях вы ні абралі, правярайце мадэль кіравання, а не ўваход. Падключыце абедзве прылады, пераканайцеся, што ў іх розныя адрасы, потым змадэлюйце страту і праверце, ці можаце вы выдаліць роўна адну з іх. Кіраўніцтва openvpn(8) вызначае межы дзеяння опцыі; а вашая працэдура выдалення вызначае, ці сапраўды прымальнае супольнае выкарыстанне.

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